Salut à tous!
Après votre soutien ans faille, j'ai pu avancer sérieusement dans la comprehension et la résolution des soucis concernant un bout de code que j'ai posté sur ce forum il y a peu.
Je reviens une fois de plus avec un problème qui me freine depuis quelques jours déjà.
Il s'agit des opérations sur un tableau à deux dimensions.
Prenons une cellule quelconque du tableau. Cette cellule peut avoir trois résultats différents venant des opérations effectuées: Par exemple: On peut décider d'ajouter une unité à la valeur de la cellule de gauche, chercher la racine carrée de celle juste au dessus ou alors diviser la valeur de la cellule diagonale précédente par un nombre impair. La suite consiste à afficher le plus grand résultat provenant de ces trois opérations. Jusqu'ici, il n'y pas de problème. Là où le code devient intéressant et malheureusement compliqué est qu'il faut ensuite indiquer de quelle direction vient ce plus grand résultat(gauche, dessus ou diagonale). Il est à noter que chaque cellule est susceptible d'avoir un plus grand résultat différent des autres cellules. Pour pouvoir, indiquer de quel sens vient le plus grand résultat, j'ai pensé à uniformiser ce plus grand résultat. c'est à dire si ce plus grand vient de la cellule de gauche, j'écris 2 par exemple. S'il vient de la cellule au dessus, j'écris 1 et s'il vient de la diagonale, j'écris 3. C'est à ce niveau que mon code dérange. À la compilation, telle que les lignes 28, 32 et 36 sont écrites, les résultats sont bons et représentent les opérations sur les cellules correspondantes. Mais en remplaçant diag par 3 par exemple à la ligne 28, left par 2 à la ligne 32 et above par 1 à la ligne 36, les cellules n'affichent plus les vraies directions. C'est à dire on obtiendrait un 2 à la place de 1 ou 1 à la place de 3, puisqu'en comparant ces directions aux vrais résultats des opération, on voit qu'il n'a pas concordance. 3 par exemple indiquerait que le plus grand résultat vient de la diagonale précédente, tandis que 2 indiquerait que le plus grand résultat viendrait de la cellule de gauche..., donc ces chiffres indiqueraient non plus le plus grand résultat, mais de quelle direction vient ce grand résultat.
Le problème donc se pose lorsque je change diag, left et above en chiffres.
Pouvez-vous s'il vous plait jeter un coup d'œil sur mon code et m'aider à contourner cette difficulté?
Je vous serai gré.
Merci d'avance.
Voici mon bout de code.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 std::string str1 = "ABABA"; std::string str2 = "BBBBBAAA"; double diag, left, above; matrix<double> m (str1.size()+1, str2.size()+1); for(size_t i=0;i<m.size1 ();++i){m(i,0)=i;} for(size_t j=1;j<m.size2 ();++j){m(0,j)=j;} for(size_t i=1;i<m.size1();++i){ for(size_t j=1;j<m.size2();++j){ if(str1[i-1] == str2[j-1]) { diag = m(i-1, j-1)+ 1; } else { diag = m(i-1, j-1); } left = m(i-1, j) - 1; above = m(i, j-1) - 1; // Ici, je choisis le plus grand résultat. if(diag >= left && diag >= above) { m(i, j) = diag; } else if(left >= diag && left >= above) { m(i, j) = left; } else if(above >= diag && above >= left) { m(i, j) = above; } }} //affichage std::cout<<" "; for(size_t j=0;j<m.size2 ();++j){std::cout << str2[j] << " ";} std::cout << "\n"; for(size_t i=0;i<m.size1 ();++i){ if(i==0){ std::cout <<" ";} else{std::cout << str1[i-1]<<" ";} for(size_t j=0;j<m.size2();++j){ std::cout << m(i,j)<<" "; } std::cout <<"\n"; }
Partager