Bonjour,
J'ai rencontré récemment une difficulté de programmation aisément contournable, mais au sujet de laquelle je souhaiterais trouver une réponse claire.
La définition d'une constante de type Array a toujours conduit au résultat attendu:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 PROGRAM XXX; USES Crt; TYPE Lst3E = ARRAY[1..3] OF LongInt; CONST Lzero: Lst3E = (12345, 45678, 78901); BEGIN TextColor(15); WriteLn(Lzero[1]:9); WriteLn(Lzero[2]:9); WriteLn(Lzero[3]:9); ReadLn; END.
Un blocage imprévu a cependant surgi le jour où j'ai codé par inadvertance une constante de type Record, soit pour résumer:
ce qui fait apparaître à la compilation le message d'erreur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 TYPE VectZ3 = RECORD x, y, z: LongInt END; CONST Vzero:VectZ3 = (12345, 45678, 78901);
Error 44: Field identifier expected / The identifier does not denote a fied in the record or object variable.
Après plusieurs essais, je me suis résolu à me conformer strictement aux directives du compilateur, ce qui a conduit à la ligne tout à fait étonnante:
Le programme, complété en conséquence (après tout, ça ne mange pas de pain ) fonctionne !
Code : Sélectionner tout - Visualiser dans une fenêtre à part CONST Vzero:VectZ3 = (x: LongInt(12345));
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 PROGRAM XXX; USES Crt; TYPE VectZ3 = RECORD x, y, z: LongInt END; CONST Vzero:VectZ3 = (x: LongInt(12345)); BEGIN TextColor(15); WriteLn(Vzero.x:9); WriteLn(Vzero.y:9); WriteLn(Vzero.z:9); WriteLn; Vzero.y:= 45678; Vzero.z:= 78901; WriteLn(Vzero.x:9); WriteLn(Vzero.y:9); WriteLn(Vzero.z:9); ReadLn END.
Existe-t-il une (ou des) instruction(s) permettant - avec une syntaxe appropriée - de définir proprement une constante de type enregistrement, ou faut-il se résoudre à la déclaration banale d'une variable supplémentaire, à laquelle on affectera les valeurs souhaitées ?
Merci pour les éclaircissements que vous pourrez apporter: ce qui m'intrigue vraiment, c'est que la consigne jamais vue jusque là
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 VAR Vzero: VectZ3; ... / ... WITH Vzero DO BEGIN x:= 12345; y:= 45678; z:= 78901 END;
ait un sens.
Code : Sélectionner tout - Visualiser dans une fenêtre à part x: LongInt(12345)
Ces questions sont peut-être liées aux échanges apportés sur un autre forum, mais cela m'a échappé.
Partager