Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1756 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [HELP] Programme en C !

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[HELP] Programme en C !

n°2221699
narshak_64
Posté le 06-03-2014 à 20:32:01  profilanswer
 

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 !

mood
Publicité
Posté le 06-03-2014 à 20:32:01  profilanswer
 

n°2221703
narshak_64
Posté le 06-03-2014 à 20:50:31  profilanswer
 

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

n°2221707
xilebo
noone
Posté le 06-03-2014 à 21:02:05  profilanswer
 

écris ce que tu imagines en pseudo-code ici déjà, car c'est très simple.

n°2221708
torwood3
Posté le 06-03-2014 à 21:02:55  profilanswer
 

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
n°2221711
narshak_64
Posté le 06-03-2014 à 21:10:24  profilanswer
 

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

n°2221712
narshak_64
Posté le 06-03-2014 à 21:18:26  profilanswer
 

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 ?

n°2221714
xilebo
noone
Posté le 06-03-2014 à 21:20:11  profilanswer
 

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.
 

n°2221715
narshak_64
Posté le 06-03-2014 à 21:25:07  profilanswer
 

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.

n°2221717
xilebo
noone
Posté le 06-03-2014 à 21:31:52  profilanswer
 

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
n°2221718
narshak_64
Posté le 06-03-2014 à 21:35:49  profilanswer
 

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

mood
Publicité
Posté le 06-03-2014 à 21:35:49  profilanswer
 

n°2221720
xilebo
noone
Posté le 06-03-2014 à 21:39:57  profilanswer
 

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
n°2221721
narshak_64
Posté le 06-03-2014 à 21:43:19  profilanswer
 

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

n°2221722
narshak_64
Posté le 06-03-2014 à 21:49:08  profilanswer
 

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

n°2221723
narshak_64
Posté le 06-03-2014 à 21:54:32  profilanswer
 

Oui, c'est bourré de faute, mais je crois que je vais en rester là car j'arrive a rien...

n°2221727
xilebo
noone
Posté le 06-03-2014 à 22:01:10  profilanswer
 

qu est ce que tu n'as pas compris dans ce que je t'ai rajouté ?

n°2221730
narshak_64
Posté le 06-03-2014 à 22:15:15  profilanswer
 

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

n°2221732
xilebo
noone
Posté le 06-03-2014 à 22:19:25  profilanswer
 

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.

n°2221735
narshak_64
Posté le 06-03-2014 à 22:56:41  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [HELP] Programme en C !

 

Sujets relatifs
[C++] manipulation de tableau a l'aide des references ?besoin d'aide sur programme SVP !
Visual C++ 2010 Express et SDLC# Problème de clé absente du dictionnaire
[Projet/Help] Space invader spécial SW Processing.[HELP] Visual C++
Programme se bloqueProgramme Arduino
Help programme en CPremier programme C (manip. de fichiers txt)
Plus de sujets relatifs à : [HELP] Programme en C !


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR