Accueil     Soft. MacOSX     Soft. MacOS/PC     PHP     Python     ROMS GBA     TP d'info     DBZ-GT     Martingales     Galeries     Liens     @  

Exercice du TD8

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.





Haut de la page - Page précédente - Page générée en 0.00218 sec.
Recherche personnalisée
 

1843937 visiteurs.   ©2001-2023 All Rights Reserved to Software-DS.com
Made with a mac  
Confidentialité