IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Le langage Pascal


précédentsommairesuivant

Enregistrements

Dans un tableau, tous les constituants doivent être semblables. Ce n'est pas le cas des enregistrements, qui sont des variables composées de plusieurs variables (ou champs) de types différents.

Déclarations

Structure d'une déclaration d'enregistrement :

 
Sélectionnez
VAR
  nom_variable : RECORD
                   champ1 : type;
                   champ2 : type;
                   ...
                 END;

{ ou }

TYPE
  nom_type = RECORD
               champ1 : type;
               champ2 : type;
               ...
             END;

Exemple :

 
Sélectionnez
TYPE
  date = RECORD
           jour : 1..31;
           mois : 1..12;
           an : 1980..1999
         END;
  facture = RECORD
              reference : integer;
              jour : date; {enregistrement d'enregistrement}
              client : string [100];
              total_HT : real
            END;

VAR
  date1, date2 : date;
  comptes : array [1..100] of facture;
  fact : facture;

Dans un enregistrement, chaque champ doit avoir un nom différent. Mais pour des enregistrements différents on peut réutiliser le même nom de champ (ici jour).

Utilisation des enregistrements

Comme l'affectation fonctionne toujours pour des variables de même type, on peut écrire DATE1 := DATE2.

On accède à un champ par NOM_VARIABLE.NOM_CHAMP :

 
Sélectionnez
  writeln('Référence de la facture ? '); 
  readln(fact.reference);  
  writeln('Mois de la facture	? ');  
  readln(fact.jour.mois);  
  writeln('Jour de la facture ? ');  
  readln(fact.jour.jour); 
  for i := 1 to nb_fact do  
    writeln(comptes[i].prix

Un champ d'enregistrement s'utilise comme une variable du même type (avec les mêmes possibilités mais aussi les mêmes limitations).

La structure WITH - DO (avec - faire)

Structure :

 
Sélectionnez
WITH nom_enregistrement DO instruction

Elle permet d'omettre le nom_enregistrement dans l'instruction.

 
Sélectionnez
FOR I := 1 TO nb_fact DO
  WITH comptes[i] DO
    begin
      reference := i; { c.a.d comptes[i].reference }
      writeln('Nom du client de la facture ndeg.',i,' ?');
      readln(client);
    end

Dans un WITH, on peut évidement accéder à d'autres enregistrements, il suffit de préciser le nom_enregistrement.champ. Si l'on utilise des WITH imbriqués, en cas d'ambiguïté des noms de champs on se réfère au WITH le plus proche (intérieur).

 
Sélectionnez
WITH fact DO
  begin
    WITH date1 DO
      begin
        mois := 12;        { date1.mois }
        reference := 1;    { fact.reference car date1.reference n'existe pas }
        jour := 15;        { date1.jour car WITH DATE1 le plus à l'intérieur }
        fact.jour := date2 { fact.jour puisqu'on le précise }
      end
  end

Enregistrements avec variantes

Certains champs d'un enregistrement peuvent être différents suivant la valeur d'un des champs en utilisant la structure CASE OF dans la déclaration de l'enregistrement.

 
Sélectionnez
TYPE
  statut = (celibataire,marie,divorce,veuf);
  perso = RECORD
            nom : string[20];
   	    CASE situation : statut OF
   	      celibataire : ();
   	      marie : (enfants : 0..10);
	      divorce, veuf : (enfants : 0..10; remarie : boolean)
	  END;

Il ne peut y avoir qu'unCASE par enregistrement. Celui-ci doit se placer en dernier, après les champs communs (si il y en a). Mais dans ce CASE on peut avoir un autre CASE imbriqué (et ainsi de suite).

Les cas où il n'y a pas de champ variant doivent être précisés (ici celibataire). Le champ discriminant (situation) s'utilise comme un autre champ commun.
R Exemples d'instructions possibles (x déclaré comme perso) :

 
Sélectionnez
x.situation := marie;
if x.situation = veuf then
   writeln(x.enfants)

Exercicetel :
A l'aide d'un tableau de personnes (nom, prénom, numéro dans la rue, rue, département, ville, numéro de téléphone), faire un programme de recherche automatique de toutes les informations sur les personnes répondant à une valeur d'une rubrique donnée (tous les PATRICK , tous ceux de Saverne, etc...).
Voir la correction


précédentsommairesuivant

Utilisation de ce document libre pour tout usage personnel. Utilisation autorisée pour tout usage public non commercial, à condition de citer son auteur (Patrick Trau, IPST, Université Louis Pasteur Strasbourg) et de me signaler tout usage intensif. Utilisation commerciale interdite sans accord écrit de ma part.