DIM
DESCRIPTION.
L'instruction DIM permet de déclarer des tableaux de données.
Voir l'instruction DIM pour réserver une zone mémoire.
Voir la fonction DIM() pour connaitre la taille d'un tableau ou d'une structure.
Voir l'instruction DIM{} pour déclarer un tableau de données.
SYNTAXE.
DIM LST_Tableau?( valeur )
DIM LST_Tableau?( valeura , valeurb , ... , valeurn )
REMARQUES.
LST_Tableau peut être n'importe quelle combinaison de lettres majuscules ou minuscules et de chiffres, mais commençant par une lettre et qui ne soit pas un mot-clé du BBC BASIC.
? peut être :
- rien, pour des valeurs numériques variables, entières ou réelles à virgule flottante ;
- &, pour des nombres entiers de 0 à 255 ;
- %, pour des nombres entiers de −2147483648 à 2147483647 ;
- %%, pour des nombres entiers de −9223372036854775808 à 9223372036854775807 ;
- #, pour des nombres réels de ±2,3E−308 à ±1,7E308 ;
- $, pour des chaines de caractères ;
valeur est obligatoire et doit être d'un type numérique. Mais si valeur n'est pas un nombre entier, seule la partie entière de valeur sera retenue. Par exemple : DIM LST_Nom$ (18.7) sera traduit en DIM LST_Nom$ (18).
Dans BBC BASIC, tous les tableaux de données doivent être déclarés avant leur utilisation, même s'ils comportent moins de 12 item.
Un tableau de données aura (valeur + 1) items qui seront tous initialisés à 0 pour les types numériques et à une chaine vide ("") avec le type chaine de caractères. Après sa déclaration, le nombre et la valeur des dimensions d'un tableau de données ne peuvent plus être modifiés. Cependant, il est possible de redéclarer un tableau de données avec les même valeurs. Dans ce cas, les valeurs de ses items ne seront pas modifiées.
Tous les items d'un tableau de données, de toutes ses dimensions, doivent être du même types.
QU'EST-CE QU'UN TABLEAU DE DONNÉES.
Un tableau de données est une variable qui contient un certain nombre de valeurs, ses éléments ou items.
Avec le BBC BASIC du BBC SDL, tous les éléments d'un tableau ont le même type de données. Pour affecter, lire ou modifier la valeur d'un item dans un tableau, on le désigne par le nom de la variable représentant le tableau, suivis de sa position, son index, dans le tableau.
La création de tableaux de données sera utile, si vous avez besoin de variables avec des nombres, ou indices, dans leurs noms. Cela rend les tableaux parfaits dans de nombreux cas. Vous pouvez obtenir plusieurs valeurs du même type simplement en faisant référence aux positions des éléments dans un tableau. De plus, vous pouvez avoir des milliers de possibilités en cas de besoin. Les tableaux de données seront aussi utiles pour contenir des données d'image ou de fichier.
CRÉER UN TABLEAU DE DONNÉES.
Dans BBC BASIC, tous les tableaux doivent être déclarés avant leur utilisation.
L'instruction DIM doit être utilisée pour déclarer un tableau de données, en indiquant le nombre d'éléments de chacune de ses dimensions qu'il contiendra, avant que le tableau ne soit utilisé. Le type commun à toutes ses données du tableau sera défini grâce au suffixe du nom du tableau. Le premier item à toujours l'index 0. Un tableau de données contient donc 1 élément de plus que la valeur indiquée pour la taille de la dimension.
DIM LST_Scores%( 25 ) crée un tableau de 26 items de type INTEGER. Le premier item est à l'index, ou indice, 0 et pourra être appelé avec LST_Scores%( 0 ). Le deuxième item est à l'index 1, est sera appelé avec LST_Scores%( 1 ). Et ainsi de suite jusqu'au dernier item, le 26è, à l'index 25, nommé LST_Scores%( 25 ).
Pour déclarer un tableau de données ayant plusieurs dimensions, on indiquera la taille de chaque dimension les unes à la suite des autres en les séparant par une virgule. Même si un tableau de données possède plusieurs dimensions, tous les items de toutes ses dimensions seront du même type.
DIM LST_Equipe$( 15 , 21 , 4 ) crée un tableau avec trois dimensions. La première aura 16 items de type STRING, la deuxième aura 22 items de type STRING, et la troisième aura 5 items de type STRING.
Tous les items d'un tableau de données sont initialisés avec une chaine vide ("") s'ils sont de type STRING, ou avec la valeur 0 s'ils sont de type numérique.
Si un tableau de données est re-déclarée à l'identique, c'est-à-dire le même nom, même suffixe, même dimensions et même nombres items par dimension, la nouvelle déclaration n'est pas prise en compte et les valeurs de ses items ne sont pas réinitialisées. Par contre, toute modification dans sa nouvelle déclaration provoquera une erreur.
Il est possible de connaitre le nombre de dimensions et le nombre d'items de chaque dimension avec la fonction DIM( ). Cette possibilité est particulièrement intéressante si l'on doit travailler dans une fonction personnalisée avec des tableaux de données dont les caractéristiques peuvent être différentes (voir ci-dessous pour plus de détails). La forme :
- DIM( LST_Tableau( ) ) retourne la quantité de dimensions dans LST_Tableau( ) ;
- DIM( LST_Tableau( ) , dimension ) retourne la quantité d'items - 1 dans la dimension dimension de LST_Tableau( ).
DIM LST_Locaux( 12 , 4 , 9 )
PRINT DIM( LST_Locaux( ) ) : REM --- retourne 3
PRINT DIM( LST_Locaux( ) , 1 ) : REM --- retourne 12
PRINT DIM( LST_Locaux( ) , 2 ) : REM --- retourne 4
PRINT DIM( LST_Locaux( ) , 3) : REM --- retourne 9
Note : La paire de parenthèses doit toujours être associée au nom de la variable désignant le tableau de données. Elle fait partie du nom du tableau de données.
LIRE OU MODIFIER LES VALEURS DES ITEMS.
Pour lire ou modifier la valeur d'un item d'un tableau de données, il suffit de donner l'emplacement de l'item dans toutes les dimensions du tableau de données. La valeur de l'affectation doit correspondre au type des items du tableau de données.
DIM LST_Scores%( 25 )
DIM LST_Equipe$( 15 , 21 , 25 )
LST_Scores%( 0 ) = 123
LST_Scores%( 12 ) = 456
LST_Scores%( 8 ) = 789
LST_Equipe$( 2 , 0 , 0 ) = "Les Vaillants"
LST_Equipe$( 2 , 1 , 0 ) = "Jeff"
LST_Equipe$( 2 , 1 , 12 ) = STR$(LST_Scores%(12))
PRINT LST_Scores%( 0 ) : REM --- 123
PRINT LST_Scores%( 8 ) : REM --- retourne 789
PRINT LST_Scores%( 12 ) : REM --- retourne 456
PRINT LST_Equipe$( 2 , 0 , 0 ) : REM --- retourne Les Vaillants
PRINT LST_Equipe$( 2 , 1 , 0 ) : REM --- retourne Jeff
PRINT LST_Equipe$( 2 , 1 , 12 ) : REM --- retourne 456
Il est possible de modifier plusieurs éléments d'un tableau de données lors d'une même affectation. Il n'est pas obligatoire d'affecter tous les éléments d'un tableaux de données, mais la première valeur sera affectée à l'élément d'indice 0, ou au premier indice de la tanche indiquée.
DIM LST_Chiffre( 9 ) : LST_Chiffre() = 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9
FOR kindex = 0 TO 9 : PRINT LST_Chiffre( kindex ) : NEXT kindex
LES TABLEAUX DANS LES FONCTIONS PERSONNALISÉES.
Après sa déclaration dans le module principal du programme, un tableau de données est de portée globale, c'est-à-dire qu'une fonction personnalisée PROC et/ou FN pourra lire et/ou modifier les valeurs de ses items.
DIM LST_Suite%( 9 )
FOR kvaleur = 0 TO 9 : LST_Suite%( kvaleur ) = kvaleur : NEXT kvaleur
FOR kvaleur = 0 TO 9 : PRINT CHR$( LST_Suite%( kvaleur ) ); : NEXT kvaleur
PROC_Doubler
FOR kvaleur = 0 TO 9 : PRINT CHR$( LST_Suite%( kvaleur ) ); : NEXT kvaleur
END
REM --- Fonctions affichant le contenu du tableau ---
DEF PROC_Doubler
FOR kvaleur = 0 TO 9 : LST_Suite%( kvaleur ) = LST_Suite%( kvaleur ) * 2 : NEXT kvaleur
ENDPROC
retourne :
0 1 2 3 4
0 2 4 6 8
Note : il n'est pas possible de passer les items d'un tableau de données individuellement à des fonctions personnalisées.
Si le programme doit utiliser la même fonction personnalisée pour plusieurs tableaux de données, ayant le même type de données, mais dont le nombre de dimensions ou d'items par dimensions sont différents, le BBC BASIC offre la possibilité de transmettre les tableaux de données par référence à ces fonctions personnalisées PROC et/ou FN, Grâce à la fonction DIM( ), la fonction personnalisée pourra connaitre les caractéristiques du tableau de données avec lequel elle doit travailler et adapter sont script en conséquence.
DIM LST_Carres%( 4 )
DIM LST_Cubes%( 4 )
DIM LST_Distances%( 4 , 5 , 2 )
DIM LST_Durees%( 6 )
FOR kvaleur = 0 TO 4
LST_Carres%( kvaleur ) = kvaleur
LST_Cubes%( kvaleur ) = kvaleur
NEXT kvaleur
PROC_Calculer( LST_Distances%( ) , 2 )
PROC_Calculer( LST_Cubes%( ) , 3 )
PROC_Calculer( LST_Carres%( ) , 2 )
PROC_Calculer( LST_Distances%( ) , 5 )
PROC_Calculer( LST_Durees%(), 2 )
PROC_Afficher( LST_Carres%( ) )
PROC_Afficher( LST_Cubes%( ) )
PROC_Afficher( LST_Distances%( ) )
PROC_Afficher( LST_Durees%( ) )
END
REM --- Afficher les valeurs ---
DEF PROC_Afficher( Q%( ) )
FOR kvaleur = 0 TO DIM( Q%( ) , 1)
IF DIM( Q%( ) ) = 1 THEN PRINT Q%( kvaleur ) ; ELSE PRINT Q%( kvaleur , 0 , 0 ) ;
NEXT kvaleur
ENDPROC
REM --- Fonction qui calcule l'ai des rectangles ---
DEF PROC_Calculer( Qtableau%( ) , Qpuissance% )
IF DIM(Qtableau%( ) ) = 1 AND DIM( Qtableau%( ) , 1 ) = 4 THEN
FOR kvaleur = 0 TO 4
Qtableau%( kvaleur ) = Qtableau%( kvaleur ) ^ Qpuissance%
NEXT kvaleur
ENDIF
ENDPROC
retourne :
0 1 4 9 16
0 1 8 27 64
0 0 0 0 0
0 0 0 0 0 0 0
TABLEAUX EXPORTÉS D'UNE FONCTION PERSONNALISÉE.
Dans une fonction personnalisée PROC et/ou FN, il est possible de déclarer un tableau de données et de le pérenniser dans le module principal du programme, pour pouvoir le lire ou le modifier à volonté. Pour cela, il faut :
- passer comme paramètre à la fonction un nom d'un tableau de données non déclaré dans le module principal, et ;
- utiliser le mot-clé RETURN devant le nom de la variable associé au tableau non déclaré.
PROC_Tirage( LST_GrilleA$( ) )
PROC_Tirage( LST_GrilleB$( ) )
PROC_Tirage( LST_GrilleC$( ) )
FOR kvaleur = 0 TO 24 : PRINT LST_GrilleA$( kvaleur ) ; " " ; : NEXT kvaleur : PRINT
FOR kvaleur = 0 TO 24 : PRINT LST_GrilleB$( kvaleur ) ; " " ; : NEXT kvaleur : PRINT
FOR kvaleur = 0 TO 24 : PRINT LST_GrilleC$( kvaleur ) ; " " ; : NEXT kvaleur : PRINT
END
REM --- Tirage des cases gagnantes d'une grille ---
DEF PROC_Tirage( RETURN Q$( ) )
DIM Q$( 24 )
REPEAT
kprincipal = RND( 24 )
ksecondaire = RND( 24 )
IF kprincipal <> ksecondaire THEN EXIT REPEAT
UNTIL FALSE
FOR kcase = 0 TO 24
CASE kcase OF
WHEN kprincipal : kvaleur$ = "G" : REM --- case gagnante
WHEN ksecondaire : kvaleur$ = "c" : REM --- lot de consolation
OTHERWISE kvaleur$ = "-" : REM --- perdu
ENDCASE
Q$( kcase ) = kvaleur$
NEXT kcase
ENDPROC
retourne :
- - - - - - - - c - - - - - - - - - G - - - - - -
- - - - - - - - - - - - G - - - - - - - - - - c -
- - - G - - - - - - - - - - - c - - - - - - - - -
TABLEAUX DE PORTÉE LOCALE DANS UNE FONCTION PERSONNALISÉE.
Si une fonction personnalisée PROC ou FN doit utiliser un tableau de données de portée locale, c'est-à-dire que les valeurs de ses items ne doivent être exploitables qu'à l'intérieur de cette fonction personnalisée, sa déclaration devra y être faite après que son nom ait été spécifié avec le mot clé :
- LOCAL, si les valeurs des items doivent être perdues à la sortie de la fonction personnalisée ou ;
- PRIVATE, si les valeurs des items doivent être conservées pour une réutilisation dans la même fonction personnalisée.
DIM LST_Global$( 5 )
DIM LST_Local$( 5 )
DIM LST_Prive%( 5 )
LST_Global$( 3 ) = "GLOBAL global"
LST_Local$( 3 ) = "GLOBAL local"
PRINT LST_Prive%( 0 ) ; ". " ; LST_Global$( 3 ) ; " et " ; LST_Local$( 3 )
FOR ktour = 1 TO 5 : PROC_Test : NEXT ktour
PRINT LST_Prive%( 0 ) ; ". " ; LST_Global$( 3 ) ; " et " ; LST_Local$( 3 )
END
DEF PROC_Test
LOCAL LST_Local$( )
PRIVATE LST_Prive%( )
DIM LST_Local$( 5 )
DIM LST_Prive%( 5 )
LST_Local$( 3 ) = "LOCAL local"
LST_Prive%( 0 ) = LST_Prive%( 0 ) + 1
PRINT LST_Prive%( 0 ) ; ". " ; LST_Global$( 3 ) ; " et " ; LST_Local$( 3 )
LST_Local$( 3 ) = "LOCAL sortie"
LST_Global$( 3 ) = "LOCAL sortie"
ENDPROC
retourne :
0. GLOBAL global et GLOBAL local
1. GLOBAL global et LOCAL local
2. GLOBAL sortie et LOCAL local
3. GLOBAL sortie et LOCAL local
4. GLOBAL sortie et LOCAL local
5. GLOBAL sortie et LOCAL local
0. GLOBAL sortie et GLOBAL local
Les modifications de LST_Global$( 3 ) sont conservées dans le module principal et dans PROC_Test.
Les modifications de LST_Local$( 3 ) dans PROC_Test sont perdues, mais sa valeur dans le module principal est conservée.
Les modifications de LST_Prive%( 0 ) dans PROC_Test sont conservées, mais sa valeur dans le module principal est différente.
Voir l'instruction DIM() qui retourne le nombre de dimensions d'un tableau ou d'une de ses dimensions.
Voir l'instruction DIM{} pour créer une structure de données.
Voir l'instruction LOCAL pour déclarer des variables de portée locale dans une fonction personnalisée PROC ou FN.
Voir l'instruction PRIVATE pour déclarer des variables à usage privé dans une fonction personnalisée PROC ou FN.
Voir la fonction SUM() pour additionner ou concaténer les éléments d'un tableaux de données.
Voir la bibliothèque arraylib.bbc qui contient des procédures complémentaires pour les tableaux de données.
Votre aide est précieuse pour améliorer ce site, alors n'hésitez pas à faire part de
Dans la RETROGICIEL vous trouvez des suggestions simples et classiques pour
TESTER - DÉCOUVRIR - PRATIQUER - APPROFONDIR - EXPLORER
avec un exemple de résolution à télécharger pour vous inspirer.