Question posée au contrôle continu du 11 mai 2000
Complétez ce programme pour que toutes les fonctions fassent ce qui est dit dans les commentaires:
program chaines; type { un pointeur sur des elements d'une chaine. } PElement = ^TElement; { un element d'une chaine: } TElement = record {chaque element de la chaine contient un entier} mContenu : integer; { mSuivant: pointeur sur l'element suivant de la chaine, nil pour le dernier element } mSuivant : PElement; end; var gChaineDOrigine : PElement; gChaineResultat : PElement; { VOUS ETES AUTORISES A AJOUTER QUELQUES FONCTIONS ICI (Si vous voulez. Ce n'est pas forcement necessaire, mais ca peut ameliorer la lisibilite de votre solution). DES VARIABLES SUPPLEMENTAIRES NE SONT PAS AUTORISEES. } { La fonction suivante prend la chaine inChaine et retourne une nouvelle chaine, qui contient les memes valeurs que inChaine, mais en ordre inverse: Si inChaine est (1 2 3) le resultat va etre la chaine (3 2 1). AUCUNE VALEUR QUI APPARTIENT A INCHAINE NE DOIT ETRE MODIFIEE } function creeChaineInversee(inChaine:PElement):PElement; { VOUS ETES AUTORISES A METTRE DES VARIABLES ICI. LES TABLEAUX SONT INTERDITS!!!! } begin { VOTRE SOLUTION ICI Mon conseil: Copier la liste d'entree, en ajoutant les nouveaux elements AU DEBUT de la nouvelle liste } end; { creeChaineInversee } begin { VOUS N'ETES PAS AUTORISE A AJOUTER QUOI QUE CE SOIT ICI } new(gChaineDOrigine); gChaineDOrigine^.mContenu:=2; new(gChaineDOrigine^.mSuivant); gChaineDOrigine^.mSuivant^.mContenu:=4; new(gChaineDOrigine^.mSuivant^.mSuivant); gChaineDOrigine^.mSuivant^.mSuivant^.mContenu:=6; gChaineDOrigine^.mSuivant^.mSuivant^.mSuivant:=nil; gChaineResultat:=creeChaineInversee(gChaineDOrigine); writeln('Si toutes ces expressions sont correctes, il est', 'probable que le programme est lui aussi correct'); write('6 = ');writeln(gChaineResultat^.mContenu); write('4 = ');writeln(gChaineResultat^.mSuivant^.mContenu); write('2 = '); writeln(gChaineResultat^.mSuivant^.mSuivant^.mContenu); end.
Site Hosting: Bronco