Convertisseur en langage C

Convertisseur en langage C - C - Programmation

Marsh Posté le 25-01-2009 à 15:05:26    

Bonjour à tous, j'ai besoin d'aide, mon programme ne veux pas affichier le résultat demander !!
Il s'agit du convertisseur euros/francs --> et je ne comprends pas à la fin du programme est affiché "Votre valeur en francs est Id" au lieu de la valeur à calculer ! Pourtant tout SEMBLE bon !  
Voici mon code; où est l'erreur ???
Thanks for answers
 
 
#include <stdio.h>
#include <stdlib.h>
 
double convertir(double euro)
{
   
double franc = 6.55957 * euro;
return franc;
 
}
 
int main(int argc, char *argv[])
{
double euro = 0;
printf("Valeur a convertir en euros ?" );
scanf("%If", &euro);
printf("\nVotre valeur en francs est %If", convertir(euro));  
     
     
  system("pause >nul" );  
  return 0;
}

Reply

Marsh Posté le 25-01-2009 à 15:05:26   

Reply

Marsh Posté le 25-01-2009 à 15:43:43    

Heu c'est lf  ( avec L minuscule) pas IF (avec i majuscule)


Message édité par esox_ch le 25-01-2009 à 15:44:14

---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 25-01-2009 à 15:55:16    

Ouiiii, ça fonctionne, j'ai mis If avec i majuscule, car dans d'autre programme où la valur de ma variable était un entier Id ( avec i majuscule ) fonctionnait !
 
Je viens d'essayer et pour récupérer une variable pour un entier,
on peut mettre ld ou Id ! Bizarre
 
Sinon merci beaucoup !!

Reply

Marsh Posté le 25-01-2009 à 16:18:27    

Si tu lisais la doc au lieu de faire du cut and paste, tu verrais qu'il n'y a rien de bizarre:  
 
http://www.cplusplus.com/reference [...] scanf.html
http://www.cplusplus.com/reference [...] rintf.html


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 25-01-2009 à 16:27:56    

J'ai pas fait de copier-coller, sinon je ne me serais pas trompé, je pose une question et tu me prends de haut comme ça, primo tu me tutoies pas, et secondo soit pas désagréble.  
J'aurais su, j'aurais posté sur un autre forum.

Reply

Marsh Posté le 25-01-2009 à 17:05:33    

Je te prend absolument pas de haut (ça serait le comble étant donné que je ne m'y connais pas des masses en C).
Pour le fait que je t'ai tutoyé, c'est pratique courante sur ce forum, tout le monde se tutoie, désolé si ça a heurté ta sensibilité.
 
C'est juste que sur ce forum, on essaie d'expliquer aux personnes d'où vient leur faute, et ton "bizarre" m'a un peu fait tilter. En tapant "scanf" et "printf" dans google, le 1er lien était le lien que je t'ai donné, donc je voyais pas vraiment le "bizarre".
 
Bref, si tu veux aller poster ailleurs, je ne te retiens pas, bonne suite :spamafote:


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 25-01-2009 à 20:43:58    

jojomisterjo a écrit :

J'ai pas fait de copier-coller, sinon je ne me serais pas trompé, je pose une question et tu me prends de haut comme ça, primo tu me tutoies pas, et secondo soit pas désagréble.  
J'aurais su, j'aurais posté sur un autre forum.


Merci de te calmer. Le tutoiement est de rigueur sur ce forum, et je ne vois pas à quel moment il a été désagréable. De plus :
- primo, on ne dit pas j'aurais su mais si j'avais su,
- secondo, le tutoiement est de rigueur sur tous les forums.

Reply

Marsh Posté le 25-01-2009 à 22:17:05    

Il va m'apprendre à écrire ( g pa fei 2 fote la ?)
zut, je vais être bani ! ... si J'AVAIS su !

Reply

Marsh Posté le 26-01-2009 à 01:16:52    

Ici, c'est le far west ou Blackboard Jungle (pour ceux qui connaissent le film). Quelques intervenants sont assez jeunes, d'autres plus âgés. Certains tutoient, d'autres vouvoient.
 
En tous cas, bon courage pour votre étude du langage C. N'hésitez pas malgré tout à revenir poser des questions ici sur ce bon vieux langage qui continue à être assez utilisé et apprécié des informaticiens.

Reply

Marsh Posté le 26-01-2009 à 09:00:33    

jojomisterjo a écrit :

Il va m'apprendre à écrire ( g pa fei 2 fote la ?)
zut, je vais être bani ! ... si J'AVAIS su !


Qui est le demandeur ici ? Pour autant que je sache, c'est toi. Vu le nombre de tes messages, je conclus que tu ne connais pas les intervenants de ce forum, ni la façon dont ils s'expriment ici. Certains sont pédagogues, d'autres le sont moins, mais une chose est certaine : la majorité des répondants d'ici le font depuis leur travail, et le qualité des réponses est assez haute.
Donc la moindre des choses quand on débarque sur un forum, est d'éviter le genre de ton que tu emploies (i.e. ce ton condescendant) quand on ne connait pas les gens. esox_ch est suffisamment compétent pour te dépanner, et, tout comme moi quand j'ai lu ton post, il a tiqué sur le mot "bizarre", car en prog, il n'y a rien de bizarre sinon la manière de penser de l'interface chaise-clavier


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 26-01-2009 à 09:00:33   

Reply

Marsh Posté le 26-01-2009 à 13:17:09    

Tu voulais que j'emploie quel mot ? Il avait parfaitement compris le sens de mon message, je change le l en I et ça marche quand même, telle était ma question...
... Et on me répond "arrête ton cut and paste"
aie

Reply

Marsh Posté le 26-01-2009 à 13:29:23    

Salut,
 
C'est pas une question de "ça marche quand même". ça ne fait pas la même chose vu que i = integer , l = long, donc tu ne récupères pas une variable de même type quand tu fais ça avec scanf.
 
Bref il n'y a pas besoin de se prendre la tête sur 20 posts : Ton problème a été résolu, je t'ai donné 2 liens pour que tu vois qu'il n'y a rien de bizarre en ce fonctionnement .. Je pense que c'est bon non?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 26-01-2009 à 14:07:51    

merci

Reply

Marsh Posté le 26-01-2009 à 18:42:07    

Il y a une chose (non que je la trouve bizarre ^^) mais que je ne comprends pas ! Une fois ma fonction "réalisée" la variable franc prend une nouvelle valeur (après calcul), puis à la toute dernière ligne de printf je veux qu'il me réaffiche la valeur calculée mais cette fois j'ai mis en lecture ,franc au lieu de ",convertir(euro)"
Mais LE PROBLEME c'est que le programme FONCTIONNE, la dernière valeur s'affiche, mais ----> la valeur de la variable franc ne devrait-elle pas être effacée <---- après ma fonction ???" car je n'est pas mis static au début lorsque j'ai annoncé ma variable franc.
 
J'ai essayé d'être clair, cela me tracasse, j'essaye de bien comprendre les fonctions ! Merci
 
Voici le code :
 
 
 
#include <stdio.h>
#include <stdlib.h>
 
 
double franc = 0; // pourquoi ne pas mettre static double franc = 0;
double convertir(double euro)
{
 
franc = 6.55957 * euro;
return franc;
}
 
 
 
 
int main(int argc, char *argv[])
{
 
while (1)
 
  {
    double euro = 0;
    printf("Valeur a convertir en euros ?" );
    scanf("%lf", &euro);
    printf("\nVotre valeur en francs est %lf\n\n\n", convertir(euro));  
    printf("%lf euros", franc);  
  }
}

Reply

Marsh Posté le 26-01-2009 à 18:45:36    

non, c'est normal, "franc" appartient au "scope" de la fonction convertir et "disparait" après son appel.

Reply

Marsh Posté le 26-01-2009 à 18:56:40    

jojomisterjo > Non parce que tu déclares franc en dehors du scope de la fonction convertir, il s'agit d'une d'une variable qui existe en dehors de cette dernière
 
luc@s > Justement pas


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 26-01-2009 à 18:57:56    

ah oui désolé, je parlais de son premier code ;)

Reply

Marsh Posté le 26-01-2009 à 19:00:44    

D'accord, et si je veux mettre la variable franc à l'intérieur de la fonction, et donc la retenir après, je fais comment ?

Reply

Marsh Posté le 26-01-2009 à 19:08:32    

Et une autre question ! une fonction de type void ! J'ai l'impression ( je dis bien l'impression ) que ça ne sert à rien !
En effet, cela ne renvoie aucune valeur !
Dans quel cas les utilise-t-on ?  
Meri de prendre 1 minute pour réponder

Reply

Marsh Posté le 26-01-2009 à 19:20:17    

jojomisterjo a écrit :

Il y a une chose (non que je la trouve bizarre ^^) mais que je ne comprends pas ! Une fois ma fonction "réalisée" la variable franc prend une nouvelle valeur (après calcul), puis à la toute dernière ligne de printf je veux qu'il me réaffiche la valeur calculée mais cette fois j'ai mis en lecture ,franc au lieu de ",convertir(euro)"
Mais LE PROBLEME c'est que le programme FONCTIONNE, la dernière valeur s'affiche, mais ----> la valeur de la variable franc ne devrait-elle pas être effacée <---- après ma fonction ???" car je n'est pas mis static au début lorsque j'ai annoncé ma variable franc.
 
J'ai essayé d'être clair, cela me tracasse, j'essaye de bien comprendre les fonctions ! Merci
 
Voici le code :
 
 
 
#include <stdio.h>
#include <stdlib.h>
 
 
double franc = 0; // pourquoi ne pas mettre static double franc = 0;
double convertir(double euro)
{
 
franc = 6.55957 * euro;
return franc;
}
 
 
 
 
int main(int argc, char *argv[])
{
 
while (1)
 
  {
    double euro = 0;
    printf("Valeur a convertir en euros ?" );
    scanf("%lf", &euro);
    printf("\nVotre valeur en francs est %lf\n\n\n", convertir(euro));  
    printf("%lf euros", franc);  
  }
}


 
franc est défini en dehors de tout bloc, donc c'est une variable à portée globale.  Tu peux y accéder dans d'autres fichiers, à condition de l'y déclarer.
 
Si tu l'avais défini static, elle n'aurait été accessible que dans le fichier.
 
Si tu déplace la définition de 2 lignes vers le bas, tu as une variable à portée de fonction.  Il y a une nouvelle variable pour chaque appel de fonction (on dit que c'est une variable automatique; il y a un mot clé auto qui fait parallèle à static pour ça, mais il est redondant et il vaut mieux ne pas l'utiliser).
 
Si dans la fonction tu définis ta variable static, elle a toujours la fonction comme portée, mais elle est partagée entre tout les appels (elle conserve sa valeur d'un appel à l'autre).
 
Si tu ne sais pas quoi choisir, voici un ordre de préférence:
- les variables automatiques  
- variable statique de fonction,
- variable statique de fichier,
- variable globale.
 
 
 
Non, la portée de franc est globale.

Reply

Marsh Posté le 26-01-2009 à 19:22:51    

jojomisterjo a écrit :

D'accord, et si je veux mettre la variable franc à l'intérieur de la fonction, et donc la retenir après, je fais comment ?


 
Je ne comprends pas bien ce que tu veux.  Si tu mets sa définition dans la fonction, tu ne peux pas t'en servir à l'extérieur.
 

jojomisterjo a écrit :

Et une autre question ! une fonction de type void ! J'ai l'impression ( je dis bien l'impression ) que ça ne sert à rien !


 
Les effets de bords.  Comme l'affichage, la modification de variables globales ou statiques de fichiers, la modification des paramètres (quand ceux-ci sont des pointeurs).

Reply

Marsh Posté le 26-01-2009 à 19:26:12    

jojomisterjo a écrit :

Et une autre question ! une fonction de type void ! J'ai l'impression ( je dis bien l'impression ) que ça ne sert à rien !
En effet, cela ne renvoie aucune valeur !
Dans quel cas les utilise-t-on ?
Meri de prendre 1 minute pour réponder

 

Bon on va voir si j'ai appris ma leçon :

 

Je vous prie de bien vouloir vous référer à votre livre de C de référence. De lire avec minutie particulière le chapitre sur la portée de variables et sur les pointeurs. Une fois que ces concepts vous seront clairs vous comprendrez par vous même.
Je vous dit ça de mon ton le plus humble, veuillez m'excuser si un de mes mot vous parait désagréable. Mais je vous assure que c'est la meilleur manière d'apprendre à programmer, il faut lire, relire, relire et relire la doc pour bien comprendre ce qu'elle implique


Message édité par esox_ch le 26-01-2009 à 19:26:35

---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 26-01-2009 à 19:36:14    

Merci pour les posts, oui j'ai lu plein de docs sur les void.

Reply

Marsh Posté le 26-01-2009 à 20:04:41    

Il te reste donc à les digérer.

Reply

Marsh Posté le 26-01-2009 à 21:24:47    

Sinon, j'ai fait un petit programme permettant de calculer le taux d'alcoolémie (et oui faut bien trouver quelque chose)
Qu'en pensez-vous ?
 
Voici le code source (j'en ai fait un bloc) :
 
#include <stdio.h>
#include <stdlib.h>
 
 
   double calculhomme(kg, volume, degre)
{
   double resultat = (volume*degre*8)/(kg*0.7*100);  
   return resultat;  
}
 
   double calculfemme(kg, volume, degre)
{  double resultat = (volume*degre*8)/(kg*0.6*100);
   return resultat;
}      
 
 
 
   int main(int argc, char *argv[])
   
{
 
   long numero = 0;
 
   printf("                 CALCUL DU TAUX D'ALCOOLEMIE\n" );
   printf("                       realise par FF\n\n\n\n\n" );
   printf("Etes-vous un homme ou femme ?\n\n" );
   printf("Tapez 1 si vous etes un homme.\n" );
   printf("Tapez 2 si vous etes une femme.\n" );
   scanf("%ld", &numero);
 
   if (numero == 1)
   {
   long kg = 0, volume =0, degre = 0;  
             
   printf("\nQuel est votre poids en kg ?\n" );
   scanf("%ld", &kg);
   printf("Quel est le volume d'alcool consomme en cl ?\n" );
   scanf("%ld", &volume);
   printf("Quel est le degre de l'alcool consomme ?\n" );
   scanf("%ld", &degre);
   printf("\nVotre taux d'alcoolemie est de %lf g/L.", calculhomme(kg, volume, degre));
   
   if (calculhomme(kg, volume, degre) <= 0.5) printf("\nVous etes apte a conduire." );                    
   else printf("\nVous n'etes pas apte a conduire." );
   }
               
   else if (numero == 2)
   {
   long kg = 0, volume =0, degre = 0;      
         
   printf("\nQuel est votre poids en kg ?\n" );
   scanf("%ld", &kg);
   printf("Quel est le volume d'alcool consomme en cl ?\n" );
   scanf("%ld", &volume);
   printf("Quel est le degre de l'alcool consomme ?\n" );
   scanf("%ld", &degre);
   printf("Votre taux d'alcoolemie est de %lf g/L.", calculfemme(kg, volume, degre));  
     
   if (calculfemme(kg, volume, degre) <= 0.5) printf("\nVous etes apte a conduire." );                    
   else printf("\nVous n'etes pas apte a conduire." );                
   }
   
   else printf("Vous n'avez pas entre une valeur correcte !" );
   
     
   system("pause >nul" );  
   
}
 

Reply

Marsh Posté le 27-01-2009 à 09:05:45    

tu dupliques beaucoup trop de code

Reply

Marsh Posté le 27-01-2009 à 17:42:27    

c'est à dire ?

Reply

Marsh Posté le 27-01-2009 à 17:43:32    

Effectivement je mets deux fois ceci :
long kg = 0, volume =0, degre = 0;        
         
   printf("\nQuel est votre poids en kg ?\n" );  
   scanf("%ld", &kg);  
   printf("Quel est le volume d'alcool consomme en cl ?\n" );  
   scanf("%ld", &volume);  
   printf("Quel est le degre de l'alcool consomme ?\n" );  
   scanf("%ld", &degre);  
   printf("Votre taux d'alcoolemie est de %lf g/L.", calculfemme(kg, volume, degre));  
       
   if (calculfemme(kg, volume, degre) <= 0.5) printf("\nVous etes apte a conduire." );                      
   else printf("\nVous n'etes pas apte a conduire." );                
 
Mais comment puis-je faire plus court ?

Reply

Marsh Posté le 27-01-2009 à 17:53:53    

jojomisterjo a écrit :


Mais comment puis-je faire plus court ?


Un exemple.
 
Ton code

Code :
  1. double calculhomme(kg, volume, degre)
  2. {
  3.   double resultat = (volume*degre*8)/(kg*0.7*100);  
  4.   return resultat;  
  5. }
  6.  
  7.   double calculfemme(kg, volume, degre)
  8. {  double resultat = (volume*degre*8)/(kg*0.6*100);
  9.   return resultat;
  10. }


 
pourrait être factorisé en (ce n'est qu'un exemple)

Code :
  1. double calcul (kg, volume, degre, sexe) // note le paramètre "sexe"
  2. {
  3.   double val = 0.0;
  4.   if (sexe == 0) // 0 = homme par exemple
  5.      val = 0.6;
  6.   if (sexe == 1) // 1 pour femme
  7.      val = 0.7;
  8.  
  9.   return ((volume*degre*8)/(kg*val*100));
  10. }


 
on pourrait même le faire en une seule ligne :

Code :
  1. return (sexe == 0 ? (volume*degre*8)/(kg*0.6*100) : (volume*degre*8)/(kg*0.7*100));


mais bon, c'est relativement illisible, la 1ere forme est à préférer


Message édité par Harkonnen le 27-01-2009 à 17:58:38

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 27-01-2009 à 18:10:11    

Ah oui c'est mieux, et la variable val, je dois donc la déclaré aussi dans ma fonction main ?

Reply

Marsh Posté le 27-01-2009 à 18:11:02    

ben non, elle est déjà déclarée dans la fonction calcul() :o
(ligne 3)


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 27-01-2009 à 18:12:49    

NON ! J'ai dis n'importe quoi
Il faut que je déclare sexe c'est tout

Reply

Marsh Posté le 27-01-2009 à 18:13:15    

oui voilà, oui c'est cool de faire ça, merci

Reply

Marsh Posté le 27-01-2009 à 18:20:24    

Un Programmeur a écrit :


 
Non, la portée de franc est globale.


Citation :

ah oui désolé, je parlais de son premier code ;)


Reply

Marsh Posté le 27-01-2009 à 18:27:54    

* il y a des balises pour le code
* definitions de fonction sans prototype.  Ca fait 10 ans que je n'ai plus vu ca.  Ca en fait 15 que quasiment plus personne n'ecrit directement comme ca.  (Meme gcc a abandonne le support des antiquites n'acceptant pas les prototypes).
* entree non blindee; en passant, tu connais fflush()?
* abus d'entiers pour des donnees qui ne sont pas necessairement entieres
* ca sert a quoi

Code :
  1. system("pause >nul" );

?

Reply

Marsh Posté le 27-01-2009 à 18:35:55    

c'est pour faire une pause, il faut appuyer sur une touche pour continuer, donc pour quitter la console,et le ">nul" c'est pour qu'il n'y est pas la phrase "Appuyez sur une touhe pour continuer"
 
Oui les prototypes je ne les ai pas définis car c'est un petit programme
 
Pour le long --> c'est vrai que j'aurais pu mettre int (mais à ce stade c'est âs dramatique)
 
Et les balises, c'est quoi ?

Reply

Marsh Posté le 27-01-2009 à 18:42:05    

jojomisterjo a écrit :

c'est pour faire une pause, il faut appuyer sur une touche pour continuer, donc pour quitter la console,et le ">nul" c'est pour qu'il n'y est pas la phrase "Appuyez sur une touhe pour continuer"


 
Je ne comprends toujours pas.  (Une particularite du couple systeme/EDI?)
 

Citation :

Oui les prototypes je ne les ai pas définis car c'est un petit programme


 
C'est une chose que de ne pas faire de declaration, c'est autre chose que de definir les fonctions a la K&R.

Code :
  1. double calculhomme(kg, volume, degre)


plutot que

Code :
  1. double calculhomme(int kg, int volume, int degre)


 

Citation :

Pour le long --> c'est vrai que j'aurais pu mettre int (mais à ce stade c'est âs dramatique)
 
Je faisais allusion au poid, volume, etc qui sont des entiers alors que je me serais attendu a des flottants.
 
(En passant, le choix des noms est aussi un peu etrange, kg par exemple est mal choisi).
 
[quotemsg]Et les balises, c'est quoi ?


 
cpp. Il y a une icone C/C++ qui les ajoute.

Reply

Marsh Posté le 27-01-2009 à 22:40:44    

Oui donc pour l'histoire de la pause, c'est car j'affiche la console, et si je ne la mets pas, la fenête apparait et disparait aussitôt
 
Vous dîtes ceci "Code :
 
double calculhomme(int kg, int volume, int degre)"
 
Mais, j'ai essayé de faire cela et mon debugger ( je bosse avec DEV ++ ) me dit que les variables ne sont pas définit et ce dès mon permier scanf ( scanf("%ld", &kg); )
 
Voilà, c'est un problème non ?

Reply

Marsh Posté le 27-01-2009 à 23:56:49    

Je te suggère de faire une pause dans ton code, d'acheter le K&R ("Le Langage C", de Kernighan & Ritchie), et de le potasser un peu.

Reply

Marsh Posté le 28-01-2009 à 08:45:23    

Dans quel but tu souhaites faire une pause dans ton programme ?
 
Si c'est pour afficher la valeur lors de tes tests sans que la fenêtre ne se ferme, je te conseille plutôt de mettre des points d'arrêts dans ton programme.
 
Et si tu exécutes ton programme en externe (à partir d'une console), ton "pause" ne servira à rien.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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