Exercice suivant

Chaînes

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.

Solution

Exercice suivant

Site Hosting: Bronco