[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''
A voir également:

11 réponses

soltann Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   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
moi mm
 
é pk la fonction permut?
0
KJL
 
merci
0
Ahmed002007 Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   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
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mamiemando Messages postés 33777 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
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
metzio
 
tu pe le chercher dans le site du tri
2
ta9tou9a Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   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
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
marwa
 
un algoritme de trie par insertion
1
ahmed.scof Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
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
marouki
 
svp je veux obtenir l'algorithme de tri shell en turbo pascal d'un tableux quel conque

****************************ET MERCI D'AVANCE *******************
1
ahmed.scof Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
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
zz
 
Ma question est la suivante :

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

Merci.
1
diouffy
 
je voudrai un programme en pascal de tri rapide recursives utilisant les pointeurs
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention  
 
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