Tri matrice

Fermé
laminho - 29 janv. 2008 à 20:14
 koukou - 6 mars 2012 à 00:45
Bonjour,
SVP m'aider à trouver une solution pour trier une matrice en pascal(tri par sélection),
J'ai essayé avec ce programme pascal mais il une petite erreu que j'ai pas compris
(lors de l'exécution la matrice n'est pas totalement triée)

voila le programme en pascal
PROGRAM tri_par_selection;
Uses wincrt;
type
mat = array[1..100 , 1..100] of integer;
var
n, i, j : integer;
procedure saisir(var x: integer);
begin
writeln('donner le nb de colonnes et de lignes ');
readln(x);
end;
procedure remplir(var m: mat ; n: integer);
begin
for i := 1 to n do
begin
for j:= 1 to n do
begin
writeln('donner mat[' , i, ' ' , j, '] ');
readln(m[i,j]);
end;
end;
end;

function posmin ( m:mat; n, i,j: integer; var poslign, poscol : integer);
var k : integer;
begin
petit_ligne := i;
petit_clon:= j
for k := i+ 1 to n do
for p ;= i + 1 to n do
if (t[petit]> t[j]) then petit := j;
posmin := petit;
end;

procedure permuter( var a, b: integer);
var sauv : integer;
begin
sauv := a;
a :=b;
b := sauv;
end;

procedure tri_select(var t: tab; n: integer);
var
pm: integer;
begin
for i:= 1 to n-1 do
begin
posmin ( t, n, i,j , poslign, poscol);

permuter(mat[i,j] , mat[poslign, poscol]);

end;


PROCEDURE AFFICHE (T : Tab ; n : integer) ;
BEGIN
For i := 1 To n Do WriteLN (TI]);
END;

BEGIN
saisir(n);
remplir(t,n);
TRI_SELECT(T, n) ;
AFFICHE (T, n) ;
END.

2 réponses

je m' appelle xXx voila la repence de votre probleme:

program trimatrice;
uses wincrt;
type
tab=array [1..10,1..10] of integer;
var
t:tab;
n:integer;

procedure saisie(var t:tab;var n:integer);
var i,j:integer;
begin

repeat
writeln('donner ta taille');
readln(n);
until (n>=2) ;

for i:=1 to n do
for j:=1 to n do
begin
writeln('donner t[',i,',',j,']=');
readln(t[i,j]);
end;
end;

procedure tri(var t:tab;n:integer);
var i,j,c,l:integer;

procedure posmin(t:tab;n,i,j:integer;var l,c:integer);
var ligne,col:integer;
begin
l:=i;c:=j;
for ligne:=i to n do
begin
for col:=j+1 to n do

if (t[ligne,col]<t[l,c])then
begin
l:=ligne;
c:=col;
end;
j:=0;
end;
end;


procedure permut(var x,y:integer);
var aux:integer;
begin
aux:=x;
x:=y;
y:=aux;
end;

begin
for i:=1 to n do
for j:=1 to n do
begin
posmin(t,n,i,j,l,c);

if (i<>l)or (j<>c) then
permut(t[i,j],t[l,c]);
end;
end;

procedure affichage(t:tab;n:integer);
var i,j:integer;
begin
for i:=1 to n do
begin
for j:= 1 to n do

write(t[i,j]:4);
writeln;
end;
end;

begin
saisie(t,n);
tri(t,n);
affichage(t,n);
end.
5
bounjour, merci pour ce tri mais es-ce qu'il est tri par insertion?
0
SVP, le tri par insertion d'une matrice d'entiers!! urgeeeeeeeent!!
0
michelhoude Messages postés 45 Date d'inscription samedi 10 mars 2007 Statut Membre Dernière intervention 10 février 2010 11
30 janv. 2008 à 01:25
Bonjour, je pense qu'il y a erreur dans le code
La FONCTION
function posmin ( m:mat; n, i,j: integer; var poslign, poscol : integer); DEVRAIT AVOIR UN TYPE
Par exemple
Ça pourrait être function posmin ( m:mat; n, i,j: integer; var poslign, poscol : integer):integer;

Les variables petit_ligne , petit_clon ne sont pas déclarées

Sans être un spécialiste de turbo Pascal, bien que j'ai fait beaucoup de d'appliation, J'ai essayé le code dans l'environnement de turbo pascal 5.5

Il y a des erreurs lors de la compilation
La variable m:mat déclarée dans les paramètres de la fonction n'est pas utilisé dans la fonction

j'ai essayé tant bien que mal à répondre à votre question

Je peux regarder dans mes archives quelques Algorithm de tri

Cordialement
Michel Houde
0