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