Le tri
Program
Tri_selection;
const
Nmax = 20;
Type
Tableau = Array[1..Nmax] of Real;
Var
A : Tableau;
max : Real;
imax, k, i ,N:
integer;
Begin
{Lire les donnees}
Repeat
Write('Entrez
le nombre des elements: ');
Readln(N);
Until (N > 0) And (N <=
Nmax);
Writeln('Entrez ', N, ' nombres reeles:');
For i := 1 To N Do Read(A[i]);
Readln;
{Tri}
For k := N Downto 2 Do
Begin
{Trouver le maximum des premiers k elements}
max := A[1]; imax := 1;
for i := 2 To k Do
If max < A[i] Then
Begin
max := A[i]; imax := i;
End;
if imax <> k Then
Begin
A[imax] :=
A[k]; A[k] := max;
End;
End;
{affichage}
Write ('Apres
le tri');
For i := 1 To N Do Write(A[i]:8:2);
Writeln;
End.
Program Tri_boule;
const
Nmax = 20;
Type
Tableau = Array[1..Nmax] of Real;
Var
A : Tableau;
tr : Real;
i ,N: integer;
echangee : Boolean;
Begin
{Lire les donnees}
Repeat
Write('Entrez le nombre des
elements:');
Readln(N);
Until (N
> 0) And (N <= Nmax);
Writeln('Entrez ', N, ' nombres
reeles:');
For i := 1 To N Do Read(A[i]);
Readln;
{Tri}
Repeat
echangee := False;
for
i := 1 To N-1 Do
If A[i+1] < A[i] Then
Begin
tr := A[i]; A[i] := A[i+1];
A[i+1] := tr; echangee := True;
End;
Until
not echangee;
{affichage}
Write ('Apres le tri');
For
i := 1 To N Do Write(A[i]:8:2);
Writeln;
End.
Program Tri_insertion;
const
Nmax = 20;
Type
Tableau = Array[1..Nmax] of Real;
Var
A : Tableau;
tr : Real;
k, i ,N: integer;
Begin
{Lire les donnees}
Repeat
Write ('Entrez le nombre des elements: ');
Readln(N);
Until (N
> 0) And (N <= Nmax);
Writeln
('Entrez ', N, ' nombres reeles:');
For i := 1 To N Do Read(A[i]);
Readln;
{Tri}
For
k := 2 To N Do
Begin
tr := A[k]; i := k-1;
While
(i >= 1) And (tr < A[i]) do
Begin
A[i+1] := A[i]; i:= i-1;
End;
A[i+1] := tr; {Inserer}
End;
{affichage}
For i := 1 To N Do Write(A[i]:8:2);
Writeln;
End.
Exercises:
1. Ecrivez un programme qui trie une
suite des nombres en ordre décroissant.
2. Triez tous les lignes ou les
colonnes d’une matrice (on peut considérer les lignes de la matrice
comme des éléments et chacun d’eux doit être triée - traitement).
3. Triez une suite des nombres entiers
en un ordre particulier (tous les nombres impairs doivent être
placés avant les nombres pairs).
Program Moyennes;
MAXGROUP = 40;
MAXNOTES = 5;
Type
sexe = (MASCULIN,FEMININ);
datetype = Record
jour : 1..31;
mois : 1..12;
annee : integer
End;
etudiant = Record
numero : integer;
nom : string[30];
sex : sexe;
date : datetype;
notes : Array[1..MAXNOTES] Of
integer
End;
groupe =
Array[1..MAXGROUP] Of etudiant;
Var
Tabet: groupe;
moyennes : array [1..MAXGROUP] Of real;
i,j,sex,s,N, imax: integer;
maxm : real;
temp : etudiant;
Begin
Repeat
Write('Entrer N; ');Readln(N);
Until
(N>0) And (N<=40);
For
i:= 1 To N Do
Begin
Writeln('Entrez les donnees pour
etudiant ' ,i);
Readln(Tabet[i].nom);
Readln(Tabet[i].numero,sex,
Tabet[i].date.jour, Tabet[i].date.mois, Tabet[i].date.annee);
If
sex =0 Then Tabet[i].sex := MASCULIN
Else Tabet[i].sex := FEMININ;
For j := 1 To MAXNOTES
Do
Read(Tabet[i].notes[j]);
End;
For
i := 1 To N Do
With
tabet[i], tabet[i].date Do
Begin
writeln (numero : 5, ' ',nom:30,
ord(sex):2,jour:2,mois:2,annee:5);
End;
For
i := 1 To N Do
Begin
s := 0;
For j := 1 To MAXNOTES Do
s:= s+Tabet[i].notes[j];
Moyennes[i] :=s/MAXNOTES;
End;
{Tri}
For
j:=N Downto 2 Do
Begin
maxm := moyennes[1];
imax := 1;
For
i := 2 To j Do
If
moyennes[i] < maxm Then
Begin
maxm
:= moyennes[i];
imax := i;
End;
temp := tabet[imax];
moyennes[imax] := moyennes[j]; tabet[imax] := tabet[j];
moyennes[j] := maxm; tabet[j] := temp;
End;
For
i := 1 To N Do
With
tabet[i] Do
Begin
writeln (numero : 5, ' ',nom:30,
moyennes[i]:6:2);
End;
End.