[HELP] Programme en C !

Programme en C ! [HELP] - C - Programmation

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 !

Reply

Marsh Posté le 06-03-2014 à 20:32:01   

Reply

Marsh Posté le 06-03-2014 à 20:50:31    

S'il vous plait, vous aurez un cookie ;)

Reply

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.

Reply

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 :p  
 
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 !!


---------------
"La valeur d'un homme tient dans sa capacité à donner et non dans sa capacité à recevoir." Albert Einstein / "Dans la nature, tout a toujours une raison. Si tu comprends cette raison, tu n'as plus besoin de l'expérience." Léonard De Vinci
Reply

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);
}

Reply

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 ?

Reply

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.
 

Reply

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.

Reply

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 :o
 

Code :
  1. #include <stdio.h>
  2. int main()
  3. {
  4. printf("1\n" );
  5. printf("2\n" );
  6. printf("3\n" );
  7. printf("5\n" );
  8. printf("7\n" );
  9. printf("11\n" );
  10. printf("13\n" );
  11. printf("17\n" );
  12. printf("19\n" );
  13. printf("23\n" );
  14. printf("29\n" );
  15. printf("31\n" );
  16. printf("37\n" );
  17. printf("41\n" );
  18. printf("43\n" );
  19. printf("47\n" );
  20. printf("53\n" );
  21. printf("59\n" );
  22. printf("61\n" );
  23. printf("67\n" );
  24. printf("71\n" );
  25. printf("73\n" );
  26. printf("79\n" );
  27. printf("83\n" );
  28. printf("89\n" );
  29. printf("97\n" );
  30. printf("101\n" );
  31. printf("103\n" );
  32. printf("107\n" );
  33. printf("109\n" );
  34. printf("113\n" );
  35. printf("127\n" );
  36. printf("131\n" );
  37. printf("137\n" );
  38. printf("139\n" );
  39. printf("149\n" );
  40. printf("151\n" );
  41. printf("157\n" );
  42. printf("163\n" );
  43. printf("167\n" );
  44. printf("173\n" );
  45. printf("179\n" );
  46. printf("181\n" );
  47. printf("191\n" );
  48. printf("193\n" );
  49. printf("197\n" );
  50. printf("211\n" );
  51. printf("223\n" );
  52. printf("227\n" );
  53. printf("229\n" );
  54. printf("233\n" );
  55. printf("239\n" );
  56. printf("241\n" );
  57. printf("251\n" );
  58. return 0;
  59. }


 
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.


Message édité par xilebo le 06-03-2014 à 21:32:37
Reply

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 :$

Reply

Marsh Posté le 06-03-2014 à 21:35:49   

Reply

Marsh Posté le 06-03-2014 à 21:39:57    

si je reprends strictement le code que tu as fait  : ( mets les balise code )
 

Code :
  1. int main(int argc, char** argv) {
  2.    
  3.     int nombre;
  4.     int compteur = 1;
  5.     int compteurdezero = 1;
  6.    
  7.     printf("Veuillez entrer un nombre : " );
  8.     scanf("%d",&nombre);
  9.    
  10.     while (compteur != nombre){
  11.         if (nombre % compteur == 0){
  12.             compteurdezero++;
  13.         }
  14.         compteur++;
  15.     }
  16.    
  17.     if (compteurdezero == 2){
  18.         printf("C'est un nombre premier\n" );
  19.     } else {
  20.         printf("Ce n'est pas un nombre premier\n" );
  21.     }
  22.     return (EXIT_SUCCESS);
  23. }


 
et que j'ajoute en pseudo code ce que je te propose de faire :
 

Code :
  1. int main(int argc, char** argv) {
  2. VARIABLE ITERATION = 1
  3. TANT QUE VARIABLE <=256
  4.    
  5.     int nombre;
  6.     int compteur = 1;
  7.     int compteurdezero = 1;
  8.    
  9.     printf("Veuillez entrer un nombre : " );
  10.    scanf("%d",&nombre);
  11. /* comment initialiser  mon "nombre" avec ma "variable" ? */
  12.    
  13.     while (compteur != nombre){
  14.         if (nombre % compteur == 0){
  15.             compteurdezero++;
  16.         }
  17.         compteur++;
  18.     }
  19.    
  20.     if (compteurdezero == 2){
  21.         printf("C'est un nombre premier\n" );
  22.     } else {
  23.         printf("Ce n'est pas un nombre premier\n" );
  24.     }
  25. INCREMENTER VARIABLE
  26. FIN TANT QUE
  27.     return (EXIT_SUCCESS);
  28. }


 
ca devrait t'orienter sur quoi faire. Je n'en dirai pas plus.


Message édité par xilebo le 06-03-2014 à 21:40:35
Reply

Marsh Posté le 06-03-2014 à 21:43:19    

Laisse tomber, je ne comprends rien... Je baisse les bras...

Reply

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);
}

Reply

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...

Reply

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é ?

Reply

Marsh Posté le 06-03-2014 à 22:15:15    

variable iteration = 1;
 /* comment initialiser  mon "nombre" avec ma "variable" ? */
INCREMENTER VARIABLE
FIN TANT QUE

Reply

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.

Reply

Marsh Posté le 06-03-2014 à 22:56:41    

une variable que je vais incrementer a chaque fin de boucle ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed