Bonjour !
En Basic (FreeBasic plus exactement, dans les autres dialectes je ne sais pas) il y a deux fonctions à peu près équivalentes aux fonctions Low() et High() du Pascal, avec cette différence qu'elles admettent un second paramètre facultatif et qu'elles permettent ainsi d'obtenir les dimensions d'un tableau à plusieurs... dimensions.
Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 ' FreeBasic dim a(2, 1 to 3, 1 to 4) as integer print LBound(a) ' 0 print UBound(a) ' 2 print LBound(a,2) ' 1 print UBound(a,2) ' 3 print LBound(a,3) ' 1 print UBound(a,3) ' 4 print LBound(a,4) ' 0 print UBound(a,4) '-1
Comment feriez-vous la même chose en Pascal ? Pour le moment, je n'ai trouvé que ça, qui ne paraît pas très convaincant.
Une remarque en passant, c'est que les fonctions FreeBasic renvoient le même résultat pour un tableau passé en paramètre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 program dimensions; var a: array[0..2, 1..3]of integer; begin WriteLn(Low(a)); // 0 WriteLn(Low(a[Low(a)])); // 1 ReadLn; end.
Code VB : 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 ' FreeBasic declare sub PrintBounds(a() as integer) dim b(2, 1 to 3, 1 to 4) as integer PrintBounds(b()) ' 0 ' 2 ' 1 ' 3 ' 1 ' 4 ' 0 '-1 sub PrintBounds(a() as integer) print LBound(a) print UBound(a) print LBound(a,2) print UBound(a,2) print LBound(a,3) print UBound(a,3) print LBound(a,4) print UBound(a,4) end sub
Alors qu'en Pascal (comme je l'ai appris récemment, après avoir cherché longtemps dans mon code une erreur qui n'existait pas ), les fonctions High() et Low(), dans ce cas, renvoient systématiquement 0 pour le premier indice, quelles que soient les "vraies" dimensions du tableau.
Une fois qu'on le sait, on s'arrange mais c'est un peu surprenant.
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 program dimensions; procedure PrintBounds(a: array of integer); begin WriteLn(Low(a)); WriteLn(High(a)); end; var b: array[1..3]of integer; begin WriteLn(Low(b)); WriteLn(High(b)); PrintBounds(b); ReadLn; end. { 1 3 0 2 }
Mais pour revenir à la question principale, comment obtenir les multiples dimensions d'un tableau ?
Partager