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

  FORUM HardWare.fr
  Programmation
  C++

  Faire un boucle pour recommencer un application quand ceci fini.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Faire un boucle pour recommencer un application quand ceci fini.

n°832477
Alperx
Posté le 26-08-2004 à 08:44:34  profilanswer
 

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
mood
Publicité
Posté le 26-08-2004 à 08:44:34  profilanswer
 

n°832500
didier1809
${citation_perso}
Posté le 26-08-2004 à 09:18:08  profilanswer
 

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

---------------
.
n°832991
glaurung
Posté le 26-08-2004 à 16:15:51  profilanswer
 

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

n°833172
Ace17
Posté le 26-08-2004 à 19:08:10  profilanswer
 

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.

n°833185
Ace17
Posté le 26-08-2004 à 19:13:43  profilanswer
 

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
n°833367
didier1809
${citation_perso}
Posté le 26-08-2004 à 23:03:43  profilanswer
 

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


---------------
.
n°833397
Ace17
Posté le 26-08-2004 à 23:13:16  profilanswer
 

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
n°833399
Ace17
Posté le 26-08-2004 à 23:14:07  profilanswer
 
n°833406
cris56
Posté le 26-08-2004 à 23:16:09  profilanswer
 

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

n°833413
Ace17
Posté le 26-08-2004 à 23:18:56  profilanswer
 

ca sert a quoi les constantes a la base?

mood
Publicité
Posté le 26-08-2004 à 23:18:56  profilanswer
 

n°833419
cris56
Posté le 26-08-2004 à 23:22:06  profilanswer
 

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

n°833424
Ace17
Posté le 26-08-2004 à 23:27:21  profilanswer
 

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;

n°833426
cris56
Posté le 26-08-2004 à 23:29:30  profilanswer
 

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

n°833430
Ace17
Posté le 26-08-2004 à 23:34:48  profilanswer
 

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
n°833454
cris56
Posté le 26-08-2004 à 23:52:35  profilanswer
 

ca vient quand la suite ?

n°833675
Ace17
Posté le 27-08-2004 à 08:06:25  profilanswer
 

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
n°833678
Taz
bisounours-codeur
Posté le 27-08-2004 à 08:15:17  profilanswer
 

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

n°833680
glaurung
Posté le 27-08-2004 à 08:17:03  profilanswer
 

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?

n°833681
Taz
bisounours-codeur
Posté le 27-08-2004 à 08:30:31  profilanswer
 

pas de#define :o

n°833714
Ace17
Posté le 27-08-2004 à 09:17:33  profilanswer
 

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!

n°833721
didier1809
${citation_perso}
Posté le 27-08-2004 à 09:24:13  profilanswer
 

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


---------------
.
mood
Publicité
Posté le   profilanswer
 


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

  Faire un boucle pour recommencer un application quand ceci fini.

 

Sujets relatifs
Plantage appli perl/tk lors d'une boucle ?Internationalisation d'une application PLSQL
construction d'un boucleProblème avec un boucle For Each et une fonction recursive
C++ ou C# pour une application de gestionde fichierProblème lié à la création de MDE sur une application ACCESS
application d'acquésition vidéo d'une carte PC2-Visionboucle avec attributs
Formulaire HTML et application Java[Perl] est-il possible d'exécuter une application Perl sur un hébergeu
Plus de sujets relatifs à : Faire un boucle pour recommencer un application quand ceci fini.


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