next up previous
Next: Quelques applications Up: Les types de données Previous: Un type tableau particulier

Le type enregistrement ou RECORD

  Une façon d'obtenir un type structuré est de rassembler en une seule variable des éléments différents. Par exemple un nombre complexe représente sa partie réelle et sa partie imaginaire. Une date, c'est trois informations, à savoir le jour, le mois et l'année.

Un est une structure qui consiste en un nombre fixe de composants appelés champs. Ces composants (à la différence des tableaux) n'ont pas besoin d'être du même type, il faudra donc pour chaque composante définir son identificateur et son type.

 :

type enr=record S1 : T1;
                S2 : T2;
                Sn : Tn; 
         end;

program P;

type complexe = record reelle : real;
                       imaginaire : real;
                end;

var z : complexe;

function modu(z:complexe):real;
   begin
       modu:=sqrt(sqr(z.reelle)+sqr(z.imaginaire));
   end;

procedure saisie(var z : complexe);
   begin
       writeln('entrez la partie reelle');
       readln(z.reelle);
       writeln('entrez la partie imaginaire');
       readln(z.imaginaire);
   end;

begin
    saisie(z);
    writeln('Le module du nombre complexe entre est ',modu(z));
end.
(Remarque : la déclaration du type complexe pouvait aussi s'écrire:
type complexe = record reelle, imaginaire : real; end;)
Un des champs du record peut lui-même être un objet de type record.
program E;

type etudiant = record
                     nom, section : string;
                     moyenne : real;
                     date : record
                                  jour : 1..31;
                                  mois : 1..12;
                                  annee : integer;
                            end;
                 end;

var etud : etudiant;

procedure entree(var e : etudiant);
begin
    writeln('entrez le nom de l etudiant');
    readln(e.nom);
    writeln('entrez sa section');
    readln(e.section);
    writeln('sa moyenne');
    readln(e.moyenne);
    writeln('sa date de naissance->');
    writeln('   jour');
    readln(e.date.jour);
    writeln('   mois');
    readln(e.date.mois);
    writeln('   annee');
    readln(e.date.annee);
end;

procedure affiche(e : etudiant);
begin
    writeln(e.nom);
    writeln(e.section);
    writeln('Ne le ',e.date.jour, e.date.mois, e.date.annee);
end;

begin
    entree(etud);
    affiche(etud);
end.

On peut combiner enregistrements et tableaux.

program promo;

const n=120;

type etudiant=record
                    nom, section:string;
                    moyenne : real;
                    date : record
                               jour : 1..31;
                               mois : 1..12;
                               annee: integer;
                    end;
              end;

type Filiere=array[1..n] of etudiant;

var MIASMASS2 : Filiere;
    etud : etudiant;

procedure entree(var e : etudiant);
begin
    writeln('entrez le nom de l''''etudiant');
    readln(e.nom);
    writeln('entrez sa section');
    readln(e.section);
    writeln('sa moyenne');
    readln(e.moyenne);
    writeln('sa date de naissance->');
    writeln('   jour?');
    readln(e.date.jour);
    writeln('   mois');
    readln(e.date.mois);
    writeln('   annee');
    readln(e.date.annee);
end;

procedure saisie(var T : Filiere);
var i : integer;
begin
     for i:=1 to n do
            entree(T[i]);
end;

procedure plusjeune(T:Filiere; var E:etudiant);
var i : integer;

begin
    E :=T[1];
    for i:=2 to n do
        if T[i].date.annee>E.date.annee then E:=T[i]
        else if T[i].date.annee=E.date.annee then
                if T[i].date.mois>E.date.mois then E:=T[i]
                else if T[i].date.mois=E.date.mois then
                        if T[i].date.jour>E.date.jour then E:=T[i];

end;

procedure affiche(e : etudiant);
begin
    writeln(e.nom);
    writeln(e.section);
    writeln('Ne le ',e.date.jour, ', ', e.date.mois, ', ', e.date.annee);
end;


begin
     saisie(MIASMASS2);
     plusjeune(MIASMASS2, etud);
     affiche(etud);
end.



Frederic Mesnard
mardi, 15 décembre 1998, 16:13:24 GMT+4