Se connecter / S'enregistrer
Votre question

Mon premier programme C++

Tags :
  • Time
  • Programmation
Dernière réponse : dans Programmation
21 Septembre 2005 19:55:00

Bonsoir
Voilà on m'a demandé de faire un générateur de nom aléatoire en C++ et grâce en partie à l'aide de ce forum j'ai plus ou moins réussi... (programme terriblement basique et ininteressant je suis parfaitement d'accord)

  1. #include <stdlib.h>
  2. #include <time.h>
  3. #include <conio.h>
  4. #include <iostream>
  5. #include <string>
  6. #include <cstdio>
  7. #include <cstdlib>
  8.  
  9.  
  10. using namespace std;
  11.  
  12.  
  13. int main( int argc, char *argv[] )
  14. {
  15.  
  16. srand( time( NULL ) );
  17.  
  18. int consomnesouvoyelles;
  19. int consomnes;
  20. int voyelles;
  21. int lettres;
  22.  
  23. cout << "Bonjour : ce programme permet de g\x82n\x82rer des noms.\n";
  24.  
  25.  
  26. cout << "Inscrivez le nombre de lettres pour votre nom : ";
  27. cin >> lettres;
  28. cout << "\n \n";
  29. cout << "Le nom g\x82n\x82r\x82 au hasard est : ";
  30.  
  31. for( int i = 0 ; i < lettres / 2 ; ++i )
  32. {
  33. //consomnesouvoyelles = 1 + int( double( rand() ) / ( double( RAND_MAX) + 1 ) * 2 );
  34.  
  35. //if (consomnesouvoyelles == 1)
  36. //{
  37.  
  38.  
  39.  
  40. voyelles = 1 + int( double( rand() ) / ( double( RAND_MAX) + 1 ) * 15 );
  41.  
  42. if ((voyelles == 1) | (voyelles == 7) | (voyelles == 8) | (voyelles == 14))
  43. {
  44. cout << "A";
  45. }
  46. else if ((voyelles == 2) | (voyelles == 9) | (voyelles == 10) | (voyelles == 13))
  47. {
  48. cout << "E";
  49. }
  50. else if ((voyelles == 3) | (voyelles == 11))
  51. {
  52. cout << "I";
  53. }
  54. else if ((voyelles == 4) | (voyelles == 12) | (voyelles == 15))
  55. {
  56. cout << "O";
  57. }
  58. else if (voyelles == 5)
  59. {
  60. cout << "U";
  61. }
  62. else if (voyelles == 6)
  63. {
  64. cout << "Y";
  65. }
  66. //}
  67. //else if (consomnesouvoyelles == 2)
  68. //{
  69. consomnes = 1 + int( double( rand() ) / ( double( RAND_MAX) + 1 ) * 50 );
  70.  
  71. if ((consomnes == 1) | (consomnes == 46))
  72. {
  73. cout << "B";
  74. }
  75. else if ((consomnes == 2) | (consomnes == 45))
  76. {
  77.  
  78. cout << "C";
  79. }
  80. else if ((consomnes == 3) | (consomnes == 21) | (consomnes == 22))
  81. {
  82. cout << "D";
  83. }
  84. else if ((consomnes == 4) | (consomnes == 23) | (consomnes == 24))
  85. {
  86. cout << "F";
  87. }
  88. else if ((consomnes == 5) | (consomnes == 25))
  89. {
  90. cout << "G";
  91. }
  92. else if (consomnes == 6)
  93. {
  94. cout << "H";
  95. }
  96. else if (consomnes == 7)
  97. {
  98.  
  99. cout << "Z";
  100. }
  101. else if (consomnes == 8)
  102. {
  103. cout << "J";
  104. }
  105. else if (consomnes == 9)
  106. {
  107. cout << "K";
  108. }
  109. else if ((consomnes == 10) | (consomnes == 47) | (consomnes == 48) | (consomnes == 49) | (consomnes == 50))
  110. {
  111. cout << "L";
  112. }
  113. else if ((consomnes == 11) | (consomnes == 26) | (consomnes == 27) | (consomnes == 28) | (consomnes == 29))
  114. {
  115. cout << "M";
  116. }
  117. else if ((consomnes == 12) | (consomnes == 30) | (consomnes == 31) | (consomnes == 32))
  118. {
  119.  
  120. cout << "N";
  121. }
  122. else if ((consomnes == 13) | (consomnes == 33) | (consomnes == 34) | (consomnes == 35))
  123. {
  124. cout << "P";
  125. }
  126. else if (consomnes == 14)
  127. {
  128. cout << "Q";
  129. }
  130. else if ((consomnes == 15) | (consomnes == 36) | (consomnes == 37) | (consomnes == 38) | (consomnes == 39))
  131. {
  132. cout << "R";
  133. }
  134. else if ((consomnes == 16) | (consomnes == 40) | (consomnes == 41))
  135. {
  136. cout << "S";
  137. }
  138. else if ((consomnes == 17) | (consomnes == 42) | (consomnes == 43) | (consomnes == 44))
  139. {
  140.  
  141. cout << "T";
  142. }
  143. else if (consomnes == 18)
  144. {
  145. cout << "V";
  146. }
  147. else if (consomnes == 19)
  148. {
  149. cout << "W";
  150. }
  151. else if (consomnes == 20)
  152. {
  153. cout << "X";
  154. }
  155. // }
  156.  
  157. }
  158.  
  159.  
  160. cout << " \n \n \n Le programme va maintenant quitter. Au revoir et merci ! \n";
  161.  
  162.  
  163. cout << "\n ******************************\n";
  164. system("PAUSE");
  165. return 0;
  166. }



La raison pour laquelle je poste ici est que si vous essayez mon programme et que vous inscrivez un chiffre impaire : l'ordinateur sortira un nom à 8 lettres...
Si quelqu'un a une idée pour arranger ça merci d'avance !

A part ça je voulais remercier le forum grâce a qui il est beaucoup plus simple de débuter dans la programmation :-D
Même s'il est vrai qu'il me reste beaucoup de chemin à parcourir lool.

EDIT : J'ai déjà pensé à une solution qui serait de mettre une variable voyelleouconsomne qui serait un chiffre au hasard entre 1 et 2 dans le cas de 1 une voyelle dans le cas de 2 une consomne mais je préfèrerais un nom qui alterne a chaque fois

Autres pages sur : premier programme

a b L Programmation
21 Septembre 2005 20:13:28

J'ai pas encore testé ton code mais à première vue, si on met un nombre impair, par exemple 5, 5/2=2 en int
la boucle va faire i=0 et i=1
donc tu auras toujours un nombre pair puisque tu fais 2 caractères par boucles.
Maintenant 8 c'est bizarre.

EDIT: j'ai testé le code, ça marche bien comme ça: quand je mets un nombre impair n, ça génère un mot de n-1 caractères.
si tu veux tester si c'est pair, cherche le reste de la division avec le modulo:
(lettres % 2) vaut 0 si c'est impair, 1 si c'est pair.
Moi à ta place j'aurais fait un tirage truqué:
si le caractère précédent est consonne, avoir 60% de chance de tirer une consone, et si c'était une voyelle, avoir 80% de chance de tirer une consonne. Après tu peux jouer avec les pourcentages pour générer au mieux des mots ;-)
21 Septembre 2005 20:41:56

Lol je sais pas pourquoi j'ai écris 8 ... j'ai tapé trop vite je pense je voulais dire lettres - 1...
Donc avec le modulo je peux tester si un nombre inconnus est pair ou impair ??
Contenus similaires
a b L Programmation
21 Septembre 2005 21:32:36

Oui:
  1. if(lettre % 2 == 0) {
  2. // ici c'est pair
  3. }
  4. else {
  5. // ici c'est impair
  6. }


Pour comprendre le fait que tu ais nombre - 1, en calculs entiers:
5 / 2 * 2 == 4
car 5 / 2 = 2 et pas 2.5
avec la boucle tu fais le 5 / 2 = 2, et comme tu en mets 2 par boucle ça fait 4.

c'est pour ça qu'il faut faire attention à l'ordre des multiplication et divisions car:
5 / 2 * 2 == 4
5 * 2 / 2 == 5
c'est pourquoi avec le rand(), on convertit en double:

double(5) / 2 * 2 exécute ceci:
5.0 / 2 (un double divisé par un int => cast implicite de l'int en double)
soit 5.0 / 2.0 = 2.5
puis 2.5 * 2 (pareil cast implicite)
soit 2.5 * 2.0 = 5.0

donc en fait,
int( double(5) / 2 * 2 ) != 5 / 2 * 2
21 Septembre 2005 21:33:53

  1. #include <stdlib.h>
  2. #include <time.h>
  3. #include <conio.h>
  4. #include <iostream>
  5. #include <string>
  6. #include <cstdio>
  7. #include <cstdlib>
  8.  
  9.  
  10. using namespace std;
  11.  
  12.  
  13. int main( int argc, char *argv[] )
  14. {
  15. // initialisation du générateur de nombres pseudo-aléatoire
  16. srand( time( NULL ) );
  17.  
  18. int consomnesouvoyelles;
  19. int consomnes;
  20. int voyelles;
  21. int lettres;
  22. int plus = lettres % 2;
  23.  
  24. cout << "Bonjour : ce programme permet de g\x82n\x82rer des noms.\n";
  25.  
  26.  
  27. cout << "Inscrivez le nombre de lettres pour votre nom : ";
  28. cin >> lettres;
  29. cout << "\n \n";
  30. cout << "Le nom g\x82n\x82r\x82 au hasard est : ";
  31.  
  32. for( int i = 0 ; i < lettres / 2 ; ++i )
  33. {
  34. //consomnesouvoyelles = 1 + int( double( rand() ) / ( double( RAND_MAX) + 1 ) * 2 );
  35.  
  36. //if (consomnesouvoyelles == 1)
  37. //{
  38.  
  39.  
  40.  
  41. voyelles = 1 + int( double( rand() ) / ( double( RAND_MAX) + 1 ) * 15 );
  42.  
  43. if ((voyelles == 1) | (voyelles == 7) | (voyelles == 8) | (voyelles == 14))
  44. {
  45. cout << "A";
  46. }
  47. else if ((voyelles == 2) | (voyelles == 9) | (voyelles == 10) | (voyelles == 13))
  48. {
  49. cout << "E";
  50. }
  51. else if ((voyelles == 3) | (voyelles == 11))
  52. {
  53. cout << "I";
  54. }
  55. else if ((voyelles == 4) | (voyelles == 12) | (voyelles == 15))
  56. {
  57. cout << "O";
  58. }
  59. else if (voyelles == 5)
  60. {
  61. cout << "U";
  62. }
  63. else if (voyelles == 6)
  64. {
  65. cout << "Y";
  66. }
  67. //}
  68. //else if (consomnesouvoyelles == 2)
  69. //{
  70. consomnes = 1 + int( double( rand() ) / ( double( RAND_MAX) + 1 ) * 50 );
  71.  
  72. if ((consomnes == 1) | (consomnes == 46))
  73. {
  74. cout << "B";
  75. }
  76. else if ((consomnes == 2) | (consomnes == 45))
  77. {
  78.  
  79. cout << "C";
  80. }
  81. else if ((consomnes == 3) | (consomnes == 21) | (consomnes == 22))
  82. {
  83. cout << "D";
  84. }
  85. else if ((consomnes == 4) | (consomnes == 23) | (consomnes == 24))
  86. {
  87. cout << "F";
  88. }
  89. else if ((consomnes == 5) | (consomnes == 25))
  90. {
  91. cout << "G";
  92. }
  93. else if (consomnes == 6)
  94. {
  95. cout << "H";
  96. }
  97. else if (consomnes == 7)
  98. {
  99.  
  100. cout << "Z";
  101. }
  102. else if (consomnes == 8)
  103. {
  104. cout << "J";
  105. }
  106. else if (consomnes == 9)
  107. {
  108. cout << "K";
  109. }
  110. else if ((consomnes == 10) | (consomnes == 47) | (consomnes == 48) | (consomnes == 49) | (consomnes == 50))
  111. {
  112. cout << "L";
  113. }
  114. else if ((consomnes == 11) | (consomnes == 26) | (consomnes == 27) | (consomnes == 28) | (consomnes == 29))
  115. {
  116. cout << "M";
  117. }
  118. else if ((consomnes == 12) | (consomnes == 30) | (consomnes == 31) | (consomnes == 32))
  119. {
  120.  
  121. cout << "N";
  122. }
  123. else if ((consomnes == 13) | (consomnes == 33) | (consomnes == 34) | (consomnes == 35))
  124. {
  125. cout << "P";
  126. }
  127. else if (consomnes == 14)
  128. {
  129. cout << "Q";
  130. }
  131. else if ((consomnes == 15) | (consomnes == 36) | (consomnes == 37) | (consomnes == 38) | (consomnes == 39))
  132. {
  133. cout << "R";
  134. }
  135. else if ((consomnes == 16) | (consomnes == 40) | (consomnes == 41))
  136. {
  137. cout << "S";
  138. }
  139. else if ((consomnes == 17) | (consomnes == 42) | (consomnes == 43) | (consomnes == 44))
  140. {
  141.  
  142. cout << "T";
  143. }
  144. else if (consomnes == 18)
  145. {
  146. cout << "V";
  147. }
  148. else if (consomnes == 19)
  149. {
  150. cout << "W";
  151. }
  152. else if (consomnes == 20)
  153. {
  154. cout << "X";
  155. }
  156. // }
  157.  
  158. }
  159. if (plus = 1)
  160. {
  161. voyelles = 1 + int( double( rand() ) / ( double( RAND_MAX) + 1 ) * 15 );
  162.  
  163. if ((voyelles == 1) | (voyelles == 7) | (voyelles == 8) | (voyelles == 14))
  164. {
  165. cout << "A";
  166. }
  167. else if ((voyelles == 2) | (voyelles == 9) | (voyelles == 10) | (voyelles == 13))
  168. {
  169. cout << "E";
  170. }
  171. else if ((voyelles == 3) | (voyelles == 11))
  172. {
  173. cout << "I";
  174. }
  175. else if ((voyelles == 4) | (voyelles == 12) | (voyelles == 15))
  176. {
  177. cout << "O";
  178. }
  179. else if (voyelles == 5)
  180. {
  181. cout << "U";
  182. }
  183. else if (voyelles == 6)
  184. {
  185. cout << "Y";
  186. }
  187. }
  188.  
  189.  
  190. cout << " \n \n \n Le programme va maintenant quitter. Au revoir et merci ! \n";
  191.  
  192.  
  193. cout << "\n ******************************\n";
  194. system("PAUSE");
  195. return 0;
  196. }


Encore merci
22 Septembre 2005 18:17:50

Euh ... je sais pas pourquoi le lettres % 2 retourne toujours 1 même quand lettres est pair ...
a b L Programmation
22 Septembre 2005 22:39:17

Je vois 2 erreurs:
- la première tu fais
plus = lettres % 2;
or lettres n'a pas initialisé, donc lettres a une valeur qu'on ne connait pas (ce n'est pas forcément 0)
donc plus peut etre 0 ou 1 et ça bougera pas selon le nombre qu'on entre après.
donc il faut faire
plus = lettres % 2;
après que l'utilisateur ait donné la valeur de lettres ;-)

- la deuxième erreur: tu as refait la même erreur qu'au premier post:
c'est pas
if ( plus = 1 )
mais
if ( plus == 1 )
Il faut faire attention, ça arrive souvent au début ;-)

la deuxième erreur fait que tu affete toujours plus à 1.
La première si lettre est initialisée à 0, de donne toujours plus = 0 % 2 = 0
donc pense à corriger les 2 ;-)
je sais pas s'il y en a d'autres comme ça j'ai pas testé.
22 Septembre 2005 22:45:09

tu connais switch ?
a b L Programmation
22 Septembre 2005 22:47:21

Citation :

bluedylc a écrit :
tu connais switch ?

C'est vrai qu'il fait mal à la tête ce code :-D
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS