Tableaux 2D - pourquoi c'est inversé ?

Tableaux 2D - pourquoi c'est inversé ? - C++ - Programmation

Marsh Posté le 13-03-2014 à 13:48:19    

Hello,
 
pourquoi quand j'écris ceci :
 
int tableauMines [2] [2];
int i,j,k,l;
 
for (i=0 ; i <3 ; i++) {
        for (j=0 ; j <3 ; j++) {
            tableauMines[i] [j] = 0;
            cout << i << "-" << j << endl;
            break;
        }
    }
 
 
 
j'ai ceci :
 
0-0
1-0
2-0
 
ne devrais je pas avoir 0-0 puis 0-1 ? la boucle j s'exécute 3 fois mais c'est i qui récupère la valeur .. je suis perdu.
 
comment c'est interprété svp ?
 
merci


---------------
Mon topic - Mon Feed-Back
Reply

Marsh Posté le 13-03-2014 à 13:48:19   

Reply

Marsh Posté le 13-03-2014 à 14:11:23    

je pense avoir trouvé, le break ne fini pas quand la seconde boucle se fini mais quand UNE PASSE de la seconde boucle se fini, pour le coup une fois j incrémenté on repasse dans la 1ere boucle (i) et donc on a sans le break :
 
 1eme partie
 i= 0
 j= 0
0-0
 j= 1
0-1
 i= 1
 j= 0
1-0
 j= 1
1-1


Message édité par Sndk le 13-03-2014 à 14:11:58

---------------
Mon topic - Mon Feed-Back
Reply

Marsh Posté le 13-03-2014 à 17:34:00    

break va simplement casser la boucle dans laquelle il est imbriqué, tout ce qui est après un break n'est pas exécuté par ailleurs (et contenu dans la boucle, bien-sûr). :jap:
Tu as aussi le mot-clef continue dans un boucle qui permet de passer directement à l'étape suivante sans exécuter aucune instruction postérieures (dans la boucle aussi).
 
Dans ton cas, tu cassais tout le temps ta boucle qui incrémentait j après avoir fait l'affichage, donc forcément j restait à 0.
 
Au passage, en C++ tu peux déclarer une variable dans une boucle/condition/whatever :  
 

Code :
  1. for ( int i=0; i< n; ++i ) { ... }


 
Ceci-dit, le "i" n'existera qu'au sein de la boucle (tu pourras pas récupérer sa valeur après que la boucle soit finie en gros).


---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 13-03-2014 à 17:37:52    

Merci pour ton message, oui j'ai lu ça autre part, j'ai tout compris, merci.
 
j'en suis au tableau resizable vector<int> par exemple, j'ai pas de soucis avec les tableaux, meme 2 d mais là je galère .. je vais y arriver je le sens :D
 
int main() {
 int const NbBestScore(5);
 vector<int> bestScore (NbBestScore);
 
 bestScore[0] = 125562;
 bestScore[1] = 110588;
 bestScore[2] = 254125;
 bestScore[3] = 192548;
 bestScore[4] = 100001;
 
 for (int i(0) ; i<NbBestScore ; i++) {
  cout << "Score " << i << " = " << bestScore [i] << endl;
 }
}
 
des zillions d'erreurs du type :
..\src\Vector.cpp:28:49: note:   cannot convert 'bestScore[i]' (type 'std::vector<int>') to type 'const unsigned char*'
   cout << "Score " << i << " = " << bestScore [i] << endl;
 
alors que ça fonctionne avec des tableaux normaux (sans vector)


Message édité par Sndk le 13-03-2014 à 19:03:34

---------------
Mon topic - Mon Feed-Back
Reply

Marsh Posté le 13-03-2014 à 17:42:20    

std::vector< std::vector< int > > bestScore( NbBestScore );

 

ca aidera déjà un peu

 

Edit : je comprends même pas pourquoi tu veux deux dimensions dans ce cas ... tu voulais peut-être ca ?
std::vector< int > bestScore( NbBestScore );


Message édité par theshockwave le 13-03-2014 à 17:43:49

---------------
last.fm
Reply

Marsh Posté le 13-03-2014 à 17:45:11    

les 2 exemples n'ont rien à voir c'est pour ça.
 
je vois souvent le std::vector mais dans les tuto c'est pas écris comme ça, seul des mecs en parle, du coup je suis un peu paumé
 
voir ici :  
http://fr.openclassrooms.com/infor [...] dynamiques
 
quand je fais un copié/collé de son prog , ya du rouge partout


Message édité par Sndk le 13-03-2014 à 17:45:22

---------------
Mon topic - Mon Feed-Back
Reply

Marsh Posté le 13-03-2014 à 17:58:12    

bon ben en fait ça marche, je me demande quand il faut rebuilder son programme .. ou c'est moi qui délire ou c'est Eclipse :D


---------------
Mon topic - Mon Feed-Back
Reply

Marsh Posté le 13-03-2014 à 18:24:09    

dans le code que tu as posté plus haut, tu déclares un tableau de vector<int> et tu utilises ca comme si c'était soit un tableau, soit un vector<int> ... C'est la source de tes erreurs.


---------------
last.fm
Reply

Marsh Posté le 13-03-2014 à 18:37:38    

c'est ce qui est écrit dans un tuto, je n'ai rien inventé (ça va venir :D)


---------------
Mon topic - Mon Feed-Back
Reply

Marsh Posté le 13-03-2014 à 18:52:48    

Je ne pense pas, parce que sinon, après un rebuild, ca ne compilerait pas.
 
tu as probablement confondu () et [] en faisant la première verison


---------------
last.fm
Reply

Marsh Posté le 13-03-2014 à 18:52:48   

Reply

Marsh Posté le 13-03-2014 à 19:04:28    

je viens de regarder, tu as raison .. le vector a des () le tableau des []
 
mea culpa :)
 
ps : encore un peu de travail et je vais pouvoir faire mon projet de robots sur échiquier yes


Message édité par Sndk le 13-03-2014 à 19:04:53

---------------
Mon topic - Mon Feed-Back
Reply

Marsh Posté le 13-03-2014 à 19:18:57    

il faut que tu comprennes un peu mieux ce que tu écris.
Les paranthèses pour le vector, c'est pour faire appel à un autre de ses constructeurs.
Pour le tableau, tu demandes simplement à avoir autant d'objets alloués simultanément sur la pile. Ce sont des idées assez différentes.


---------------
last.fm
Reply

Marsh Posté le 13-03-2014 à 19:30:56    

si pour le tableau j'ai très bien compris en revanche pour les () du vector, pas, je vais relire voir si je trouve l"info, merci


---------------
Mon topic - Mon Feed-Back
Reply

Sujets relatifs:

Leave a Replay

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