Section courante

A propos

Section administrative du site

Structure et format d'un programme Pascal

Cette page décrit les types de données et comment elles sont entreposées. Il aborde également l'utilisation des chaînes de caractères. Une description de la disposition d'un fichier .COM en mémoire sous DOS 2.0S est présentée.

Types de données

Cette section décrit comment les types de données Pascal standard sont implémentés dans ATARI Pascal. Le tableau suivant résume les types de données :

Type de données Taille Intervalle
CHAR 1 octet de 8 bits 0..255
BOOLEAN 1 octet de 8 bits False..True
INTEGER 1 octet de 8 bits 0..255
INTEGER 2 octets de 8 bits -32768..32767
BYTE 1 octet de 8 bits 0..255
WORD 2 octets de 8 bits 0..65535
REAL 4 octets de 8 bits 10E-98..10E+98
STRING 1..256 octets ------------
SET 32 octets de 8 bits 0..255

CHAR

Le type de données CHAR est implémenté en utilisant un octet de 8 bits pour chaque caractère. Le mot réservé PACKED est supposé sur les tableaux de CHAR. Les variables CHAR peuvent avoir l'intervalle de CHR(0)..CHR(255). Lorsqu'elle est placée sur la pile, une variable CHAR est de 16 bits, dont l'octet de poids fort contenant la valeur 00. Cela permet à OD, ODD, CHR et WRD de fonctionner ensemble.

BOOLEAN

Le type de données BOOLEAN est implémenté en utilisant un octet de 8 bits pour chaque variable BOOLEAN. Lorsqu'ils sont poussés sur la pile, 8 bits de 0 sont poussés pour assurer la compatibilité avec les opérateurs et routines intégrés. Le mot réservé PACKED est autorisé mais ne compresse pas la structure de données de plus d'un octet par élément (cela se produit avec et sans l'instruction PACKED). Ainsi, ORD(TRUE)=0001 et ORD(FALSE)=0000. Les opérateurs booléens AND, OR et NOT opèrent uniquement sur un octet. Reportez-vous aux opérateurs & et ! pour les opérateurs booléens 16 bits.

INTEGER

Le type de données INTEGER est implémenté en utilisant deux octets de 8 bits pour chaque variable INTEGER. MAXINT=32767 et INTEGER peuvent être compris entre -32768 et 32767. Une sous-intervalle entière déclarée comprise entre 0 et 255 n'occupe qu'un seul octet de mémoire au lieu de deux octets. Les constantes entières peuvent être des nombres hexadécimaux en faisant précéder le nombre hexadécimal d'un signe dollar (par exemple $0F3B).

REAL

L'implémentation du type de données REAL dans ATARI Pascal est la même que celle utilisée par ATARI BASIC. Six octets de données sont nécessaires pour implémenter un nombre à virgule flottante. Le premier octet contient le signe de la mantisse, l'exposant en excès de 64. La base de l'exposant est 100. Les cinq octets restants contiennent la mantisse en décimal codé binaire. La précision est d'environ 8 chiffres.

BYTE

Le type de données BYTE occupe un seul octet. Il est compatible avec les types INTEGER et CHAR. Cette compatibilité peut être très utile lors de la manipulation de caractères de contrôle, de l'arithmétique des caractères,... Des caractères et des entiers peuvent être attribués à un BYTE.

WORD

WORD est un mot machine natif non signé. Toutes les opérations arithmétiques et comparaisons effectuées sur les expressions de type WORD ne sont pas signées.

STRING

Définition

Le type pré-déclaré STRING est comme un tableau PACKED de caractères dans lequel l'octet 0 contient la longueur dynamique de la chaîne de caractères et les octets 1 à n contiennent les caractères. Les chaînes de caractères peuvent contenir jusqu'à 255 caractères. La longueur par défaut est de 80 caractères pouvant être modifiés lorsqu'une variable de type STRING est déclarée (voir exemple ci-dessous).

La chaîne de caractères «Voici un exemple» comporte 16 caractères. Le diagramme suivant montre comment ces caractères sont entreposés dans une chaîne de caractères déclarée comme comportant 20 caractères :

Si le nombre de caractères dans la chaîne de caractères est inférieur à la longueur déclarée, les octets à la fin ne sont pas définis. Notez que la longueur est entreposée dans le premier octet et que le nombre total d'octets requis pour la chaîne de caractères est de 17.

Exemple

  1. VAR
  2.  LONG_STR:      STRING;        (* Celui-ci peut contenir jusqu'à 80 caractères *)
  3.  SHORT_STR:     STRING[10];    (* Celui-ci peut contenir jusqu'à 10 caractères *)
  4.  VERY_LONG_STR: STRING[255];   (* Celui-ci peut contenir jusqu'à 255 caractères, soit le maximum alloué. *)

Affectation

L'affectation à une variable de chaîne de caractères peut être effectuée via l'instruction d'affectation, en lisant une variable de chaîne de caractères à l'aide de READ ou READLN, ou des fonctions et procédures de chaîne de caractères prédéfinies.

  1. PROCEDURE ASSIGN;
  2. VAR
  3.  LONG_STR  : STRING;
  4.  SHORT_STR : STRING[12];
  5. BEGIN
  6.  LONG_STR:='Cette chaine de caracteres peut contenir jusqu''à huit caracteres';
  7.  WRITELN(LONG_STR);
  8.  WRITE('Tapez une chaine de 10 caractères ou moins :');
  9.  READLN(SHORT_STR);
  10.  WRITELN(SHORT_STR);
  11.  SHORT_STR:=COPY(LONG_STR,1,11);
  12.  WRITELN('COPY(LONG_STR..)='),SHORT_STR);
  13. END;

on obtiendra en sortie :

Cette chaine de caracteres peut contenir jusqu'à huit caracteres
Tapez une chaine de 10 caractères ou moins :{123456} entrée utilisateur
123456
COPY(LONG_STR..)=Cette chaine

Les caractères individuels d'une variable chaîne de caractères sont accessibles comme si la chaîne de caractères était un tableau de caractères. Ainsi, l'indexation normale d'un tableau via des constantes, des variables et des expressions permet l'affectation et l'accès à des octets individuels dans la chaîne de caractères. L'accès à la chaîne de caractères sur toute sa longueur déclarée est légal et ne provoque pas d'erreur d'exécution même si un accès est effectué à une partie de la chaîne de caractères au-delà de la longueur dynamique actuelle. Si la chaîne de caractères comporte réellement 20 caractères et que la longueur déclarée est de 30, alors STRING[255] est accessible.

Exemple :

  1. PROCEDURE ACCESS;
  2. VAR
  3.  I:INTEGER;
  4. BEGIN
  5.  I:=15;
  6.  LONG_STR:='123456789abcdef';
  7.  WRITELN(LONG_STR);
  8.  WRITELN(LONG_STR[6],LONG_STR[i-5]);
  9.  LONG_STR[16]:='*';
  10.  WRITELN(LONG_STR[16]);
  11.  WRITELN(LONG_STR); (* N'écrira toujours que 15 caracteres *)
  12. END;

on obtiendra en sortie :

123456789abcdef
6a
*
123456789abcdef

Comparaisons

Les comparaisons sont valables entre deux variables de type STRING (quelle que soit leur longueur) ou entre une variable et une chaîne de caractères littérale. Les chaînes de caractères littérales sont des séquences de caractères entre guillemets simples. Des comparaisons peuvent également être faites entre une chaîne de caractères et un caractère. Le compilateur «force» le caractère à devenir une chaîne de caractères en utilisant le tampon CONCAT; par conséquent, la comparaison du résultat de la fonction CONCAT et d'un caractère n'a pas de sens car cette comparaison serait toujours égale.

Exemple :

  1. PROCEDURE COMPARE;
  2. VAR
  3.  S1,S2:STRING[10];
  4.  CH1:CHAR;
  5. BEGIN
  6.  S1:='012345678';
  7.  S1:='222345678';
  8.  IF S1<S2 THEN WRITELN(S1,' est inferieur a ',S2);
  9.  S1:='alpha beta';
  10.  IF S1='alpha beta'THEN
  11.   WRITELN('Les blancs a la fin n''ont pas d''importance')
  12.  ELSE
  13.   WRITELN('Les blancs a la fin compte');
  14.  IF S1='   alpha beta'THEN
  15.   WRITELN('Les blanc devant n''ont pas d''importance')
  16.  ELSE
  17.   WRITELN('Les blanc ont de l''importance');
  18.  IF S1='alpha beta'THEN
  19.   WRITELN(S1,' = ',S1);
  20.  S1:='Z';
  21.  CH1:= 'Z';
  22.  IF S1=CH1 THEN 
  23.   WRITELN('les chaines de caracteres et les caracteres peuvent etre compares');
  24. END;

on obtiendra en sortie :

012345678 est inferieur a 222345678
Les blancs a la fin n'ont pas d'importance
Les blanc ont de l''importance
alpha beta = alpha beta
les chaines de caracteres et les caracteres peuvent etre compares

Lire et écrire des chaînes de caractères

Les chaînes de caractères peuvent être écrites dans un fichier texte à l'aide de la procédure WRITE ou WRITELN. WRITELN provoquera un retour chariot et un saut de ligne après la chaîne de caractères. La lecture d'une chaîne de caractères se fait toujours via l'instruction READLN car les chaînes de caractères se terminent par un retour chariot et un saut de ligne. L'utilisation de READ ne fonctionnera pas car les caractères de fin de ligne ne sont pas traités correctement. Les tabulations sont développés lorsqu'ils sont lus dans une variable de type STRING.

SET

Le type de données SET est toujours entreposé sous la forme d'un élément de 32 octets. Chaque élément de l'ensemble est entreposé sous la forme d'un bit. Le bit de poids faible de chaque octet est le premier bit de cet octet de l'ensemble. Ci-dessous, l'ensemble "A".."Z" (bits 65..122) :

Numéro de l'octet 00 01 02 03 04 05 06 07 08 09 0A 0B 0C ... 1F
Contient 00 00 00 00 00 00 00 00 FE FF FF 07 00 ... 00


Dernière mise à jour : Jeudi, le 29 février 2024