Exercice suivant

Listes

Question posée à l'examen du 3 juillet 2000

program SchemeList;
{
 une structure qui peut contenir soit une valeur, soit une paire
}
type PSchemePaireOuValeur = ^TSchemePaireOuValeur;
     TSchemePaireOuValeur = record
        { le record contient-il une valeur }
        mEstValeur:boolean;

{si ce record est une valeur}
mValeur : integer;

{si ce record est une paire}
{ car de la paire}
mCar : PSchemePaireOuValeur;
{ cdr de la paire }
mCdr : PSchemePaireOuValeur; end; { TSchemePaireOuValeur } var gSchemePaire: PSchemePaireOuValeur; { Une fonction qui cree une valeur } function creeValeur(inValeur : integer): PSchemePaireOuValeur; var lResultat : PSchemePaireOuValeur; begin new(lResultat); lResultat^.mEstValeur:=true; lResultat^.mValeur:=inValeur; lResultat^.mCar:=nil; lResultat^.mCdr:=nil; creeValeur:=lResultat; end; { creeValeur } { Une fonction qui cree une paire } function creePaire(inCar,inCdr: PSchemePaireOuValeur):PSchemePaireOuValeur; var lResultat : PSchemePaireOuValeur; begin new(lResultat); lResultat^.mEstValeur:=false; lResultat^.mValeur:=0; lResultat^.mCar:=inCar; lResultat^.mCdr:=inCdr; creePaire:=lResultat; end; { creePaire } { Une procedure pour afficher } procedure display(inPaire : PSchemePaireOuValeur); {vous etes autorise(es) de mettre des variables ici} begin {Mettez votre code ici. Les commentaires du programme principal vous indiquent ce que la procedure Display est censee imprimer} end; begin gSchemePaire:=creePaire(creeValeur(1), creePaire(creeValeur(2), creePaire(creeValeur(3),nil))); display(nil) {donne "()"}; writeln; display(gSchemePaire); {donne "(1 . (2 . (3 . ())))"} gSchemePaire:=creePaire(creePaire(creeValeur(1), creeValeur(2)), creePaire(creeValeur(3), creeValeur(4))); writeln; display(gSchemePaire); {donne "((1.2).(3.4))"} end.

Solution

Exercice suivant

Site Hosting: Bronco