Le tri

1. Trier N nombres réels par sélection.


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.


 

2. Tri par “la boule” ou par transpositions


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.


 

 

 

3.Tri par insertion


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).

4. Enregistrements : Entrer les données d’un groupe d’étudiants et les trier  selon leur moyennes.


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.