Bonjour!
J'essaye de faire un script php qui afficherait un tableau d'une taille variable.
En entrée de programme je reçois la taille du tableau et en sortie j'envoie les différents rowspan qui composent ce tableau (note, ce n'est pas un exercice scolaire, c'est bel et bien pour moi :p).
Un petit exemple rapide:
Pour un tableau de taille 4:
html:
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 <table> <tr> <td rowspan="4">D</td> <td rowspan="2">D1</td> <td rowspan="1">D11</td> </tr> <tr> <td rowspan="1">D12</td> </tr> <tr> <td rowspan="2">D2</td> <td rowspan="1">D12</td> </tr> <tr> <td rowspan="1">D12</td> </tr> </table>
Pour ce programme la, mon code php devrait prendre en entrée 4 et me ressortir ceci:
4 2 1 1 2 1 1
Pour le moment, jusqu'à la taille 8 ca passe niquel.
Mais dès que j'arrive au dessus de 16 y compris il y a toujours une erreur qui s'agrandit au fur et à mesure que la taille augmente.
Voici mon 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 <?php printf("Result -> 16 8 4 2 1 1 2 1 1 4 2 1 1 2 1 1 8 4 2 1 1 2 1 1 4 2 1 1 2 1 1\n"); $lim = $argv[1]; echo "Comm -> "; for ($save = $lim; $save >= 1; $save /= 2) echo $save . " "; if ($lim != 1) echo $save*2 . " "; for ($m1 = 2; $m1 < $lim; $m1 *= 2) { for ($m2 = $m1; $m2 >= 2; $m2 /= 2) { echo $m2 . " "; for ($m3 = $m2/2; $m3 >= 1; $m3 /= 2) echo $m3 . " "; echo $m3*2 . " "; } } printf("\n"); ?>
Et l'erreur qui en résulte est:
Result -> 16 8 4 2 1 1 2 1 1 4 2 1 1 2 1 1 8 4 2 1 1 2 1 1 4 2 1 1 2 1 1
Comm -> 16 8 4 2 1 1 2 1 1 4 2 1 1 2 1 1 8 4 2 1 1 4 2 1 1 2 1 1
Je vois pourquoi ca plante mais je n'arrive pas à le régler.
J'utilise trois variables $m1, $m2 et $m3. $m1 sert à stocker 2, 4, 8 puis seize (ce qui interrompt la boucle). $m2 va contenir des informations relatives à $m1:
si $m1 = 2 alors $m2 = 2
si $m1 = 4 alors $m2 = 4 puis $m2 = 2
si $m1 = 8 alors $m2 = 8 puis 4 puis 2
$m3 quand à lui est relatif a $m2.
Si $m2 = 2 alors $m3 = 1 puis 1
Si $m2 = 4 alors $m3 = 2 puis 1 puis 1
Si $m2 = 8 alors $m3 = 4 puis 2 puis 1 puis 1
etc...
Et le soucis est que si $m2 > 4 alors il va y avoir plantage: 8 4 2 1 1 4 2 1 1 2 1 1 à la place de 8 4 2 1 1 2 1 1 4 2 1 1 2 1 1.
Ici il y à une petite différence mais si j'essaye de faire un tableau avec une taille de 262144 l'erreur sera très importante. J'ai essayé de rajouter des boucles et parfois cela règle le problème avec 16 mais pas au dessus.
Je voudrais juste savoir si quelqu'un à une idée afin de me sortir de mon pétrin?
Merci d'avance dans tous les cas.
Partager