program td8;
const
nom = 'data_td8'; {
nom du fichier de stockage ! }
max = 30; {
C'est le nombre maximum d'etudiants que peut memoriser le
tableau ! }
long = 20; {
C'est la longueur maximum des noms et prenoms des etudiants
! }
type
etudiant = record
nom: string[long];
prenom: string[long];
age: 1..120;
end;
tab = record
t: array[1..max] of etudiant;
dim: integer;
end;
type_fich = file of etudiant;
procedure ecrire (a: tab; n: string);
{ copie un
tableau dans un fichier }
var
i: integer;
e: etudiant;
f: type_fich;
begin
reset(f, n);
rewrite(f); {
Sur PC, faire: assign(f, nom); reset(f); }
for i := 1 to a.dim do
write(f, a.t[i]);
close(f);
end; { Fin de
'ecrire' }
procedure permut (var a: tab; i, j: integer);
{ TD7 modifier
}
var
aux: etudiant;
begin
aux := a.t[i];
a.t[i] := a.t[j];
a.t[j] := aux;
end; { Fin de
'permut' }
function indicemin_tab (a: tab; d, f: integer):
integer; { TD7
modifier }
var
i, min: integer;
begin
min := d;
for i := d to f do
if a.t[min].nom > a.t[i].nom then
min := i;
indicemin_tab := min;
end; { Fin de
'indicemin_tab' }
procedure Tri_tab (var a: tab; i, d: integer);
{ TD7 modifier
}
begin
permut(a, i, indicemin_tab(a, i, d));
if i < d then
Tri_tab(a, i + 1, d);
end; { Fin de
'Tri_tab' }
procedure saisie (var e: etudiant);
{ Saisir un
etudiant: nom,prenom,age }
begin
writeln('Saisie d''un etudiant:');
write('Nom: ');
readln(e.nom);
write('Prenom: ');
readln(e.prenom);
write('Age: ');
readln(e.age);
end; { Fin de
'saisie' }
procedure ajout_fin (n: string); {
question 2 }
var
a: tab;
e: etudiant;
f: type_fich;
begin
a.dim := 0;
reset(f, n);{
Sur PC, faire: assign(f, nom); reset(f); }
while not eof(f) do
{ memorisation
du fichier dans le tableau }
begin
read(f, e);
a.dim := a.dim + 1;
a.t[a.dim] := e;
end;
close(f);
saisie(e);
a.dim := a.dim + 1;
a.t[a.dim] := e; {
Ajout d'un etudiant a la fin du tableau }
ecrire(a, n);
{ copie du
tableau dans le fichier }
end; {
Fin de 'ajout_fin' note: Y'a surement plus simple sur PC,
mais sur Mac c'est different et cela serait incompatible
avec les PC. }
procedure parcours (n: string); {
question 3 }
var
e: etudiant;
f: type_fich;
begin
reset(f, n); {
Sur PC, faire: assign(f, nom); reset(f); }
while not eof(f) do
begin
read(f, e);
writeln('Nom: ', e.nom : long, ' Prenom: ', e.prenom : long,
' Age: ', e.age : 3);
end;
close(f);
end; { Fin de
'parcours' }
procedure affiche_etudiant (n: string);
{ question 4
}
var
e: etudiant;
ch: string[long];
test: boolean;
f: type_fich;
begin
writeln('Entrez le nom à afficher:');
readln(ch);
reset(f, n); {
Sur PC, faire: assign(f, nom); reset(f); }
test := false;
while not eof(f) do
begin
read(f, e);
if e.nom = ch then
begin
writeln('Nom: ', e.nom : long, ' Prenom: ', e.prenom : long,
' Age: ', e.age : 3);
test := true;
end;
end;
if not test then
writeln('Le nom ', ch : long, ' n''a pas ete trouve dans le
fichier !');
close(f);
end; { Fin de
'affiche_etudiant' }
procedure trier (n: string); {
question 5 }
var
e: etudiant;
a: tab;
f: type_fich;
begin
a.dim := 0;
reset(f, n); {
Sur PC, faire: assign(f, nom); reset(f); }
while not eof(f) do
{ msemorisation
du fichier dans le tableau }
begin
read(f, e);
a.dim := a.dim + 1;
a.t[a.dim] := e;
end;
close(f);
if a.dim > 1 then {
On verifie que le tableau doit etre trier :-) }
begin
Tri_tab(a, 1, a.dim);
{ pour trier le tableau }
{ on memorise le tableau dans le fichier }
ecrire(a, n);
end;
end; { Fin de
'trier' }
function recher (u, v: integer; a: tab; n: string):
integer;
var
i: integer;
begin
i := 0;
repeat
i := i + 1;
until (a.t[i].nom >= n) or (a.dim = i);
if a.t[i].nom >= n then
recher := i
else
recher := a.dim + 1;
{ On auait aussi
pu utiliser la fonction dichotomie du TP precedent ! }
end; {
fin de 'recher' }
procedure inserer (n: string); {
question 6 }
var
a: tab;
e: etudiant;
f: type_fich;
j, i: integer;
begin
a.dim := 0;
reset(f, n);{
Sur PC, faire: assign(f, nom); reset(f); }
while not eof(f) do
{ memorisation
du fichier dans le tableau }
begin
read(f, e);
a.dim := a.dim + 1;
a.t[a.dim] := e;
end;
close(f);
writeln('Ajouter un etudiant');
saisie(e);
i := recher(1, a.dim, a, e.nom);
writeln(i);
a.dim := a.dim + 1;
for j := a.dim downto i do
a.t[j] := a.t[j - 1];
a.t[i] := e; {
Ajout d'un etudiant a la fin du tableau }
ecrire(a, n); { copie du tableau
dans le fichier }
end; { Fin de
'inserer' }
procedure supprimer (n: string); {
question 7 }
var
a: tab;
d: etudiant;
e: string[long];
f: type_fich;
j, i: integer;
begin
a.dim := 0;
reset(f, n); {
Sur PC, faire: assign(f, nom); reset(f);
}
while not eof(f) do {
memorisation du fichier dans le tableau }
begin
read(f, d);
a.dim := a.dim + 1;
a.t[a.dim] := d;
end;
close(f);
writeln('Supprimer un etudiant, donner le nom est:');
readln(e);
i := recher(1, a.dim, a, e);
if i <= a.dim then
begin
for j := i to a.dim - 1 do
a.t[j] := a.t[j + 1];
a.dim := a.dim - 1;
ecrire(a, n); {
copie du tableau dans le fichier }
end
else
writeln('Le nom ', e, ' n a pas ete trouve !');
end; { Fin de
'supprimer' }
begin
writeln(' TD8 www.Software-DS.com');
writeln;
ajout_fin(nom);
ajout_fin(nom);
ajout_fin(nom);
ajout_fin(nom);
trier(nom);
parcours(nom);
inserer(nom);
parcours(nom);
supprimer(nom);
parcours(nom);
writeln;
writeln('©2001 All Rights Reserved to
www.Software-DS.com');
{ ©2001 All
Rights Reserved to http://www.Software-DS.com
27/11/01 }
end.
|