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

  FORUM HardWare.fr
  Programmation
  C

  [C] Un prog simple qui déconne

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Un prog simple qui déconne

n°1278487
Pcsnake
Posté le 06-01-2006 à 22:51:31  profilanswer
 

J'ai essayé de faire un programme en C mais celà déconne (vous en comprendrez vite le principe, il est enfantin):

Code :
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #define LONG43
  4. main () {
  5.      printf ("Caractéristiques des ecrans:" );
  6.      printf ("+------+------+-----+----------+---------+\n" );
  7.      printf ("|Pouces|  CM  | 4/3 | Longueur | Largeur |\n" );
  8.      printf ("+------+------+-----+----------+---------+\n" );
  9.      int pouce, x, y;
  10.      float cm, long1, long2, larg1, larg2;
  11.      for (pouce=10;pouce<=22;pouce++) {
  12.          long1=cm/(5/4);
  13.          larg1=long1*0.5625;
  14.          printf ("|%4d  |%5.1f |XXXXX|  %5.1f   |  %5.1f  |\n", pouce, cm=pouce*2.54, long1, larg1);
  15.          printf ("+------+------+-----+----------+---------+\n" );
  16.          }
  17.      for (pouce=24;pouce<=40;pouce=pouce+2) {
  18.          long1=cm/(5/4);
  19.          larg1=long1*0.5625;
  20.          printf ("|%4d  |%5.1f |XXXXX|  %5.1f   |  %5.1f  |\n", pouce, cm=pouce*2.54, long1, larg1);
  21.          printf ("+------+------+-----+----------+---------+\n" );
  22.          }
  23.      for (pouce=43;pouce<=70;pouce=pouce+3) {
  24.          long1=cm/(5/4);
  25.          larg1=long1*0.5625;
  26.          printf ("|%4d  |%5.1f |XXXXX|  %5.1f   |  %5.1f  |\n", pouce, cm=pouce*2.54, long1, larg1);
  27.          printf ("+------+------+-----+----------+---------+\n" );
  28.          }
  29.      getch ();
  30.      }


 
Et regardez ce que celà affiche à l'écran:
http://images5.theimagehosting.com/bazar.jpg
 
Que dois-je faire pour corriger ce problème a la 10° ligne sous les étiquettes du tableau?

mood
Publicité
Posté le 06-01-2006 à 22:51:31  profilanswer
 

n°1278528
gocho
Posté le 07-01-2006 à 00:05:18  profilanswer
 

Pcsnake a écrit :

J'ai essayé de faire un programme en C mais celà déconne (vous en comprendrez vite le principe, il est enfantin):

Code :
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #define LONG43
  4.      float cm, long1, long2, larg1, larg2;
  5.      for (pouce=10;pouce<=22;pouce++) {
  6.          long1=cm/(5/4);
  7.          larg1=long1*0.5625;
  8.          printf ("|%4d  |%5.1f |XXXXX|  %5.1f   |  %5.1f  |\n", pouce, cm=pouce*2.54, long1, larg1);
  9.          printf ("+------+------+-----+----------+---------+\n" );
  10.          }
  11.           }


 


 
bon je suis pas sur mais bon...tu declares tes variables -> ok
tu fais tes calculs -> ok? ben nan paske tu utilises cm que tu as pas initialisé!!
tu l'initialise que lors du printf donc premier resultat completement biizarre et la suite ca passe [:petrus75]
 
normalement si tu met ca ca devrait marcher (initialiser cm avant tes boucles et mettre juste cm dans ton printf.)
 

Code :
  1. float cm, long1, long2, larg1, larg2;
  2. cm=pouce*2.54;
  3.      for (pouce=10;pouce<=22;pouce++) {
  4.          long1=cm/(5/4);
  5.          larg1=long1*0.5625;
  6.          printf ("|%4d  |%5.1f |XXXXX|  %5.1f   |  %5.1f  |\n", pouce, cm, long1, larg1);
  7.          printf ("+------+------+-----+----------+---------+\n" );
  8.          }

n°1278571
Joel F
Real men use unique_ptr
Posté le 07-01-2006 à 09:03:30  profilanswer
 

gocho a écrit :


normalement si tu met ca ca devrait marcher (initialiser cm avant tes boucles et mettre juste cm dans ton printf.)


 
Je crois pas non ....
ca ca marche par contre :
 

Code :
  1. float cm, long1, long2, larg1, larg2;
  2.      for (pouce=10;pouce<=22;pouce++)
  3.      {
  4.          cm=pouce*2.54;
  5.          long1=cm/(5/4);
  6.          larg1=long1*0.5625;
  7.          printf ("|%4d  |%5.1f |XXXXX|  %5.1f   |  %5.1f  |\n", pouce, cm, long1, larg1);
  8.          printf ("+------+------+-----+----------+---------+\n" );
  9.          }


n°1278583
Elmoricq
Modérateur
Posté le 07-01-2006 à 09:56:35  profilanswer
 

gocho a écrit :

bon je suis pas sur mais bon...tu declares tes variables -> ok
tu fais tes calculs -> ok? ben nan paske tu utilises cm que tu as pas initialisé!!
tu l'initialise que lors du printf donc premier resultat completement biizarre et la suite ca passe [:petrus75]


 
Le raisonnement est bon, par contre tu utilises la variable "pouce" pour initialiser "cm"... et "pouce" n'est pas défini non plus à cet endroit du programme, donc tu retrouves le même problème :o
Il faut savoir qu'une variable non initialisée contient potentiellement n'importe quelle valeur, elle est non définie. La variable "pouce" peut donc virtuellement contenir 0.0, 3.14159, la réponse à LA question de l'univers, l'âge du capitaine, ou le nombre de mailles tricotées par ma grand-mère depuis 1942.
(je mets en fait en clair ce que dit Joel F par son code, juste mes yeux ont mis plus de 3min derrière leurs cernes pour voir la différence entre les deux codes [:dawa] )
 
 
Sinon petite remarque au passage : le prototype de main() est incorrect.
main() doit explicitement retourner un entier, la norme admet deux prototypes possibles :
   int main(void);
ou
   int main(int argc, char * const * argv);
 
Et donc, par conséquent, un "return" en fin de main() est requis. On retourne 0 en cas de succès, et toute autre valeur en cas d'échec ou de warning. En général on utilise les constantes EXIT_SUCCESS et EXIT_FAILURE, définies dans stdlib.h, pour que ce soit plus clair. :)

Message cité 1 fois
Message édité par Elmoricq le 07-01-2006 à 10:03:08
n°1278606
Pcsnake
Posté le 07-01-2006 à 11:54:00  profilanswer
 

J'ai modifié mon programme et maintenant ça marche:
Parce que de la manière de Joel F la variable cm n'était pas encore déclarée (en tout cas sa valeur) lors de la déclaration de larg1.
 

Code :
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #define LONG43
  4. main () {
  5.      printf ("Caractéristiques des ecrans:\n" );
  6.      printf ("+------+------+-----+----------+---------+\n" );
  7.      printf ("|Pouces|  CM  | 4/3 | Longueur | Largeur |\n" );
  8.      printf ("+------+------+-----+----------+---------+\n" );
  9.      int pouce, x, y;
  10.      float cm, long1, long2, larg1, larg2;
  11.      for (pouce=10;pouce<=22;pouce++) {
  12.          printf ("|%4d  |%5.1f |XXXXX", pouce, cm=pouce*2.54);
  13.          long1=cm/(5/4);
  14.          larg1=long1*0.5625;
  15.          printf ("|  %5.1f   |  %5.1f  |\n", long1, larg1);
  16.          printf ("+------+------+-----+----------+---------+\n" );
  17.          }
  18.      for (pouce=24;pouce<=40;pouce=pouce+2) {
  19.          printf ("|%4d  |%5.1f |XXXXX", pouce, cm=pouce*2.54);
  20.          long1=cm/(5/4);
  21.          larg1=long1*0.5625;
  22.          printf ("|  %5.1f   |  %5.1f  |\n", long1, larg1);
  23.          printf ("+------+------+-----+----------+---------+\n" );
  24.          }
  25.      for (pouce=43;pouce<=70;pouce=pouce+3) {
  26.          printf ("|%4d  |%5.1f |XXXXX", pouce, cm=pouce*2.54);
  27.          long1=cm/(5/4);
  28.          larg1=long1*0.5625;
  29.          printf ("|  %5.1f   |  %5.1f  |\n", long1, larg1);
  30.          printf ("+------+------+-----+----------+---------+\n" );
  31.          }
  32.      getch ();
  33.      }

Message cité 2 fois
Message édité par Pcsnake le 07-01-2006 à 11:55:56
n°1278611
Elmoricq
Modérateur
Posté le 07-01-2006 à 12:00:44  profilanswer
 

Pcsnake a écrit :

J'ai modifié mon programme et maintenant ça marche:
Parce que de la manière de Joel F la variable cm n'était pas encore déclarée (en tout cas sa valeur) lors de la déclaration de larg1.


 
larg1 n'a rien à voir avec la définition de cm.
Le code de Joel F est correct.
 
Et je t'ai dis que ton prototype de main() était faux, tout comme l'absence de return en fin de code :


test.c:4: warning: return-type defaults to `int'
test.c: In function `main':
test.c:6: warning: unused variable `larg2'
test.c:6: warning: unused variable `long2'
test.c:5: warning: unused variable `y'
test.c:5: warning: unused variable `x'
test.c:33: warning: control reaches end of non-void function


 

n°1278677
Emmanuel D​elahaye
C is a sharp tool
Posté le 07-01-2006 à 13:33:05  profilanswer
 

Pcsnake a écrit :

J'ai modifié mon programme et maintenant ça marche:


Lourdingue... 'double' est le type 'naturel (et précis) des flottants. Il faut apprendre à factoriser le code...

Code :
  1. #include <stdio.h>
  2.  
  3. static void print_screen (int from, int to, int step)
  4. {
  5.   int pouce;
  6.  
  7.   for (pouce = from; pouce <= to; pouce += step)
  8.   {
  9.      double cm = pouce * 2.54;
  10.      printf ("|%4d  |%5.1f |XXXXX", pouce, cm);
  11.      {
  12.         double long1 = cm / (5 / 4);
  13.         double larg1 = long1 * 0.5625;
  14.         printf ("|  %5.1f   |  %5.1f  |\n", long1, larg1);
  15.      }
  16.      printf ("+------+------+-----+----------+---------+\n" );
  17.   }
  18. }
  19.  
  20. int main (void)
  21. {
  22.   printf ("Caracteristiques des ecrans:\n" );
  23.   printf ("+------+------+-----+----------+---------+\n" );
  24.   printf ("|Pouces|  CM  | 4/3 | Longueur | Largeur |\n" );
  25.   printf ("+------+------+-----+----------+---------+\n" );
  26.  
  27.   print_screen (10, 22, 1);
  28.   print_screen (24, 40, 2);
  29.   print_screen (43, 70, 3);
  30.  
  31.   return 0;
  32. }


Message édité par Emmanuel Delahaye le 07-01-2006 à 13:33:49

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1278934
gocho
Posté le 08-01-2006 à 01:40:44  profilanswer
 

Joel F a écrit :

Je crois pas non ....
ca ca marche par contre :
 


 

Elmoricq a écrit :

Le raisonnement est bon, par contre tu utilises la variable "pouce" pour initialiser "cm"... et "pouce" n'est pas défini non plus à cet endroit du programme, donc tu retrouves le même problème :o[...]
juste mes yeux ont mis plus de 3min derrière leurs cernes pour voir la différence entre les deux codes [:dawa] )  
 


 
 
'tin le con que j'suis pas!!! [:kiki]  
J'avais carrement pas fait attention  a l'autre variable  [:sygus]  
Enfin mes cernes sont pas mal non plus et j'viens de galerer quelques temps a trouver ce que signifiait le from dans le code d'Emmanuel  [:benou]  
Je vois ca mais je pense pas a regarder la boucle donc forcement je comprends pas....
'fin bref l'idee c'etait qu'il fallait initialiser avant quoi [:dawao]
 
sur ce bonne nuit, j'en ai besoin [:fatigue]


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

  [C] Un prog simple qui déconne

 

Sujets relatifs
Problème tout simple - Accès à un conteneurcomment avoir un menu tout simple en css ou autre chose
"while" avec une equation simple"[Batch] Interface simple
Question simple sur les DOUBLONS...calculer temps d'exécution d'un prog
prog fonctionnelle (fct d'ordre sup, ocaml)librairie graphique pour logiciel de CAO simple ?
[C et Linux]: Prog port serieutiliser mount() dans un prog execute par lambda
Plus de sujets relatifs à : [C] Un prog simple qui déconne


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