Search this site
Embedded Files
Mon BBC SDL pas à pas
  • Accueil
  • BBC BASIC
  • BBC OS
  • BBC MODULES
  • RUBRIQUES
  • LIENS
Mon BBC SDL pas à pas
  • Accueil
  • BBC BASIC
  • BBC OS
  • BBC MODULES
  • RUBRIQUES
  • LIENS
  • More
    • Accueil
    • BBC BASIC
    • BBC OS
    • BBC MODULES
    • RUBRIQUES
    • LIENS

⇨ MENU ⇨ BBC BASIC

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

PRINT

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

PRINT

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 )

PRINT

FOR ktour = 1 TO 5 : PROC_Test : NEXT ktour

PRINT

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

vos remarques, vos commentaires et de vos suggestions.

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.

Google Sites
Report abuse
Page details
Page updated
Google Sites
Report abuse