[faire un tri en pascal]

bakato -  
 KJL -
salut je suis etudiant en programmation a bangui en rca je dois ecrire un programme qui gere une liste d 'etudiants avec leur moyennes et leur classement par ordre de merite et d'afficher les notes.mon probleme et que je n arive pas a effectuer le tri et ca bloque mon travail pour finaliser le programme.si je peux avoir des tuyaux, des idees ou des conseils a serait bien.merci d'avance.

ps:ce nest pas de la paresse mais un proverbe de chez nous dit'' ce qui est dur pour une main ,plusieurs mains peuvent le faire facilement''

11 réponses

  1. soltann Messages postés 1 Statut Membre 13
     
    voilà le tri shell en Pascal

    program tri_par_shell;
    uses wincrt;
    const nmax = 50;
    type tab = array[1..nmax] of integer;
    var
    ti : tab;
    i, j, n, x, k,aux :integer;
    function lecture : integer;
    var
     n: integer;
     begin
      repeat
    writeln('donner un entier positif entre 1 et ',nmax);
    read(n);
    until(n in [1..nmax]);
     lecture :=n;
    end;
    procedure remplir(var t : tab; a : integer);
    var
     i : integer;
     begin
        writeln('remplissage de tableau');
      for i:=1 to a do
       read(t[i]);
     end;
    procedure permut(a,b: integer);
    var
    aux : integer;
    begin
     aux:=a;
     a:= b;
     b :=aux;
    end;
      procedure Tri_Shell(n : integer ; var t : tab);
    var
      p, k, i, j : integer;
    begin
      (* Recherche du Gap optimal qui est le résultat de *)
      (* la suite récurrente : Un = 3.Un-1 + 1           *)
      (* Tel que Un < n (Nombre d'éléments du tableau)   *)
      p := 0;
      while (p < n) do p := 3 * p + 1;
     
      while (p <> 0) do
      begin
        (* On affine peu à peu le Gap            *)
        (* Gap = 1 ==> Tri par Insertion ordinaire *)
        p := p div 3;
        for i := p to n do
        begin
          k := t[i]; (* Valeur à insérer *)
     
          (* Recherche de la position d'insertion *)
          j:= i;
          while (j > p - 1) and (t[j - p] > k) do
          begin
            t[j] := t[j - p];
            j := j - p;
          end;
     
          (* Insertion de la valeur à son emplacement *)
          t[j] := k;
        end;
      end;
    end;
    
    procedure affiche (t: tab; a:integer);
        var
         i : integer;
      begin
         for i:=1 to n do
           writeln(t[i]);
      end; 
    begin
      n :=lecture;
     remplir(Ti,n);
      tri_shell(n,ti);
    
     writeln(' affichage');
      affiche(Ti,n);
    end.
    14
    1. moi mm
       
      é pk la fonction permut?
      0
    2. KJL
       
      merci
      0
  2. Ahmed002007 Messages postés 2 Statut Membre 6
     
    program tri_selection_recursive;
    uses wincrt;
    const Nmax=100;
    type
         tab=array[1..Nmax]of integer;
    var
         n,c:integer;
         t:tab;
    (*******************************************************)
    procedure saisie(var n:integer;var t:tab);
    var i:byte;
    begin
     write('donner la taille du tableau:');read(n);
     for i:=1 to n do
      begin
       writeln('saisir la case N°:',i);readln(t[i]);
      end;
    end;
    (******************************************************)
    function posmin(n,c:integer;t:tab):integer;
    var i:byte;
        min:integer;
    begin
    min:=c; 
      for i:=c+1 to n do
       begin
         if t[i]<t[min] then
          begin
           min:=i;
          end;
       end;       
    posmin:=min;
    end;
    (*****************************************************)
    procedure permut(var x,y:integer);
    var tmp:integer;
    begin
     tmp:=x;
     x:=y;
     y:=tmp;
    end;
    (*****************************************************)
    procedure tri(n:integer;var t:tab);
    var i:byte;
        min:integer;
    begin
     for i:=1 to n-1 do
      
       min:=posmin(n,c,t);
        if t[i]<>t[min] then
             permut(t[i],t[min]);
       
    end;
    (****************************************************)
    procedure affiche(n:integer;t:tab);
    var i:byte;
    begin
    writeln('tapez une touche pour trier');
    readln;
      for i:=1 to n do
       begin
       write(t[i]:3)          
       end;
    end;
    (***************************************************)
    
    
    begin
    saisie(n,t);
    tri(n,t);
    affiche(n,t);
    end.

    {j'ai un probleme est ce que vous pouvez me donner une solution }
    6
  3. ftouh
     
    program tri_selection_recursive;
    uses wincrt;
    const Nmax=100;
    type
    tab=array[1..Nmax]of integer;
    var
    n,c:integer;
    t:tab;
    (*******************************************************)
    procedure saisie(var n:integer;var t:tab);
    var i:byte;
    begin
    write('donner la taille du tableau:');read(n);
    for i:=1 to n do
    begin
    writeln('saisir la case N°:',i);readln(t[i]);
    end;
    end;
    (******************************************************)
    function posmin(n,c:integer;t:tab):integer;
    var i:byte;
    min:integer;
    begin
    min:=c;
    for i:=c+1 to n do
    begin
    if t[i]<t[min] then
    begin
    min:=i;
    end;
    end;
    posmin:=min;
    end;
    (*****************************************************)
    procedure permut(var x,y:integer);
    var tmp:integer;
    begin
    tmp:=x;
    x:=y;
    y:=tmp;
    end;
    (*****************************************************)
    procedure tri(n:integer;var t:tab);
    var i:byte;
    min:integer;
    begin
    for i:=1 to n-1 do
    begin
    min:=posmin(n,i,t);
    if (i<>min) then
    permut(t[i],t[min]);
    end;
    
    end;
    (****************************************************)
    procedure affiche(n:integer;t:tab);
    var i:byte;
    begin
    writeln('tapez une touche pour trier');
    readln;
    for i:=1 to n do
    begin
    write(t[i]:5)
    end;
    end;
    (***************************************************)
    
    
    begin
    saisie(n,t);
    tri(n,t);
    affiche(n,t);
    end.

    { voilà votre code de tri par sélection}
    6
  4. ftouh
     
    salut
    voilà le programme de tri par insertion sur un tableau d'entier

    program tri_par_insertion;
    uses wincrt;
    const nmax = 50;
    type tab = array[1..nmax] of integer;
    var
    ti : tab;
    i, j, n, x, k,aux :integer;
    function lecture : integer;
    var
     n: integer;
     begin
      repeat
    writeln('donner un entier positif entre 1 et ',nmax);
    read(n);
    until(n in [1..nmax]);
     lecture :=n;
    end;
    procedure remplir(var t : tab; a : integer);
    var
     i : integer;
     begin
        writeln('remplissage de tableau');
      for i:=1 to a do
       read(t[i]);
     end;
    procedure permut(a,b: integer);
    var
    aux : integer;
    begin
     aux:=a;
     a:= b;
     b :=aux;
    end;
      procedure Tri_insertion(n : integer ; var t : tab);
    var
       k, i, j : integer;
    begin
      for i := 1 to n do
        begin
          k := t[i]; (* Valeur à insérer *)
     
          (* Recherche de la position d'insertion *)
          j:= i;
          while (j > 0) and (t[j - 1] > k) do
          begin
            t[j] := t[j - 1];
            j := j - 1;
          end;
     
          (* Insertion de la valeur à son emplacement *)
          t[j] := k;
        end;
      end;
    
    procedure affiche (t: tab; a:integer);
        var
         i : integer;
      begin
         for i:=1 to n do
           writeln(t[i]);
      end; 
    begin
      n :=lecture;
     remplir(Ti,n);
      tri_insertion(n,ti);
    
     writeln(' affichage');
      affiche(Ti,n);
    end.
    4
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    Il ya 25000 sortes de tri à ta disposition : tri a bulles, tri fusion, tri par insertion, quick sort... Certains sont plus faciles à implémenter, et leur complexité n'est pas la même.

    En cherchant ces mots clés sur google je suis sûr que tu vas pouvoir faire ton choix et trouver des pseudos codes à convertir en pascal, car les algos de tri sont des grand classiques dans les cours d'algoithmique.

    Bonne chance.
    2
  7. metzio
     
    tu pe le chercher dans le site du tri
    2
  8. ta9tou9a Messages postés 5 Statut Membre 2
     
    salut, j'ai un probleme dans l'execusion de ce programme :
    prb en prog

    program moyenne; 
    uses wincrt; 
    const k=31; 
    type tab1 = array [5..k] of real; 
    
    procedure saisie(var n: real;var t: tab1); 
    var 
    i: integer; 
    
    begin 
    repeat 
    write('donner la taille du tableau =' );readln(n); 
    until (n in [5..31]); 
    for i:=1 to n do 
    begin 
    write('donner t[ ', i,']:'); readln(t[i]); 
    end; 
    end; 
    
    procedure tri(n:real; var t:tab1); 
    procedure permut(var x,y: real); 
    var 
    a: real; 
    begin 
    x:=a; 
    a:=y; 
    y:=x; 
    end; 
    
    var 
    t: tab; 
    j: integer; 
    echange: boolean; 
    begin 
    repeat echange:= false; 
    for j:=1 to n do 
    begin 
    if t[j]>t[j+1] then permut(); 
    echange:= true; 
    end; 
    n:=n-1; until (n=1) or (non(echange)); 
    end; 
    
    procedure taux(var m: integer; t:tab1; a: real ); 
    var 
    m: inetger; 
    i: integer; 
    begin 
    m:=0; 
    for i:=1 to n do 
    if (t[i]>=10) then m:=m+1; 
    a:=((m/n)*100); 
    write('le taux de reussite est ',a,'%'); 
    end; 
    var 
    n: real; 
    t: tab1; 
    
    
    begin 
    saisie(n,t); 
    tri(n,t); 
    write('la moyenne la plus elevee est ',t[n]); 
    taux(var m: integer; t:tab1; a: real) 
    end.

    , s'il vous plait quel est le probleme ?
    2
    1. nasnous_pascal
       
      slt le prob est dans le programme principal; il n'y a pas une procedure qui se met avec la declaration de variables dans le programme principal. bye
      0
  9. marwa
     
    un algoritme de trie par insertion
    1
    1. ahmed.scof Messages postés 4 Statut Membre
       
      voici le trie par insertion récursive:
      -------------------------------------------------------------------------

      program inser_rec;
      uses wincrt;
      type
           tab=array[1..40]of integer;
      var
         n,i,d,f:integer;
         t:tab;
      (*****************************************************)
      procedure saisie(var n:integer;var t:tab);
      var i:byte;
      begin
       writeln('donner la taille du tableau');readln(n);
      for i:=1 to n do
       begin
        write('saisir la case N°',i,'= ');readln(t[i]);
       end;
      end;
      (****************************************************)
      procedure decaler(var t:tab;d:integer);
      var int:integer;
      begin
      int:=t[d];
      while (int<t[d-1]) and (d>1) do
       begin
        t[d]:=t[d-1];
        d:=d-1;
       end;
      t[d]:=int;
      end;   
      (***************************************************)
      procedure insertion(var t:tab;f,d:integer);
      begin
      if d<=f then
       begin
        if t[d]<t[d-1] then
         begin
          decaler(t,d);
         end;  
      insertion(t,f,d+1);
      end;
      end;
      (**************************************************)
      begin
      writeln('-----tri insertion récurssive-----');
      readln;
      saisie(n,t);
      d:=2;f:=n;
      insertion(t,f,d);
      writeln('---------voila-------------');
      for i:=1 to n do
      write(t[i]:3);
      end.
      0
  10. marouki
     
    svp je veux obtenir l'algorithme de tri shell en turbo pascal d'un tableux quel conque

    ****************************ET MERCI D'AVANCE *******************
    1
    1. ahmed.scof Messages postés 4 Statut Membre
       
      program tri_shell;
      uses wincrt;
      type tab=array[1..40]of integer;
      var t:tab;
        n,i:integer;
      (*********************************************************)
      procedure saisie(var t:tab;var n:integer);
      var i:integer;
      begin
      writeln('donner la taille du tableau');readln(n);
      for i:=1 to n do
       begin
        write('saisir la case N°',i,'= ');readln(t[i]);
       end;
       end;
      (*******************************************************)
      procedure shell(var t:tab;n:integer);
      var i,p,j,tmp:integer;
      begin
      p:=0;
      while p<=n  do
      begin
        p:=3*p+1;
      end;
      while p<>0 do
      begin
      p:=p div 3;
      for i:=(p+1) to n do
      begin
      tmp:=t[i];
      j:=i;
      while (t[j-p]>tmp) and (j>p) do
      begin
      t[j]:=t[j-p];
      j:=j-p
      end;
      t[j]:=tmp;
      end;
      end;
      end;
      (****************************************************)
      begin
      saisie(t,n);
      shell(t,n);
      for i:=1 to n do
      write(t[i]:3);
      end.
      0
  11. zz
     
    Ma question est la suivante :

    Classer automatiquement une liste de n entiers par ordre croissant puis décroissant.(en PASCAL)

    Merci.
    1
  12. diouffy
     
    je voudrai un programme en pascal de tri rapide recursives utilisant les pointeurs
    0
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      Le tri le plus rapide (à ma connaissance) est le tri par fusion, il est récursif (voir Tri Fusion).
      Mais connaissant assez bien cette méthode de tri, je vois mal comment l'adapter à des pointeurs...
      0