Faire un boucle pour recommencer un application quand ceci fini.

Faire un boucle pour recommencer un application quand ceci fini. - C++ - Programmation

Marsh Posté le 26-08-2004 à 08:44:34    

Salut
 
J'ai fais un petit programme de convertion de cm<->pouce et pouce<->cm. Tout fonctionne à merveille. Maintenant je veux que le programme retourne au début après avoir accomplit sa tâche pour refaire une autre convertion. Je pense qu'on fait ça à l'aide des boucles; j'ai lu un peu sur "while, for, switch..." et j'ai essayé quelque trucs mais ça ne marche pas. Alors j'apprécirai vos conseils.
 
Voici la source:
 

Code :
  1. #include <iostream.h>
  2. float cmin(float cm, const float factorcm=2.14)
  3. {
  4.   float rcm;
  5.   rcm = cm/factorcm;
  6.   return rcm;
  7. }
  8. // Convertion de cm en pouce.
  9. float incm(float in, const float factorin=2.14)
  10. {
  11.   float resultatin;
  12.   resultatin = in*factorin;
  13.   return resultatin;
  14. }
  15. // Convertion de pouce en cm.
  16. int main(float inCalcule, float cmCalcule, float x, char ch)
  17. {
  18.   cout<<"Entrer une mesure :\n";
  19.   cin>>x>>ch;
  20. switch (ch)
  21. {
  22.    case 'i':
  23.     inCalcule=x;
  24.     cmCalcule=incm(x);
  25.     cout<<inCalcule<<" pouces = "<<cmCalcule<<" cm.\n";
  26.     break;
  27.    case 'c':
  28.     inCalcule = cmin(x);
  29.     cmCalcule=x;
  30.     cout<<cmCalcule<<" cm = "<<inCalcule<<" pouces.\n";
  31.     break;
  32. }
  33. system("PAUSE" );
  34. return 0;
  35. }


 
NB: Je ne pouvais pas faire de recherche sur le forum.


Message édité par Alperx le 26-08-2004 à 08:45:36
Reply

Marsh Posté le 26-08-2004 à 08:44:34   

Reply

Marsh Posté le 26-08-2004 à 09:18:08    

Code :
  1. int restart = 1;
  2. while (restart){
  3. //blabla
  4. cin>>restart; //1 pour recommencer, 0 pour quitter
  5. }


 
mais y te manque quelques notions logiques toi amha ;)
 
y a quelques trucs dans ton code que je capte pas...
 
dans ta declaration de tes fonctions, je voit qu'elles ont 2 parametres en entrée, et tu ne leur en passe qu'un  :heink:
 
 
et ca c'est quoi ?
 

Code :
  1. int main(float inCalcule, float cmCalcule, float x, char ch)


 
 :heink: ²
 
et juste comme ca, si 'ch' ne veut ni 'i' ni 'c', tu fait quoi ?


Message édité par didier1809 le 26-08-2004 à 09:32:46

---------------
.
Reply

Marsh Posté le 26-08-2004 à 16:15:51    

A propos, un pouce c'est 2.54 cm et non 2.14, à moins que tu aies des petites mains bien sûr...

Reply

Marsh Posté le 26-08-2004 à 19:08:10    

didier1809 a écrit :


dans ta declaration de tes fonctions, je voit qu'elles ont 2 parametres en entrée, et tu ne leur en passe qu'un  :heink:


Tu t'aventures mon gars! Ca s'appelle les parametres par défaut.

Reply

Marsh Posté le 26-08-2004 à 19:13:43    

Code :
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. // Convertion de cm en pouce.
  5. float cmin(float cm, const float factorcm=2.14)
  6. {
  7.     return cm/factorcm;
  8. }
  9.  
  10. // Convertion de pouce en cm.
  11. float incm(float in, const float factorin=2.14)
  12. {
  13.     return in*factorin;
  14. }
  15.  
  16. int main()
  17. {
  18.   float inCalcule, cmCalcule, x;
  19.   char ch;
  20.   while(1)
  21.   {
  22.     cout<<"Entrer une mesure :\n";
  23.     cin>>x>>ch;
  24.    
  25.     switch (ch)
  26.     {
  27.       case 'i':
  28.         cout<<x<<" pouces = "<<incm(x)<<" cm.\n";
  29.         break;
  30.    
  31.       case 'c':
  32.         cout<<x<<" cm = "<<cmin(x)<<" pouces.\n";
  33.         break;
  34.     }
  35.     char c;
  36.     cout << "Une autre conversion?\n";
  37.     cin >> c;
  38.     if(c != 'o' && c != 'O')
  39.       break;
  40.   }
  41.   system("pause" );
  42.   return 0;
  43. }


Message édité par Ace17 le 26-08-2004 à 23:14:41
Reply

Marsh Posté le 26-08-2004 à 23:03:43    

Ace17 a écrit :

Tu t'aventures mon gars! Ca s'appelle les parametres par défaut.


 
ca aurait pas ete plus simple de faire #define valeur 2.18, ou const float valeur 2.18, au lieu de le mettre la ?  ca me semble bizzare et pas tres logique en fait  ;)


---------------
.
Reply

Marsh Posté le 26-08-2004 à 23:13:16    

didier1809 a écrit :

ca aurait pas ete plus simple de faire #define valeur 2.18, ou const float valeur 2.18, au lieu de le mettre la ?  ca me semble bizzare et pas tres logique en fait  ;)


Bon, déja la syntaxe correcte pour déclarer une constante c'est

Code :
  1. const float valeur = 2.18;

ensuite, c'est pas du tout ca qu'il cherche a faire : il cherche juste a avoir des valeurs par défaut pour les arguments qu'il file a sa fonction. Ca permet de l'appeler en omettant certains parametres ( les derniers dans la pratique ). valeur n'existe pas en dehors de la fonction. Et si il fait incm(x, 2.54) miracle, non seulement ca compile, mais en plus, valeur vaut 2.54!


Message édité par Ace17 le 26-08-2004 à 23:14:56
Reply

Marsh Posté le 26-08-2004 à 23:14:07    

Reply

Marsh Posté le 26-08-2004 à 23:16:09    

ca sert a quoi de specifier const un parametre passé par valeur ? :D

Reply

Marsh Posté le 26-08-2004 à 23:18:56    

ca sert a quoi les constantes a la base?

Reply

Marsh Posté le 26-08-2004 à 23:18:56   

Reply

Marsh Posté le 26-08-2004 à 23:22:06    

non mais la  
float cmin(float cm, const float factorcm=2.14)
 
le const est inutile, tu travail sur une copie

Reply

Marsh Posté le 26-08-2004 à 23:27:21    

cris56 a écrit :

tu travailles sur une copie

Je sais!  :)  
Mais le const c'est pas uniquement pour éviter que des gens a l'extérieur ne modifient tes données. Si c'était le cas on pourrait tres bien remplacer tous les  
#define LIFE 100  
ou les  
const int LIFE = 100;
par des  
static int LIFE = 100;
voire carrément  
int LIFE = 100;

Reply

Marsh Posté le 26-08-2004 à 23:29:30    

comment des gens de l'exterieur pourraient modifier  cette valeur par defaut du parametre ?

Reply

Marsh Posté le 26-08-2004 à 23:34:48    

Tu ne m'as pas compris. Ce que je veux dire c'est que quand tu fais ca  

Code :
  1. void affiche_texte(const char* texte);

ca veut dire que si je fais ca

Code :
  1. affiche_texte(buffer)

il n'y a aucun risque que affiche_texte ne modifie buffer.  
 
Maintenant si je fais ca

Code :
  1. void affiche_entier(int entier);

il est encore plus clair que si je fais

Code :
  1. affiche_entier(n);

il n'y a aucune chance que n soit modifié, puisqu'il est passé par valeur, comme tu l'as justement fait remarquer. Ce que fait Alperx, ca revient a faire carrément

Code :
  1. void affiche_entier(const int n);

et c'est clair que ca ne me viendrait jamais a l'esprit.  
 
Mais si on regarde du point de vue de l'intérieur de la fonction ( donc pour nous, l'extérieur, qui veut illégalement modifier nos données ) n sera une constante. Oui, et alors? De toutes facons c'est rare qu'on modifie les parametres a l'intérieur de la fonction qui les recoit. Apres tout, on sait bien qu'on veut pas y toucher, mais c'est la meme chose pour les constantes globales.
 
Apres tout, je pourrais tres bien décider d'ignorer le mot clef "const" et la ou quelqu'un ferait un define ou un const int, moi je créerais juste une variable de type int que j'initialiserais a la bonne valeur. Je prendrais juste le risque que cette variable soit modifiée par quelqu'un qui ne serait censé que la lire.


Message édité par Ace17 le 26-08-2004 à 23:40:17
Reply

Marsh Posté le 26-08-2004 à 23:52:35    

ca vient quand la suite ?

Reply

Marsh Posté le 27-08-2004 à 08:06:25    

Ca ne t'arrive jamais de faire :

Code :
  1. void ma_fonction(/* parametres... */)
  2. {
  3.    cont int valeur = 891;
  4.    // code
  5. }

alors que tu pourrais bien décider de te passer du const et prendre le risque?
 
edit : bon je vais faire plus simple. La seule utilité du const dans son cas c'est d'éviter qu'un mongol fasse valeur = 1.5; dans le corps de la fonction.


Message édité par Ace17 le 27-08-2004 à 08:13:40
Reply

Marsh Posté le 27-08-2004 à 08:15:17    

cris56 a écrit :

ca sert a quoi de specifier const un parametre passé par valeur ? :D

à se surveiller. ou imagine que tu appelles une autre fonction qui fait un passage par référence,, si ça modifie ton paramètre, ça risque de te faire un bug bien planqué avec le temps

Reply

Marsh Posté le 27-08-2004 à 08:17:03    

Toute cette théorie est bien jolie, mais c'est ridicule de définir le facteur de proportionalité comme paramètre de la fonction. Si la fonction doit convertir des pouces en cm ou vice versa, le facteur sera toujours 2.54, et c'est pas demain la veille que ça changera. Appeler cmin(1,3.14159) n'a, dans le contexte du programme, aucun sens, donc pourquoi ne pas utiliser #define facteur 2.54 et n'utiliser qu'un seul paramètre dans la fonction?

Reply

Marsh Posté le 27-08-2004 à 08:30:31    

pas de#define :o

Reply

Marsh Posté le 27-08-2004 à 09:17:33    

glaurung a écrit :

Toute cette théorie est bien jolie, mais c'est ridicule de définir le facteur de proportionalité comme paramètre de la fonction. Si la fonction doit convertir des pouces en cm ou vice versa, le facteur sera toujours 2.54, et c'est pas demain la veille que ça changera. Appeler cmin(1,3.14159) n'a, dans le contexte du programme, aucun sens

Tout comme on pourrait qualifier de ridicule le fait d'utiliser une fonction dont le seul role est de faire une multiplication! Mais Alperx est pas en train de bosser sur un projet de convertisseur d'unités, il est en train d'apprendre le langage!

Reply

Marsh Posté le 27-08-2004 à 09:24:13    

Ace17 a écrit :

Bon, déja la syntaxe correcte pour déclarer une constante c'est

Code :
  1. const float valeur = 2.18;

ensuite, c'est pas du tout ca qu'il cherche a faire : il cherche juste a avoir des valeurs par défaut pour les arguments qu'il file a sa fonction. Ca permet de l'appeler en omettant certains parametres ( les derniers dans la pratique ). valeur n'existe pas en dehors de la fonction. Et si il fait incm(x, 2.54) miracle, non seulement ca compile, mais en plus, valeur vaut 2.54!


 
:jap:
 
pour la syntaxe exacte, j'ai tapé ca vite fait, c'etait pour l'exemple ;)
 
et c'est vrai que je le savait en plus, mais ca fait trop longtemps que j'ai pas fait de C, donc ca m'etait sortit de la tete  :o  
 
n'empeche que je ne trouve pas ca joli  :o  ;)


---------------
.
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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