program exercice_TD9;
const
nom = 'data_ex9';
type
liste = ^maillon;
type_elts = integer;
maillon = record
suivant: liste;
val: type_elts;
end;
type_fich = file of type_elts;
var
l: liste;
i: type_elts;
f: type_fich;
c: char;
function tirage (min, max: integer): integer;
{ Mac
}
begin
tirage := min + Abs(Random) mod (max - min + 1);
end; { Fin de
'tirage' }
procedure creat_fichier (var f: type_fich);
{ Question C
}
var
i: integer;
begin
for i := 1 to 10 do
write(f, tirage(0, 10));
close(f);
end; { Fin de
'creat_fichier' }
procedure init_liste (var l: liste);
begin
l := nil;
end; { Fin de
'init' }
function vide_liste (l: liste): boolean;
begin
vide_liste := (l = nil); { renvoie true si la liste est vide
}
end; { Fin de
'vide_liste' }
procedure insere_tete_liste (elt: type_elts; var l:
liste);
var
p: liste;{
cliquer sur les pubs ! }
begin
p := l;
new(l);
l^.val := elt;
l^.suivant := p;
end; { Fin de
'insere_tete_liste' }
procedure parcours_liste (l: liste);
begin
if not vide_liste(l) then
begin
parcours_liste(l^.suivant);
writeln(l^.val : 3);
end;
end; { Fin de
'parcours_liste' }
procedure super_tete (var l: liste);
var
p: liste;
begin
if l = nil then
writeln('Votre liste est vide, impossible de supprimer la
tete')
else { cliquer
sur les pubs ! }
begin
p := l;
l := l^.suivant;
dispose(p);
end;
end; { Fin de
'super_tete' }
procedure supprime_liste (var l: liste);
begin
if l^.suivant = nil then {
On doit donc remonter jusqu'au premier }
begin
supprime_liste(l^.suivant);
dispose(l);{
cliquer sur les pubs ! }
end;
end; { Fin de
'supprime_liste' }
function longueur_liste (l: liste): integer;
{ non-demander
pour le TP9 }
begin {
On considere la liste non-nulle }
if vide_liste(l) then
longueur_liste := 0
else
begin
if l <> nil then
begin
if l = nil then
longueur_liste := 0
else
longueur_liste := 1 + longueur_liste(l^.suivant);
end;
end;
end; { Fin de
'longueur_liste' }
function
dernier_liste (l: liste): liste; { non-demander }
begin
if vide_liste(l) then
dernier_liste := nil
else
begin
if l^.suivant <> nil then
dernier_liste := dernier_liste(l^.suivant)
else
dernier_liste := l;
end;
end; { Fin de
'dernier_liste' }
procedure inser_classe_elt_liste (i: type_elts; var
l: liste);
var
p, r: liste;
begin
if vide_liste(l) then
begin
insere_tete_liste(i, l);
end
else if (l^.val > i) then
inser_classe_elt_liste(i, l^.suivant)
else
begin
new(p);
p^.val := l^.val;
l^.val := i;
p^.suivant := l^.suivant;
l^.suivant := p;
end;
end; { Fin de
'inser_classe_elt_liste' }
procedure supper_elt_liste (i: type_elts; var l:
liste);
var
p, q: liste;
begin
if vide_liste(l) then
begin
writeln('Votre liste est vide.');
readln; { pause
}
end
else if (l^.val > i) then {
Rappel: la liste est triee }
begin
if l^.suivant <> nil then
supper_elt_liste(i, l^.suivant)
else { cliquer
sur les pubs ! }
writeln('La valeur ', i : 2, ' n''est pas dans la
liste');
end
else if (l^.val = i) then
begin
p := l^.suivant;
q := l;
l := p;
p := q;
dispose(p);
end;
end; { Fin de
'supper_elt_liste' }
function trouve_elt_liste (l: liste; i: type_elts):
liste;
begin
if not vide_liste(l) then
if l^.val = i then
trouve_elt_liste := l
else
trouve_elt_liste := trouve_elt_liste(l^.suivant, i)
else
trouve_elt_liste := nil;
end; { Fin de
'trouve_elt_liste' }
function trouve_pos_elt_liste (l: liste; i:
type_elts): integer;
begin
if (vide_liste(l^.suivant)) or (l^.val = i) then
begin
if l^.val = i then
trouve_pos_elt_liste := 1
end { cliquer
sur les pubs ! }
else
trouve_pos_elt_liste := 1 + trouve_pos_elt_liste(l^.suivant,
i);
end; { Fin de
'trouve_pos_elt_liste' }
procedure creat_liste_fichier (var f: type_fich; var
l: liste); {
question D }
{ var f:
type_fich ici, le var est obligatoire sur Mac !
}
var
e: type_elts;
begin
while not eof(f) do
begin
read(f, e);
insere_tete_liste(e, l);
end;
close(f);
end; { Fin de
'creat_liste_fichier' }
procedure creat_liste_tri_fichier (var f: type_fich;
var lt: liste); {
question E }
{ var f:
type_fich ici, le var est obligatoire sur Mac !
}
var
e: type_elts;
begin
while not eof(f) do
begin
read(f, e);
if vide_liste(l) then
insere_tete_liste(e, lt)
else
inser_classe_elt_liste(e, lt);
end;
close(f);
end; { Fin de
'creat_liste_tri_fichier' }
begin
writeln('TD9 http://www.Software-DS.com');
{ cliquer sur
les pubs ! }
init_liste(l);
repeat
writeln('Veuillez saisir votre commande:');
writeln;
writeln(' a : créé un fichier avec des valeurs
aleatoires');
writeln(' b : parcours_liste');
writeln(' c : creat_liste_tri_fichier');
writeln(' d : deletion');
writeln(' i : insertion');
writeln(' s : sortie');
readln(c);
case c of
'a':
begin
reset(f, nom);
rewrite(f); { Sur PC, faire: assign(f, nom); reset(f); }
creat_fichier(f);
end;
'b': { Affichage
}
begin
parcours_liste(l);
end;
'c':
begin
reset(f, nom); { Sur PC, faire: assign(f, nom); reset(f);
}
creat_liste_tri_fichier(f, l);
parcours_liste(l);
end;
'd': { Deletion
}
begin
writeln('Quelle valeur voulez-vous retirer');
readln(i);
supper_elt_liste(i, l);
parcours_liste(l);
end;
'i': { Insertion
}
begin
writeln('Indiquez la valeur a insere:');
readln(i);
inser_classe_elt_liste(i, l);
parcours_liste(l);
end;
's':
writeln('Au revoir...');
end;
until c = 's';
supprime_liste(l);
writeln;
writeln('©2001 All Rights Reserved to
Software-DS.com');
{ ©2001 All
Rights Reserved to http://www.Software-DS.com
04/12/01 }
end.
|