Bonjour
En OPL les variables sont typées : entiers courts sur 2 octets,
longs sur 4 octets, réels et chaînes jusque 255 caractères.
On peut également créer des tableaux à une dimension de ces différents
types.
Les tableaux ne peuvent être transmis comme paramètres à une procédure.
Si on veut travailler avec un tableau dans une procédure, il faut lui passer
l'adresse du tableau avec ADDR.
Puis on pourra lire et écrire dans ce tableau avec PEEKx et POKEx, selon le type
de données.
Si on veut écrire une procédure permettant de travailler sur n'importe quel tableau,
il faut connaître : l'adresse du tableau, sa dimension et son type de données.
Pour ce qui est de la longueur, après quelques essais j'ai trouvé que :
pour les tableaux numériques PEEKW adresse-2 (2 octets) renvoie le nombre d'éléments du tableau;
pour les chaînes PEEKB adresse-1 (1 octets) renvoie la longueur des chaînes et PEEKW adresse-3 le nombre d'éléments.
Par contre je séche concernant le type de données, j'ai cherché dans mes docs : Programming psion computer et OPL Userguide
rien.
Si quelqu'un peut m'aider ?
A noter que pour l'instant je n'ai testé qu'en OPL16.
Tableaux en OPL
Modérateur : Politburo
Tableaux en OPL
Ti(s) 60, 62 Galaxy, 66, 67 Galaxy, 68, 74 Basical 80, 81, 82, 83+, 83 CE, 84+SE, 85, 86, 89, 89 titanium, 92, 95 Procalc, v200, nSpire cx
Hp(s) 35s, 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, E500, El 5120, 9200, 9600
Canon X-07
Hp(s) 35s, 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, E500, El 5120, 9200, 9600
Canon X-07
- Marge
- Fonctionne à 14400 bauds
- Messages : 6190
- Enregistré le : 01 oct. 2008 14:39
- Localisation : En bas, tout au fond à gauche.
Re: Tableaux en OPL
Bonjour, Tyann,
Je commence à connaître un peu l'OPL, mais je suis encore bien loin de ton niveau.
Effectivement, il n'est rien dit à ce sujet dans les manuels que tu as mentionnés, mais j'ai trouvé ceci au sujet de l'OPL du PSION II :
Ça vient de là.
Je ne sais pas si ça peut t'aider... le sujet m'intéresse car je vais sans doute me coltiner ce problème dans ma programmation.
Cela dit, on peut sans doute utiliser une base de données à la place d'un tableau...
Je commence à connaître un peu l'OPL, mais je suis encore bien loin de ton niveau.
Effectivement, il n'est rien dit à ce sujet dans les manuels que tu as mentionnés, mais j'ai trouvé ceci au sujet de l'OPL du PSION II :
Code : Tout sélectionner
17.2.8 ARRAYS
One dimensional arrays are supported for integers, floating point numbers
and strings. Multi-dimensional arrays can be easily simulated by the use
of integer arithmetic.
Like all other variables, arrays are held on the stack. In the case of
string arrays the maximum string length is the first byte, the next word
contains the array size, this is followed by data. So, for example,
LOCAL A$(5,3),B%(2),C(3)
A$(4)="AB"
C(1)=12345
initially sets up memory as follows (from low memory to high memory):
High memory 00 00 00 00 ; 5st element of A$()
00 00 00 00 ; 4nd element of A$()
00 00 00 00 ; 3rd element of A$()
00 00 00 00 ; 2th element of A$()
00 00 00 00 ; 1th element of A$()
00 05 ; array size of A$()
03 ; max string length of A$()
00 00 ; 2st element of B%()
00 00 ; 1st element of B%()
00 02 ; array size of B%()
00 00 00 00 00 00 00 00 ; 3rd element of C()
00 00 00 00 00 00 00 00 ; 2nd element of C()
00 00 00 00 00 00 00 00 ; 1st element of C()
Low memory 00 03 ; array size of C()
After running the procedure it looks like:
High memory 00 00 00 00 ; 5th element of A$()
02 41 42 00 ; 4th element of A$()
00 00 00 00 ; 3rd element of A$()
00 00 00 00 ; 2nd element of A$()
00 00 00 00 ; 1st element of A$()
00 05 ; array size of A$()
03 ; max string length of A$()
00 00 ; 2st element of B%()
00 00 ; 1st element of B%()
00 02 ; array size of B%()
00 00 00 00 00 00 00 00 ; 3rd element of C()
00 00 00 00 00 00 00 00 ; 2nd element of C()
00 00 00 50 34 12 04 00 ; 1st element of C()
Low memory 00 03 ; array size of C()
The string and array limits are inserted into the variable space after it
has been zeroed. This process is referred to as "fixing up" the variables.
Only available memory limits the size of arrays.
Je ne sais pas si ça peut t'aider... le sujet m'intéresse car je vais sans doute me coltiner ce problème dans ma programmation.
Cela dit, on peut sans doute utiliser une base de données à la place d'un tableau...
3 hommes, 3 demis, un 3a... Magnéto, Serge !
Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67__: A L I E N .
♣ ♦ « Boris », c'était juste Maurice enrhumé. ♥ ♠
Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67__: A L I E N .
♣ ♦ « Boris », c'était juste Maurice enrhumé. ♥ ♠
Re: Tableaux en OPL
Salut Marge
Merci d'avoir prêté attention à mon poste.
A priori rien qui m'aide.
L'adresse obtenue par la fonction ADDR(tab()) correspond au 1er élément du
tableau, c'est pourquoi j'ai eu l'idée de regarder avant en mémoire adresse-1,adresse-2
pour voir si je trouvais un descripteur : nombre d'éléments, type de données.
Je pensais trouver une valeur qui indiquerai le type de données, cela doit bien être quelque part
peut-être ne suis je pas capable pour l'instant de la voir ou de l'interpréter ?
Je vais fouiller encore, après tout cela fait partie du charme de la programmation.
En ce qui me concerne le but est de créer des fonctions qui agissent sur les tableaux :
max, min, somme, etc... donc pas de base de données.
Pour ce qui est de mon niveau, je ne pense pas que le tien ai quelque chose à lui envier.
J'ai remarqué aussi qu'après le dernier élément du tableau, en mémoire on retrouve l'adresse du tableau.
Mais bon cela ne m'inspire rien de plus pour l'instant.
Au plaisir.
Merci d'avoir prêté attention à mon poste.
A priori rien qui m'aide.
L'adresse obtenue par la fonction ADDR(tab()) correspond au 1er élément du
tableau, c'est pourquoi j'ai eu l'idée de regarder avant en mémoire adresse-1,adresse-2
pour voir si je trouvais un descripteur : nombre d'éléments, type de données.
Je pensais trouver une valeur qui indiquerai le type de données, cela doit bien être quelque part
peut-être ne suis je pas capable pour l'instant de la voir ou de l'interpréter ?
Je vais fouiller encore, après tout cela fait partie du charme de la programmation.
En ce qui me concerne le but est de créer des fonctions qui agissent sur les tableaux :
max, min, somme, etc... donc pas de base de données.
Pour ce qui est de mon niveau, je ne pense pas que le tien ai quelque chose à lui envier.
J'ai remarqué aussi qu'après le dernier élément du tableau, en mémoire on retrouve l'adresse du tableau.
Mais bon cela ne m'inspire rien de plus pour l'instant.
Au plaisir.
Ti(s) 60, 62 Galaxy, 66, 67 Galaxy, 68, 74 Basical 80, 81, 82, 83+, 83 CE, 84+SE, 85, 86, 89, 89 titanium, 92, 95 Procalc, v200, nSpire cx
Hp(s) 35s, 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, E500, El 5120, 9200, 9600
Canon X-07
Hp(s) 35s, 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, E500, El 5120, 9200, 9600
Canon X-07
- bernouilli92
- Fonctionne à 14400 bauds
- Messages : 5270
- Enregistré le : 21 nov. 2012 13:03
- Localisation : Ile de France
Re: Tableaux en OPL
Le type du tableau doit être stocké ailleurs, certainement au même endroits où est stocké le nom de la variable.
Tu devrais passer en paramètre à ta procédure, à la fois l'adresse du tableau et le type de données qu'il contient.
Tu devrais passer en paramètre à ta procédure, à la fois l'adresse du tableau et le type de données qu'il contient.
HP, Casio, Sharp, Psion, quelques TI et divers autres