Programme en C ! [HELP] - C - Programmation
Marsh Posté le 06-03-2014 à 21:02:05
écris ce que tu imagines en pseudo-code ici déjà, car c'est très simple.
Marsh Posté le 06-03-2014 à 21:02:55
Bonjour,
Merci pour la proposition extremement alléchante, mais je prends que les cookies au chocolat au lait.
Bonne chance
Ps : dit nous la où tu coinces, montre nous ce que tu as essayé de faire et fait un tour sur google aussi. Quant tu auras fais ca on se fera un plaisir de t'aider
Ps2 : La politique ici c'est l'aide, on ne fait pas du code pour les autres mais on les aides à le faire !!
Marsh Posté le 06-03-2014 à 21:10:24
J'ai finalement fini ce programme pour les volontaires :
int main(int argc, char** argv) {
int nombre;
int compteur = 1;
int compteurdezero = 1;
printf("Veuillez entrer un nombre : " );
scanf("%d",&nombre);
while (compteur != nombre){
if (nombre % compteur == 0){
compteurdezero++;
}
compteur++;
}
if (compteurdezero == 2){
printf("C'est un nombre premier\n" );
} else {
printf("Ce n'est pas un nombre premier\n" );
}
return (EXIT_SUCCESS);
}
Marsh Posté le 06-03-2014 à 21:18:26
Mais maintenant je dois reprendre ce code pour, afficher les nombres premiers allant jusqu'à 256. Et la je rame deja... Quelques petits éclairage pour m'aider ?
Marsh Posté le 06-03-2014 à 21:20:11
Avec ton programme, 1 n'est pas considéré comme un nombre premier alors que ça en est un.
Ton programme n'évite pas une mauvaise saisie utilisateur également.
Il y a moyen d'optimiser ton programme :
- sortir de la boucle dès que tu as détecté que le nombre était forcément non premier. En effet, inutile de tester si ton nombre n'est pas premier si tu le sais déjà.
- faire moins d'itérations : au lieu d'aller de 1 à nombre, tu peux aller de 1 à nombre / 2. Cela se démontre facilement mathématiquement
- une optimisation supplémentaire : ne diviser que par des nombres impairs ( après 2 ). En effet, si ton nombre n'est pas divisible par 2, il ne le sera jamais par un nombre pair > 2. De manière générale, il suffirait de tester uniquement avec tous les nombres premiers inférieurs au nombre à tester, mais malheureusement la liste n'est pas déterministe.
Marsh Posté le 06-03-2014 à 21:25:07
L'optimisation je m'en fou un peu car c'est pour les cours et c'est un devoir non-noté, mais pour le problème du 1, je ne vois pas comment faire pour contrer cela...
Un peu d'aide avec du code pour montrer (j'ai besoin de ça pour comprendre) est le bienvenue.
Marsh Posté le 06-03-2014 à 21:31:52
narshak_64 a écrit : Mais maintenant je dois reprendre ce code pour, afficher les nombres premiers allant jusqu'à 256. Et la je rame deja... Quelques petits éclairage pour m'aider ? |
Très simple, tu fais une boucle de 1 à 256 , dans laquelle tu utilises ton code , et plutot que de demander à l'utilisateur de saisir un nombre, tu fournis la variable que tu as incrémenté à chaque tour de boucle, et tu modifies ton affichage pour que ca n'affiche que lorsque ton nombre est bien premier.
sinon tu fais ca
Code :
|
Trève de plaisanterie, apparemment j'ai dit une bêtise, 1 n'est pas considéré comme un nombre premier au sens strict du terme car il n'a qu'un seul diviseur alors qu'un nombre premier en a 2 : lui même et 1.
Marsh Posté le 06-03-2014 à 21:35:49
Haha, tu m'as fait sourire xD Mais comme tu dis et trêve de plaisanterie, oui 1 est n'est pas un nombre premier. Mais pour le 256, je ne saisis pas, un exemple en code ? Ne vous inquiétez pas, je ne suis pas débile et j'essaie de comprendre avant de copier quoi que se soit, pour moi c'est pas un devoir mais pour mon savoir :$
Marsh Posté le 06-03-2014 à 21:39:57
si je reprends strictement le code que tu as fait : ( mets les balise code )
Code :
|
et que j'ajoute en pseudo code ce que je te propose de faire :
Code :
|
ca devrait t'orienter sur quoi faire. Je n'en dirai pas plus.
Marsh Posté le 06-03-2014 à 21:43:19
Laisse tomber, je ne comprends rien... Je baisse les bras...
Marsh Posté le 06-03-2014 à 21:49:08
int main(int argc, char** argv) {
int compteur = 1;
int nombredezero = 1;
int valeur = 1;
int modulo = 1;
while (compteur != 256){
modulo = 1;
if (valeur % modulo == 0){
nombredezero++;
}
if (nombredezero == 2){
printf("%d\n",compteur);
}
compteur++;
modulo++;
valeur++;
}
return (EXIT_SUCCESS);
}
Marsh Posté le 06-03-2014 à 21:54:32
Oui, c'est bourré de faute, mais je crois que je vais en rester là car j'arrive a rien...
Marsh Posté le 06-03-2014 à 22:01:10
qu est ce que tu n'as pas compris dans ce que je t'ai rajouté ?
Marsh Posté le 06-03-2014 à 22:15:15
variable iteration = 1;
/* comment initialiser mon "nombre" avec ma "variable" ? */
INCREMENTER VARIABLE
FIN TANT QUE
Marsh Posté le 06-03-2014 à 22:19:25
c'est du pseudo-code ( http://fr.wikipedia.org/wiki/Pseudo-code )
Si je te mets le code C directement, ca répond à ta question sans que tu n'aies chercher à le faire.
Si ca te perturbe tant que ca, vois plutot la chose de la façon suivante : tu as fait un programme ( le premier ) qui fonctionne à priori. Je l'ai testé, en dehors des tests de sécurité sur la saisie, et l'ambiguité du 1 , il fonctionne.
Maintenant, si tu appelles 256 fois ton programme, et que ton utilisateur saisit les nombres de 1 à 256, tu obtiens bien le résultat que tu veux.
Réfléchis donc à la manière d'appeler automatiquement 256 fois ton bout de code, je t'ai quasiment donné la solution.
Marsh Posté le 06-03-2014 à 22:56:41
une variable que je vais incrementer a chaque fin de boucle ?
Marsh Posté le 06-03-2014 à 20:32:01
Bonsoir,
Pour demain, je dois réaliser un programme qui, quand on lui donne un chiffre, il nous indiquera s'il est premier ou pas. J'y suis coincé depuis bientôt 2h30 et je commence à perdre patience svp !
PS: Je peux utiliser que les "while", "do", "if", "modulo".... les fonctions et "for", je n'ai pas encore appris cela.
Merci beaucoup !