Se connecter / S'enregistrer
Votre question

[c] probleme de pointeur

Tags :
  • Compile
  • Programmation
Dernière réponse : dans Programmation
31 Janvier 2010 00:06:47

Bonjour à tous,

J'ai crée une fonction en dehors de mon main et au final je me suis rendu compte que j'avais besoin d'en retourner 2 paramètres ... La merde pour moi qui ne suit pas un expert.

En fouillant j'ai appris l'existence des pointeurs^^

J'ai alors voulu créer un variable globale c, que j'utilise dans ma fonctions Panneaux et dont je veux retourner la valeur dans mon main en lisant son adresse et donc sa valeur.

j'ai donc créer dans mon main un pointeur int *pc que je définis tel que *pc=&c.
Mon compilateur me met un warning quand je compile et la valeur que je récupère (si j'en récupère une) n'est pas du tout la bonne !!!
Warning :"warning: assignment makes integer from pointer without a cast|"

Quelqu'un pour m'aiguiller ????

  1. int c;
  2.  
  3. int Panneaux(int g)
  4. {
  5. int a,b,pose,s,m,n,o,r;
  6. float d,e,f,h,i;
  7. double j,k,l,p,q;
  8.  
  9. videBuffer();
  10. printf("\nQuel est la longeur de la toiture ?\n");
  11. scanf("%f",&f);
  12. h=g*f;
  13. printf("\nLa surface de la toiture est de %lg m2\n",h);
  14.  
  15. videBuffer();
  16. printf("\n\nQuel type de panneau souhaitez vous utiliser : 1:Roto 2:Biosol 3:EGM \n\n");
  17. scanf("%d",&s);
  18.  
  19. while((s!=1) && (s!=2) && (s!=3))
  20. {
  21. printf("\nJe n ai pas compris votre saisie !\n");
  22. videBuffer();
  23. printf("\nQuel type de panneau souhaitez vous utiliser : 1:Roto 2:Biosol 3:EGM \n\n");
  24. scanf("%d",&s);
  25. }
  26.  
  27. if(s==1)
  28. {
  29. b=f/1.047;
  30. a=g/2.028;
  31. k=0.32+0.4+(a*2.028)+(0.08*(a-1));
  32. l=(b*1.047)+0.6;
  33.  
  34. if(g<k)
  35. {
  36. a=a-1;
  37. k=0.32+0.4+(a*2.028)+(0.08*(a-1));
  38. }
  39.  
  40. if(f<l)
  41. {
  42. b=b-1;
  43. l=(b*1.047)+0.6;
  44. }
  45.  
  46. c=b*b;
  47. j=0.27*c;
  48. }
  49.  
  50. else if(s==2)
  51. {
  52. b=((f-1.682)/1.663)+1;
  53. a=((g-0.864)/0.833)+1;
  54. k=0.47+((a-1)*0.833)+0.864;
  55. l=((b-1)*1.663)+1.682+0.3;
  56.  
  57. if(g<k)
  58. {
  59. a=a-1;
  60. k=0.47+((a-1)*0.833)+0.864;
  61. }
  62.  
  63. if(f<l)
  64. {
  65. b=b-1;
  66. l=((b-1)*1.663)+1.682+0.3;
  67. }
  68.  
  69. c=b*a;
  70. j=0.18*c;
  71. }
  72.  
  73. else if(s==3)
  74. {
  75. videBuffer();
  76. printf("EGM 180W ou EGM 210W ? 1 : EGM 180W 2 : EGM 210W\n\n");
  77. scanf("%d",&m);
  78.  
  79. while((m!=1)&&(m!=2))
  80. {
  81. printf("Je n ai pas compris votre saisie !\n");
  82. videBuffer();
  83. printf("EGM 180W ou EGM 210W ? 1 : EGM 180W 2 : EGM 210W\n\n");
  84. scanf("%d", &m);
  85. }
  86.  
  87. if(m==1)
  88. {
  89. b=f/1.58;
  90. n=f/0.808;
  91. a=g/0.808;
  92. o=g/1.58;
  93. q=(o*1.58)+((o-1)*0.02);
  94. p=(n*0.808)+((n-1)*0.02);
  95. k=(a*0.808)+((a-1)*0.02);
  96. l=(b*1.58)+((b-1)*0.02);
  97.  
  98. if(g<q)
  99. {
  100. o=o-1;
  101. }
  102.  
  103. if(g<k)
  104. {
  105. a=a-1;
  106. }
  107.  
  108. if(f<p)
  109. {
  110. n=n-1;
  111. }
  112.  
  113. if(f<l)
  114. {
  115. b=b-1;
  116. }
  117.  
  118. c=b*a;
  119. r=n*o;
  120. videBuffer();
  121. printf("\nUne pose en portrait donne %d panneaux, %d sur le rampant et %d sur la longueur\n\nUne pose en paysage donne %d panneaux, %d sur le rampant et %d sur la longueur \n\nSouaitez vous faire l etude pour une pose en portrait ou en paysage ? \n1:portrait 2:paysage \n\n",r,n,o,c,b,a);
  122. scanf("%d",&pose);
  123.  
  124. while((pose!=1) && (pose!=2))
  125. {
  126. printf("\nJe n ai pas compris votre saisie !\n");
  127. videBuffer();
  128. printf("\nSouaitez vous faire l etude pour une pose en portrait ou en paysage ? \n1:portrait 2:paysage\n\n");
  129. scanf("%d",&pose);
  130. }
  131.  
  132. if(pose==1)
  133. {
  134. j=r*0.18;
  135. a=o;
  136. b=n;
  137. c=r;
  138. k=q;
  139. l=p;
  140. }
  141.  
  142. else
  143. {
  144. j=c*0.18;
  145. }
  146. }
  147.  
  148. if(m==2)
  149. {
  150. b=f/1.69;
  151. n=f/0.99;
  152. a=g/0.99;
  153. o=g/1.69;
  154. q=(o*1.69)+((o-1)*0.02);
  155. p=(n*0.99)+((n-1)*0.02);
  156. k=(a*0.99)+((a-1)*0.02);
  157. l=(b*1.69)+((b-1)*0.02);
  158.  
  159. if(g<q)
  160. {
  161. o=o-1;
  162. }
  163.  
  164. if(g<k)
  165. {
  166. a=a-1;
  167. }
  168.  
  169. if(f<p)
  170. {
  171. n=n-1;
  172. }
  173.  
  174. if(f<l)
  175. {
  176. b=b-1;
  177. }
  178.  
  179. c=b*a;
  180. r=n*o;
  181. videBuffer();
  182. printf("Une pose en portrait donne %d panneaux, %d sur le rampant et %d sur la longueur\n Une pose en paysage donne %d panneaux au total, %d sur le rampant et %d sur la longueur \nSouaitez vous faire l etude pour une pose en portrait ou en paysage ? \n1:portrait 2:paysage \n",r,n,o,c,b,a);
  183. scanf("%d",&pose);
  184.  
  185. while((pose!=1) && (pose!=2))
  186. {
  187. printf("\nJe n ai pas compris votre saisie !\n");
  188. videBuffer();
  189. printf("\nSouaitez vous faire l etude pour une pose en portrait ou en paysage ? \n1:portrait 2:paysage\n");
  190. scanf("%d",&pose);
  191. }
  192.  
  193. if(pose==1)
  194. {
  195. j=r*0.21;
  196. a=o;
  197. b=n;
  198. c=r;
  199. k=q;
  200. l=p;
  201. }
  202.  
  203. else
  204. {
  205. j=c*0.18;
  206. }
  207. }
  208. }
  209.  
  210. printf("\n\n********************************************************************************\n");
  211. printf("\n__________________________________*Recapitulatif*_______________________________\n");
  212. printf("\n\nVous pouvez mettre %d panneaux : %d sur la longeur et %d sur le rampant\n",c,b,a);
  213. d=(g-k)/2;
  214. printf("\nLa distance utilise sur le rampant sera de %lg, l ecart entre \nl installation et la toiture sera de %lg m de chaque cote\n",k,d);
  215. e=(f-l)/2;
  216. printf("\nLa distance utilise sur la longueur sera de %lg, l ecart entre \nl installation et la toiture sera de %lg m en haut et en bas\n",l,e);
  217. printf("\nLa puissance totale de l installation est de %lg kW \n",j);
  218. h=g*f;
  219. printf("\nLa surface de la toiture est de %lg m2\n",h);
  220. i=l*k;
  221. printf("\nLa surface totale de l installation est de %lg m2 \n",i);
  222. printf("\n********************************************************************************\n");
  223.  
  224. return s;
  225. }
  226.  
  227. int main (void)
  228. {
  229. int ond,restart=1,pan,tot;
  230. int *pc;
  231. float rampant=0;
  232.  
  233. *pc=&c;
  234.  
  235. while(restart==1)
  236. {
  237. videBuffer();
  238. rampant=ramp();
  239. pan=Panneaux(rampant);
  240. tot=*pc;
  241. videBuffer();
  242. printf("\nVoulez vous connaitre la configuration panneau/onduleur ?\n1 : oui 2 : non\n");
  243. scanf("%d",&ond);
  244.  
  245. while((ond!=1) && (ond!=2))
  246. {
  247. printf("\nJe n ai pas compris votre saisie !\n");
  248. videBuffer();
  249. printf("\nVoulez vous connaitre la configuration panneau/onduleur ?\n 1 : oui 2 : non\n");
  250. scanf("%d",&ond);
  251. }
  252.  
  253. if((ond==1) && (pan==1))
  254. {
  255. onduleur_ako(tot);
  256. }
  257.  
  258. restart=start(restart);
  259. }
  260.  
  261. system("PAUSE");
  262.  
  263. }

Autres pages sur : probleme pointeur

a b L Programmation
31 Janvier 2010 11:53:59

Si tu utilise un paramètre de sortie, ne déclare pas ta variable en globale (c'est justement l'intérêt).
Un pointeur n'est qu'une adresse mémoire indiquant la position de ta variable en mémoire.
Quand tu fais "int *pc;" tu déclares bien un pointeur pc contenant une adresse mémoire censé pointer sur un int. Pour l'instant, tu n'as pas assigné d'adresse mémoire, donc ça pointe sur n'importe quoi.
"&c" te permet d'avoir l'adresse mémoire de ta variable c. Pour mettre cette adresse dans pc, il te faut faire "pc = &c". Ensuite, si tu veux lire ou écrire la zone mémoire pointée par pc, il te faut utiliser "*pc".

Bref, dans ton cas, tu déclare simplement ton "int c;" dans ton main et pas en global. Ensuite, tu fait passer "&c" en paramètre de ta fonction.
Je rappelle que lorsqu'on fait un passage en paramètre, le paramètre est copié sur la pile, c'est pour ça que si tu passe c directement, tu ne va modifier que la copie et pas l'original. Quand tu fais passer un paramètre en pointeur, tu le copies également, mais ce que tu copie c'est l'adresse et pas le contenu de l'adresse. Comme tu vas modifier le contenu de l'adresse mémoire, que tu fasses une copie ou non du pointeur ne change rien parce que les 2 vont pointer sur la même zone mémoire.
Donc, dans ta fonction Panneaux, tu ajoute un paramètre "int * pc". A l'appel tu donne "&c", et dans la fonction tu utilises "*c" pour manipuler le contenu de l'adresse mémoire.

Un dernier truc pour bien programmer. La plupart des crash sont dus à des pointeur NULL. Si pc==NULL, *pc fait crasher le programme (accès à une zone réservée), donc il faut donc toujours tester si un pointeur pc n'est pas NULL avant utilisation de *pc, même si ça ne devrait jamais poser problème.
m
0
l
31 Janvier 2010 13:30:41

Voila mon code au complet ....
J'ai essayé ce que tu m'as dit et j'ai le warning suivant :" assignment makes integer from pointer without a cast"
Dc pour que tu te perdes pas :
J'e créer ma variable "int c" dans mon main, ensuite je définis tjs ds le main "c=&c;" puis quand j'appelle ma fonction panneaux je lui passe "tot=Panneaux(rampant,pan,&c);"
ensuite je déclare ma fct tel que : "int Panneaux(int g,int s,int *c)"
Pour les calculs dans ma fct, j'utilise"*c", après je fais un "return *c;" que je met dans ma variable "tot" ("tot=Panneaux(rampant,pan,&c);")

enfin j'appelle ma deuxième fct "onduleur_ako(tot);" que je déclare comme celà "void onduleur_ako(int a)"

Si celà peut t'aider ... à m'aider !!!

Salutations (et merci du temps passer à écrire ta 1ère réponse relativement claire pour un débutant comme moi .... désolé de ramer...)

++

  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <stdlib.h>
  4.  
  5.  
  6.  
  7. static void videBuffer(void)
  8. {
  9. int z;
  10. while((z=getchar())!='\n' && z!=EOF);
  11. }
  12.  
  13. int Panneaux(int g,int s,int *c)
  14. {
  15. int a,b,pose,m,n,o,r;
  16. float d,e,f,h,i;
  17. double j,k,l,p,q;
  18.  
  19. videBuffer();
  20. printf("\nQuel est la longeur de la toiture ?\n");
  21. scanf("%f",&f);
  22. h=g*f;
  23. printf("\nLa surface de la toiture est de %lg m2\n",h);
  24.  
  25. while((s!=1) && (s!=2) && (s!=3))
  26. {
  27. printf("\nJe n ai pas compris votre saisie !\n");
  28. videBuffer();
  29. printf("\nQuel type de panneau souhaitez vous utiliser : 1:Roto 2:Biosol 3:EGM \n\n");
  30. scanf("%d",&s);
  31. }
  32.  
  33. if(s==1)
  34. {
  35. b=f/1.047;
  36. a=g/2.028;
  37. k=0.32+0.4+(a*2.028)+(0.08*(a-1));
  38. l=(b*1.047)+0.6;
  39.  
  40. if(g<k)
  41. {
  42. a=a-1;
  43. k=0.32+0.4+(a*2.028)+(0.08*(a-1));
  44. }
  45.  
  46. if(f<l)
  47. {
  48. b=b-1;
  49. l=(b*1.047)+0.6;
  50. }
  51.  
  52. *c=b*b;
  53. j=0.27*(*c);
  54. }
  55.  
  56. else if(s==2)
  57. {
  58. b=((f-1.682)/1.663)+1;
  59. a=((g-0.864)/0.833)+1;
  60. k=0.47+((a-1)*0.833)+0.864;
  61. l=((b-1)*1.663)+1.682+0.3;
  62.  
  63. if(g<k)
  64. {
  65. a=a-1;
  66. k=0.47+((a-1)*0.833)+0.864;
  67. }
  68.  
  69. if(f<l)
  70. {
  71. b=b-1;
  72. l=((b-1)*1.663)+1.682+0.3;
  73. }
  74.  
  75. *c=b*a;
  76. j=0.18*(*c);
  77. }
  78.  
  79. else if(s==3)
  80. {
  81. videBuffer();
  82. printf("EGM 180W ou EGM 210W ? 1 : EGM 180W 2 : EGM 210W\n\n");
  83. scanf("%d",&m);
  84.  
  85. while((m!=1)&&(m!=2))
  86. {
  87. printf("Je n ai pas compris votre saisie !\n");
  88. videBuffer();
  89. printf("EGM 180W ou EGM 210W ? 1 : EGM 180W 2 : EGM 210W\n\n");
  90. scanf("%d", &m);
  91. }
  92.  
  93. if(m==1)
  94. {
  95. b=f/1.58;
  96. n=f/0.808;
  97. a=g/0.808;
  98. o=g/1.58;
  99. q=(o*1.58)+((o-1)*0.02);
  100. p=(n*0.808)+((n-1)*0.02);
  101. k=(a*0.808)+((a-1)*0.02);
  102. l=(b*1.58)+((b-1)*0.02);
  103.  
  104. if(g<q)
  105. {
  106. o=o-1;
  107. }
  108.  
  109. if(g<k)
  110. {
  111. a=a-1;
  112. }
  113.  
  114. if(f<p)
  115. {
  116. n=n-1;
  117. }
  118.  
  119. if(f<l)
  120. {
  121. b=b-1;
  122. }
  123.  
  124. *c=b*a;
  125. r=n*o;
  126. videBuffer();
  127. printf("\nUne pose en portrait donne %d panneaux, %d sur le rampant et %d sur la longueur\n\nUne pose en paysage donne %d panneaux, %d sur le rampant et %d sur la longueur \n\nSouaitez vous faire l etude pour une pose en portrait ou en paysage ? \n1:portrait 2:paysage \n\n",r,n,o,c,b,a);
  128. scanf("%d",&pose);
  129.  
  130. while((pose!=1) && (pose!=2))
  131. {
  132. printf("\nJe n ai pas compris votre saisie !\n");
  133. videBuffer();
  134. printf("\nSouaitez vous faire l etude pour une pose en portrait ou en paysage ? \n1:portrait 2:paysage\n\n");
  135. scanf("%d",&pose);
  136. }
  137.  
  138. if(pose==1)
  139. {
  140. j=r*0.18;
  141. a=o;
  142. b=n;
  143. *c=r;
  144. k=q;
  145. l=p;
  146. }
  147.  
  148. else
  149. {
  150. j=(*c)*0.18;
  151. }
  152. }
  153.  
  154. if(m==2)
  155. {
  156. b=f/1.69;
  157. n=f/0.99;
  158. a=g/0.99;
  159. o=g/1.69;
  160. q=(o*1.69)+((o-1)*0.02);
  161. p=(n*0.99)+((n-1)*0.02);
  162. k=(a*0.99)+((a-1)*0.02);
  163. l=(b*1.69)+((b-1)*0.02);
  164.  
  165. if(g<q)
  166. {
  167. o=o-1;
  168. }
  169.  
  170. if(g<k)
  171. {
  172. a=a-1;
  173. }
  174.  
  175. if(f<p)
  176. {
  177. n=n-1;
  178. }
  179.  
  180. if(f<l)
  181. {
  182. b=b-1;
  183. }
  184.  
  185. *c=b*a;
  186. r=n*o;
  187. videBuffer();
  188. printf("Une pose en portrait donne %d panneaux, %d sur le rampant et %d sur la longueur\n Une pose en paysage donne %d panneaux au total, %d sur le rampant et %d sur la longueur \nSouaitez vous faire l etude pour une pose en portrait ou en paysage ? \n1:portrait 2:paysage \n",r,n,o,*c,b,a);
  189. scanf("%d",&pose);
  190.  
  191. while((pose!=1) && (pose!=2))
  192. {
  193. printf("\nJe n ai pas compris votre saisie !\n");
  194. videBuffer();
  195. printf("\nSouaitez vous faire l etude pour une pose en portrait ou en paysage ? \n1:portrait 2:paysage\n");
  196. scanf("%d",&pose);
  197. }
  198.  
  199. if(pose==1)
  200. {
  201. j=r*0.21;
  202. a=o;
  203. b=n;
  204. *c=r;
  205. k=q;
  206. l=p;
  207. }
  208.  
  209. else
  210. {
  211. j=*c*0.18;
  212. }
  213. }
  214. }
  215.  
  216. printf("\n\n********************************************************************************\n");
  217. printf("\n__________________________________*Recapitulatif*_______________________________\n");
  218. printf("\n\nVous pouvez mettre %d panneaux : %d sur la longeur et %d sur le rampant\n",*c,b,a);
  219. d=(g-k)/2;
  220. printf("\nLa distance utilise sur le rampant sera de %lg, l ecart entre \nl installation et la toiture sera de %lg m de chaque cote\n",k,d);
  221. e=(f-l)/2;
  222. printf("\nLa distance utilise sur la longueur sera de %lg, l ecart entre \nl installation et la toiture sera de %lg m en haut et en bas\n",l,e);
  223. printf("\nLa puissance totale de l installation est de %lg kW \n",j);
  224. h=g*f;
  225. printf("\nLa surface de la toiture est de %lg m2\n",h);
  226. i=l*k;
  227. printf("\nLa surface totale de l installation est de %lg m2 \n",i);
  228. printf("\n********************************************************************************\n");
  229.  
  230. return *c;
  231. }
  232.  
  233. int start(int debut)
  234. {
  235. printf("\n\nVoulez vous continuer ? 1 : oui 2 : n\n\n");
  236. scanf("%d",&debut);
  237.  
  238. while((debut!=1)&&(debut!=2))
  239. {
  240. printf("\nJe n ai pas compris votre saisie !\n");
  241. videBuffer();
  242. printf("\nVoulez vous continuer ? 1 : oui 2 : n\n\n");
  243. scanf("%d",&debut);
  244. }
  245. if (debut!=1)
  246. {
  247. debut=0;
  248. }
  249.  
  250. return debut;
  251. }
  252.  
  253. void onduleur_ako(int a)
  254. {
  255. int AKO22000TL1=0,AKO22000TL2=0,AKO16000TL1=0,AKO16000TL2,AKO13000TL=0,AKO7200TL=0,AKO6300TL=0,AKO5300TL=0,AKO4800TL=0,AKO4300TL=0,AKO4600S=0,AKO4300S=0,AKO3800S=0,AKO3100S=0,AKO2800S=0,AKO2100S=0,choix1,choix2,nb1,reste,reste1,nb2,reste2,reste3,reste4,u1=0,u2=0,config1=0,config2=0,config3=0,config4=0;
  256.  
  257. reste=a;
  258.  
  259. while(reste!=0)
  260. {
  261. printf("\n%d panneaux au total. Quel onduleur voulez vous utiliser ?\n1 : AKO22000TL, 108 panneaux : 9*12 ou 117 panneaux 9*13\n2 : AKO16000TL, 72 panneaux : 6*12 ou 78 panneaux : 6*13\n4 : AKO13000TL\n5 : AKO7200TL\n6 : AKO6300TL\n7 : AKO5300TL\n8 : AKO4800TL\n9 : AKO4300TL\n10 : AKO4600S\n11 : AKO4300S\n12 : AKO3800S\n13 : AKO3100S\n",reste);
  262. scanf("%d",&choix1);
  263.  
  264. if (choix1==1)
  265. {
  266. nb1=a/108;
  267. reste1=a%108;
  268. nb2=a/117;
  269. reste2=a%117;
  270.  
  271. if(reste1==0)
  272. {
  273. AKO22000TL1=nb1;
  274. printf("\nTous les panneaux sont places\n");
  275. reste=0;
  276. config1=1;
  277. }
  278.  
  279. else if(reste2==0)
  280. {
  281. AKO22000TL2=nb2;
  282. printf("\nTous les panneaux sont places\n");
  283. reste=0;
  284. config2=1;
  285. }
  286.  
  287. else
  288. {
  289. printf("\nConfig1 : %d Onduleur Diehl AKO 22000TL\nString : 9x12 panneaux\nil reste %d panneaux non configure\n",nb1,reste1);
  290. printf("\nConfig2 : %d Onduleur Diehl AKO 22000TL\nString : 9x13 panneaux\nil reste %d panneaux non configure\n\n",nb2,reste2);
  291. videBuffer();
  292. printf("Quelle config voulez vous garder pour la suite ?\n1:config1(meilleur choix) 2:config2\n");
  293. scanf("%d",&choix2);
  294.  
  295. while((choix2!=1) && (choix2!=2))
  296. {
  297. printf("Je n ai pas compris votre saisie !\n");
  298. videBuffer();
  299. printf("Quelle config voulez vous garder pour la suite ?\n1:config1(meilleur choix) 2:config2");
  300. scanf("%d",&choix2);
  301. }
  302.  
  303. if(choix2==1)
  304. {
  305. a=reste1;
  306. AKO22000TL1=nb1;
  307. reste=reste1;
  308. config1=1;
  309. }
  310. else
  311. {
  312. a=reste2;
  313. AKO22000TL2=nb2;
  314. reste=reste2;
  315. config2=1;
  316. if(reste<10)
  317. {
  318. u1=1;
  319. reste=0;
  320. }
  321. }
  322. }
  323. }
  324.  
  325. if (choix1==2)
  326. {
  327. nb1=a/72;
  328. reste3=a%72;
  329. nb2=a/78;
  330. reste4=a%78;
  331. if(reste3==0)
  332. {
  333. AKO16000TL1=nb1;
  334. printf("\nTous les panneaux sont places\n");
  335. reste=0;
  336. config3=1;
  337. }
  338. else if(reste4==0)
  339. {
  340. AKO16000TL1=nb2;
  341. printf("\nTous les panneaux sont places\n");
  342. reste=0;
  343. config4=1;
  344.  
  345. }
  346. else
  347. {
  348. printf("\nConfig1 : %d Onduleur Diehl AKO 16000TL\nString : 9x12 panneaux\nil reste %d panneaux non configure\n",nb1,reste1);
  349. printf("\nConfig2 : %d Onduleur Diehl AKO 16000TL\nString : 9x13 panneaux\nil reste %d panneaux non configure\n",nb2,reste2);
  350. videBuffer();
  351. printf("Quelle config voulez vous garder pour la suite ?\n1:config1 2:config2");
  352. scanf("%d",&choix2);
  353.  
  354. if(choix2==1)
  355. {
  356. a=reste3;
  357. AKO16000TL1=nb1;
  358. reste=reste3;
  359. config3=1;
  360. }
  361.  
  362. if(choix2==2)
  363. {
  364. a=reste4;
  365. AKO16000TL2=nb2;
  366. reste=reste4;
  367. config4=1;
  368. if(reste<10)
  369. {
  370. u2=1;
  371. reste=0;
  372. }
  373. }
  374. }
  375. }
  376. }
  377. printf("\n\n********************************************************************************\n");
  378. printf("\n__________________________________*Recapitulatif*_______________________________\n");
  379.  
  380. if((AKO22000TL1!=0) || (AKO22000TL2!=0))
  381. {
  382. if(config1==1)
  383. {
  384. printf("\n%d onduleur Diehl Ako 22000TL, String : 9*12\n",AKO22000TL1);
  385. }
  386. if((config2==1) && (u1==1))
  387. {
  388. printf("\n%d Onduleurs Diehl Ako 22000TL, string : 9*13 \net vous pouvez enlever 1 panneaux sur %d des strings\n",AKO22000TL2,reste2);
  389. }
  390. if((config2==1) && (u1==0))
  391. {
  392. printf("\n%d Onduleurs Diehl Ako 22000TL, string : 9*13 \n",AKO22000TL2);
  393. }
  394. }
  395.  
  396. if((AKO16000TL1!=0) || (AKO22000TL2!=0))
  397. {
  398. if(config3==1)
  399. {
  400. printf("\n%d onduleur Diehl Ako 22000TL, String : 9*12\n",AKO16000TL1);
  401. }
  402. if((config4==1) && (u2==1))
  403. {
  404. printf("\n%d Onduleurs Diehl Ako 16000TL, string : 9*13 \net enlever 1 panneaux sur %d des strings\n",AKO16000TL2,reste4);
  405. }
  406. if((config4==1) && (u2==0))
  407. {
  408. printf("\n%d Onduleurs Diehl Ako 22000T, string : 9*13 \n",AKO16000TL2);
  409. }
  410. }
  411.  
  412. printf("\n********************************************************************************\n");
  413. }
  414.  
  415. float ramp(void)
  416. {
  417. int rep2;
  418. float rampant1,TEMP,TEMP2,R,h,inc1;
  419. char rep1;
  420. double inc2,a;
  421.  
  422. videBuffer();
  423. printf("Quel est la longeur du rampant en m?\n");
  424. scanf("%f",&rampant1);
  425. videBuffer();
  426. printf("\nCette mesure correspond t elle a la longeur du rampant reel ? \no=oui n=non(longeur au sol)\n");
  427. scanf("%c", &rep1);
  428.  
  429. while((rep1!='o') && (rep1!='n'))
  430. {
  431. printf("Je n ai pas compris votre saisie !\n");
  432. videBuffer();
  433. printf("\nCette mesure correspond t elle a la longeur du rampant reel ? \no=oui n=non(longeur au sol\n");
  434. scanf("%c",&rep1);
  435. }
  436.  
  437. if(rep1=='n')
  438. {
  439. videBuffer();
  440. printf("Connaissez vous l'inclinaison en %% ou en degre 1 = %% 2 = degre\n");
  441. scanf("%d",&rep2);
  442.  
  443. while((rep2!=1) && (rep2!=2))
  444. {
  445. printf("\nJe n ai pas compris votre saisie !\n");
  446. videBuffer();
  447. printf("\nConnaissez vous l'inclinaison en %% ou en degre 1 = %% 2 = degre\n");
  448. scanf("%d",&rep2);
  449. }
  450.  
  451. if(rep2==1)
  452. {
  453. videBuffer();
  454. printf("\nInclinaison en %% ?\n");
  455. scanf("%f",&inc1);
  456. h=(rampant1*inc1)/100;
  457. R=(rampant1*rampant1)+(h*h);
  458. rampant1=sqrt(R);
  459. printf("\nLe rampant fait %lg m\n",rampant1);
  460. }
  461.  
  462. else if(rep2==2)
  463. {
  464. videBuffer();
  465. printf("Inclinaison en degre ?\n");
  466. scanf("%lf",&inc2);
  467. inc2=(inc2*6.2832)/360;
  468. a=cos(inc2);
  469. rampant1=rampant1/a;
  470. printf("Le rampant fait %lg m\n",rampant1);
  471. }
  472.  
  473. }
  474.  
  475. else if(rep1=='o')
  476. {
  477. printf("Le rampant fait %lg m\n",rampant1);
  478. }
  479.  
  480. return rampant1;
  481. }
  482.  
  483. int main (void)
  484. {
  485. int ond,restart=1,pan,tot,c;
  486.  
  487. float rampant=0;
  488.  
  489. c=&c;
  490.  
  491. while(restart==1)
  492. {
  493. videBuffer();
  494. rampant=ramp();
  495.  
  496. videBuffer();
  497. printf("\n\nQuel type de panneau souhaitez vous utiliser : 1:Roto 2:Biosol 3:EGM \n\n");
  498. scanf("%d",&pan);
  499.  
  500. tot=Panneaux(rampant,pan,&c);
  501.  
  502. videBuffer();
  503. printf("\nVoulez vous connaitre la configuration panneau/onduleur ?\n1 : oui 2 : non\n");
  504. scanf("%d",&ond);
  505.  
  506. while((ond!=1) && (ond!=2))
  507. {
  508. printf("\nJe n ai pas compris votre saisie !\n");
  509. videBuffer();
  510. printf("\nVoulez vous connaitre la configuration panneau/onduleur ?\n 1 : oui 2 : non\n");
  511. scanf("%d",&ond);
  512. }
  513.  
  514. if((ond==1) && (pan==1))
  515. {
  516. onduleur_ako(tot);
  517. }
  518.  
  519. restart=start(restart);
  520. }
  521.  
  522. system("PAUSE");
  523.  
  524. }
m
0
l
Contenus similaires
a b L Programmation
31 Janvier 2010 13:53:49

Citation :
ensuite je définis tjs ds le main "c=&c;"

ça ne sert à rien, enlève-le.
&c est l'adresse mémoire de c, par exemple 0x40012540, et donc, là tu mets dans la velauer de c son adresse mémoire, c'est-à-dire qu'à l'adresse 0x40012540, il y a la valeur 0x40012540, ce qui n'a aucun sens.
Tu peux récupérer le pointeur en faisant "int * pc = &c;" et utiliser "tot=Panneaux(rampant,pan,pc);", mais, comme tu l'as fais, tu peux directement donner le pointeur.
m
0
l
31 Janvier 2010 14:16:08

Citation :
ça ne sert à rien, enlève-le.


Merci j'ai viré la ligne et ça marche !!!
Super c'est dingue comme on apprend vite quand on a des gens sympa pour nous guider ;) 

Encore merci à toi !

juste une question en passant j'aimerais tester un entier négatif, a til une declaration spécial à faire pour la variable ou je peux le faire avec un int ?

Sinon dans l'ensemble que penses tu de mon code ? je parle de la logique
Si tu n'as pas envi de me répondre je comprendrais :) 
m
0
l
a b L Programmation
31 Janvier 2010 20:47:34

Citation :
juste une question en passant j'aimerais tester un entier négatif, a til une declaration spécial à faire pour la variable ou je peux le faire avec un int ?

un "int" est signé sur 32 bits, tu peux y mettre un nombre de -2^31 à 2^31 - 1.
"unsigned int" lui ne représente que des nombres positifs de 0 à 2^32 - 1

Citation :
Sinon dans l'ensemble que penses tu de mon code ? je parle de la logique

Je découperais avec d'autres fonctions, et j'ajouterais des commentaires, notamment sur les fonctions pour expliquer le retour et les paramètres. C'est surtout si tu comptes pouvoir retoucher le code dans quelques mois. :) 
m
0
l
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