Salut,
J'essaye de coder une procedure qui trie un fichier d'enregistrements.
Voilà la déclaration de l'enregistrement et des variables :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
const nomFichier = 'etudiants.dat';
      nomFichierCopy = 'copieEtudiants.dat';
 
type 
  etudiantRec = record
		  numOrdre : byte;
		  NCIN : string[8];
		  nomPrenom : string[50];
		  classe : string[50];
		  telephone : string[20];
		  email : string[30];
		end;
  fichierEtudiantsFile = file of etudiantRec;
 
var
   fichierEtudiants , copyFichierEtudiants : fichierEtudiantsFile;
   etudiants : etudiantRec;
Voilà la procédure de tri par séléction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
procedure triSelection(var fichier : fichierEtudiantsFile);
var
    etud1 , etud2 , etud3  : etudiantRec;
    position,courant,posMax: Integer;
    fin: Integer;
begin
    {Ouvre le fichier en lecture}
    reset(fichier);
 
    {pointe sur le dernier enregistrement}
    fin := filesize(fichier)-1;
 
    {parcour le fichier enregistrement par enregistrement}
    for position := fin downto 1 do
    begin
	{cherche la position du max}
	posMax := position;
	for courant := 0 to position-1 do
	begin
	    seek(fichier,posMax);
	    read(fichier,etud1);
	    seek(fichier,courant);
	    read(fichier,etud2);
	    if (etud2.nomPrenom > etud1.nomPrenom) then posMax := courant;
	end;
	{fin cherche la position du max}
 
	{permuter l'enregistrement d'indice posMax avec l'enregistrement d'indice position}
	seek(fichier,position);
	read(fichier,etud3);
	write(fichier,etud1);
	seek(fichier,posMax);
	write(fichier,etud3);
      end;
end;
Elle ne donne pas le résultat voulu.