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

  FORUM HardWare.fr
  Programmation
  C

  p'tit incompréhension de mon propre code.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

p'tit incompréhension de mon propre code.

n°578587
smilm
Posté le 28-11-2003 à 19:37:46  profilanswer
 

Salut !
Ce soir mon frere est revenu tout joyeux en me disant qu'il avait reussi son TP de Caml et m'a proposer de faire un des exo de son TP, "le triangle pascal".
Je pense que vous connaissez sinon compilez le code qui suit et regarder le résultat, ca va vous paraitre plus clair.
 
Dans mon code il y'a quelque chose que je ne comprends pas, je l'ai mis parce que j'étais parti sur autre chose (initialiser tout mon tableau a 1, mais c'est bete), et finalement j'en suis arriver a mettre ca :  

Code :
  1. for(unsigned long i=0;i<1;i++);


Et si je mets pas ca...essayer, vous verrez que le triangle pascal ne renvoi plus quelque chose comme ca :
 

Code :
  1. 1
  2. 1  1
  3. 1  2  1
  4. 1  3  3  1
  5. 1  4  6  4  1


mais il renvoi plutot :

Code :
  1. 10
  2. 10  10
  3. 10  2  10
  4. 10  3  3  10
  5. 10  4  6  4  10


 
Et je comprends pas pourquoi il fait ca..
 
voilà le code que j'ai pondu (c'était demandé de le faire en CAML mais n'y connaissant rien au CAML, je l'ai fait en C)
 

Code :
  1. #include <iostream.h>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. int main()
  5. {
  6. unsigned long tab[1000][1000];
  7. for(unsigned long i=0;i<1;i++); // <== ca sert a quoi ?
  8. unsigned long nbligne;
  9. printf("Bienvenu dans \"Triangle de Pascal\"\n" );
  10. printf("Combien de ligne souhaitez vous :" );
  11. scanf("%d",&nbligne);
  12. unsigned long b;
  13. unsigned long j;
  14. for(b=0;b<nbligne;b++)
  15. {
  16. printf("\n" );
  17. for(j=0;j<b;j++)
  18. {
  19.    tab[b][j]=tab[b-1][j-1]+tab[b-1][j];
  20.    printf("%d\t",tab[b][j]);
  21. }
  22. }
  23. getchar();
  24. getchar();
  25. }


 
Voilà, donc ma question final est, a quoi sert

Code :
  1. for(unsigned long i=0;i<1;i++);


surtout que au début tout les variables "b" du programme s'appelait i, mais je les ai renommés pour voir si ca changeai quelque chose, mais non, puisque le "unsigned long i=0" appartient a la boucle for et il est donc comme une variable local a ce bloc.
 
Merci d'avance.


Message édité par smilm le 28-11-2003 à 20:15:12

---------------
AfterEnd: Batissez un nouveau monde
mood
Publicité
Posté le 28-11-2003 à 19:37:46  profilanswer
 

n°578589
jagstang
Pa Capona ಠ_ಠ
Posté le 28-11-2003 à 19:45:36  profilanswer
 

troll ?
 
pour répondre à ta question finale, RIEN. Le ";" après le for fait que la boucle ne répète rien du tout

n°578590
SquiZZ
Posté le 28-11-2003 à 19:48:20  profilanswer
 

SmilM a écrit :


 
 
 for(j=0;j<b;j++)
 {
   tab[b][j]=tab[b-1][j-1]+tab[b-1][j];
   printf("%d\t",tab[b][j]);
 }
 
 


 
C'est pas du C, t'as des variables déclarées après des instructions.
Sinon j'ai pas tout regardé mais jette un coup d'oeil sur ce que j'ai mis en gras.
 
[edit] zut les balises gras marchent pas dans des blocs de code
[edit] ni dans le fixed.


Message édité par SquiZZ le 28-11-2003 à 19:49:49
n°578591
smilm
Posté le 28-11-2003 à 19:48:21  profilanswer
 

Non, pas troll du tout.
Relis le topic.
le "for(unsigned long i=0;i<1;i++);" est obligé si je veux que ca marche.
Compile le code chez toi, tu verras par toi meme


---------------
AfterEnd: Batissez un nouveau monde
n°578592
jagstang
Pa Capona ಠ_ಠ
Posté le 28-11-2003 à 19:50:11  profilanswer
 

mdr tu plaisante

n°578593
smilm
Posté le 28-11-2003 à 19:50:40  profilanswer
 

mes varianbles sont déclarés bien avant les instructions sur ce coup là.(et que ca soit plus du C ou C++, ou que ca soit plus au norme, cela m'importe peu.


---------------
AfterEnd: Batissez un nouveau monde
n°578594
jagstang
Pa Capona ಠ_ಠ
Posté le 28-11-2003 à 19:50:46  profilanswer
 

tu compiles avec quoi ? moi j'ai pas de problèmes

n°578595
smilm
Posté le 28-11-2003 à 19:52:02  profilanswer
 

JagStang a écrit :

mdr tu plaisante


 :fou: Compile ca :
 

Code :
  1. #include <iostream.h>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. int main()
  5. {
  6. unsigned long tab[1000][1000];
  7. for(unsigned long i=0;i<1;i++); // <== ca sert a quoi ?  
  8. unsigned long nbligne;
  9. printf("Bienvenu dans \"Triangle de Pascal\"\n" );
  10. printf("Combien de ligne souhaitez vous :" );
  11. scanf("%d",&nbligne);
  12. unsigned long b;
  13. unsigned long j;
  14. for(b=0;b<nbligne;b++)
  15. {
  16. printf("\n" );
  17. for(j=0;j<b;j++)
  18. {
  19.   tab[b][j]=tab[b-1][j-1]+tab[b-1][j];
  20.   printf("%d\t",tab[b][j]);
  21. }
  22. }
  23. getchar();
  24. getchar();
  25. }


 
et compile ca :
 

Code :
  1. #include <iostream.h>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. int main()
  5. {
  6. unsigned long tab[1000][1000];
  7. unsigned long nbligne;
  8. printf("Bienvenu dans \"Triangle de Pascal\"\n" );
  9. printf("Combien de ligne souhaitez vous :" );
  10. scanf("%d",&nbligne);
  11. unsigned long b;
  12. unsigned long j;
  13. for(b=0;b<nbligne;b++)
  14. {
  15. printf("\n" );
  16. for(j=0;j<b;j++)
  17. {
  18.   tab[b][j]=tab[b-1][j-1]+tab[b-1][j];
  19.   printf("%d\t",tab[b][j]);
  20. }
  21. }
  22. getchar();
  23. getchar();
  24. }

 
 
Au cas ou ca serait un bug de compilo => j'utilise DevC++


Message édité par smilm le 28-11-2003 à 20:14:48

---------------
AfterEnd: Batissez un nouveau monde
n°578597
SquiZZ
Posté le 28-11-2003 à 19:52:07  profilanswer
 

SmilM a écrit :

mes varianbles sont déclarés bien avant les instructions sur ce coup là.(et que ca soit plus du C ou C++, ou que ca soit plus au norme, cela m'importe peu.


 
tu respectes les normes, c'est du C, tu respectes pas c'est pas du C.
c'est pas parce que ton compilo te retapisse pas ta chambre en vert que c'est du C.

n°578599
jagstang
Pa Capona ಠ_ಠ
Posté le 28-11-2003 à 19:54:33  profilanswer
 

unsigned long tab[1000][1000]; --> static pas bien
unsigned long b; --> pas initilisé : pas bien
 
 

mood
Publicité
Posté le 28-11-2003 à 19:54:33  profilanswer
 

n°578602
smilm
Posté le 28-11-2003 à 20:00:59  profilanswer
 

JagStang a écrit :

unsigned long tab[1000][1000]; --> static pas bien
unsigned long b; --> pas initilisé : pas bien
 
 
 


long tab[1000][1000]; --> static pas bien
Comment ca static ?
tab[][]; provoque 5 erreurs chez moi.
 
Enfin bon, j'ai pas trop compris l'histoire des variables static, enfin, j'ai cru comprendre que c'était des variables qui ne se reinitialiser pas a chaque passage dans la fonction mais uniquement au 1er passage, et qu'il garde donc la valeur de cette variable en memoire pour la prochaine utilisation de la fonction.


---------------
AfterEnd: Batissez un nouveau monde
n°578607
SquiZZ
Posté le 28-11-2003 à 20:06:50  profilanswer
 

et mes remarques en gras dans ton code ?

n°578609
Zipo
Ours bipolaire
Posté le 28-11-2003 à 20:11:11  profilanswer
 

Code :
  1. #include <stdlib.h> 
  2.   #include <stdio.h> 
  3.  
  4.   int main() 
  5.   { 
  6.     unsigned long tab[1000][1000]; 
  7.     unsigned long b;
  8.     unsigned long j;
  9.     unsigned long nbligne; 
  10.     printf("Bienvenu dans \"Triangle de Pascal\"\n" ); 
  11.     printf("Combien de ligne souhaitez vous :" ); 
  12.     scanf("%d",&nbligne); 
  13.     printf("----%d----\n",tab[b][j]); 
  14.     for(b=0;b<nbligne;b++) 
  15.     { 
  16.       printf("\n" ); 
  17.       for(j=0;j<b;j++) 
  18.       { 
  19.           tab[b][j]=tab[b-1][j-1]+tab[b-1][j]; 
  20.           printf("%d\t",tab[b][j]); 
  21.       } 
  22.     } 
  23.     getchar(); 
  24.     getchar(); 
  25.   }


 
Ton for ne servait à rien, par contre en remettant les déclarations de variables avant les instructions, tout marche... bizarre non?  :heink:  
Compile le code au dessus...
 

Citation :

printf("----%d----\n",tab[b][j]);


T'as rien dans b, ni dans j, pourquoi tu met cette ligne ???
 
 


---------------
- mon feed-back
n°578610
smilm
Posté le 28-11-2003 à 20:12:16  profilanswer
 

SquiZz a écrit :

et mes remarques en gras dans ton code ?
 


 
heu voui mais j'ai pas bien compris ce que tu voulais me montrer...désolé, je débute.


---------------
AfterEnd: Batissez un nouveau monde
n°578611
smilm
Posté le 28-11-2003 à 20:14:15  profilanswer
 

Zipo désolé pour cette ligne, effectivement elle ne sert a rien, elle me servait plus tot dans mon "develloppement" mais plus maintenant, surtout que vu que j'ai pas initialiser b et j elles sont obseletes.
j'édite :)


---------------
AfterEnd: Batissez un nouveau monde
n°578612
Zipo
Ours bipolaire
Posté le 28-11-2003 à 20:15:32  profilanswer
 

SmilM a écrit :

Zipo désolé pour cette ligne, effectivement elle ne sert a rien, elle me servait plus tot dans mon "develloppement" mais plus maintenant, surtout que vu que j'ai pas initialiser b et j elles sont obseletes.
j'édite :)
 


Ben si tu met toutes les déclarations de var avant les instructions ca marche


---------------
- mon feed-back
n°578613
SquiZZ
Posté le 28-11-2003 à 20:16:08  profilanswer
 

un tableau en C ca commence a quel indice ?
 
quand j vaut 0, combien vaut j-1 (attention j est un unsigned long) ?
 
refaire le même exercice avec la variable b.
 
Est ce que c'est c'est la cause de ton problème ? j'en sais rien.
 
[edit] question subsidiaire, qu'est ce qu'il y a à l'indice 4294967295 d'un tableau ?


Message édité par SquiZZ le 28-11-2003 à 20:23:47
n°578615
Taz
bisounours-codeur
Posté le 28-11-2003 à 20:21:36  profilanswer
 

le iostream.h t'en fait quoi ? le stdlib.h ?
 
1000*1000*4 octets ça te parait pas un peu gros pour ta pile ?

n°578616
jagstang
Pa Capona ಠ_ಠ
Posté le 28-11-2003 à 20:23:59  profilanswer
 

voilà le Taz. le problème va être vite réglé :)

n°578617
smilm
Posté le 28-11-2003 à 20:24:22  profilanswer
 

Taz a écrit :

le iostream.h t'en fait quoi ? le stdlib.h ?
 
1000*1000*4 octets ça te parait pas un peu gros pour ta pile ?


oui, je sais, c enorme mais ca on s'en moque, remplace le par 20 si tu veux.


---------------
AfterEnd: Batissez un nouveau monde
n°578618
smilm
Posté le 28-11-2003 à 20:26:31  profilanswer
 

SquiZz a écrit :

un tableau en C ca commence a quel indice ?
 
quand j vaut 0, combien vaut j-1 (attention j est un unsigned long) ?
 
refaire le même exercice avec la variable b.
 
Est ce que c'est c'est la cause de ton problème ? j'en sais rien.
 
[edit] question subsidiaire, qu'est ce qu'il y a à l'indice 4294967295 d'un tableau ?


 
c'est vrai que ca pose un probleme, et c'est pour ca que quand je compile et que je donne nbligne=10, il ne me donne que 9 ligne de résultat.
En fait il donne 10 ligne de résultat, dont la 1er qui est vide


---------------
AfterEnd: Batissez un nouveau monde
n°578620
Zipo
Ours bipolaire
Posté le 28-11-2003 à 20:30:06  profilanswer
 

SmilM a écrit :


 
c'est vrai que ca pose un probleme, et c'est pour ca que quand je compile et que je donne nbligne=10, il ne me donne que 9 ligne de résultat.
En fait il donne 10 ligne de résultat, dont la 1er qui est vide


mais meme dans la 2eme tu sors du tableau lorsque t'as b=1 et j=0 et que tu fais tab[b][j]=tab[b-1][j-1]+tab[b-1][j];  
ya un pb ;)


---------------
- mon feed-back
n°578624
smilm
Posté le 28-11-2003 à 20:36:05  profilanswer
 

hum oui c'est vrai, et puis de toute facon il est tout crado mon code.
J'essayerais de refaire cette exo prochainement.
Merci de votre aide :)
 
En tout cas j'ai (presque) reussi a faire cet exercice et ya des personnes de la classe à mon frere qui n'ont pas reussi à le faire en CAML :d


Message édité par smilm le 28-11-2003 à 20:36:19

---------------
AfterEnd: Batissez un nouveau monde
n°578626
SquiZZ
Posté le 28-11-2003 à 20:37:42  profilanswer
 

SmilM a écrit :

hum oui c'est vrai, et puis de toute facon il est tout crado mon code.
J'essayerais de refaire cette exo prochainement.
Merci de votre aide :)
 
En tout cas j'ai (presque) reussi a faire cet exercice et ya des personnes de la classe à mon frere qui n'ont pas reussi à le faire en CAML :d


 
reviens quand t'auras compris que programmer ne consiste pas a tapper sur des touches au hazard et dire "j'ai réussi" quand ca compile.

n°578628
Taz
bisounours-codeur
Posté le 28-11-2003 à 20:38:42  profilanswer
 

tu te rends compte que tu n'a pas besoin de toute la matrice ? il te faut juste les deux dernière lignes ...

n°578632
Zipo
Ours bipolaire
Posté le 28-11-2003 à 20:41:20  profilanswer
 

Taz a écrit :

tu te rends compte que tu n'a pas besoin de toute la matrice ? il te faut juste les deux dernière lignes ...


Ya bien pire que ca dans son algo :D


---------------
- mon feed-back
mood
Publicité
Posté le   profilanswer
 


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

  p'tit incompréhension de mon propre code.

 

Sujets relatifs
logiciels de comparaison de code source ?VB6 : code pour connection base de données ???
[Python] "Compilateur" Psyco qui booste le code Python ?Cherche Programme de Visualistation/Debeuging de code XML/XSL
[UltraEdit] comment exécuter un code en C sous Ultra Edit ?[HTML] Utilisation des balises CODE, SAMP, VAR et TT
portabilité windows/Linux du codeCode source!!!
Code sur plusieurs lignes...[C++/gcc 3.2.3] Template, petit bout de code qui ne fonctionne pas
Plus de sujets relatifs à : p'tit incompréhension de mon propre code.


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