,fonction tri fusion en delphi svp !

[Fermé]
Signaler
Messages postés
10
Date d'inscription
mardi 6 janvier 2009
Statut
Membre
Dernière intervention
8 janvier 2010
-
Messages postés
10
Date d'inscription
mardi 6 janvier 2009
Statut
Membre
Dernière intervention
8 janvier 2010
-
Bonjour,
svp j'aurais besoin de la fonction qui réalise le tri fusion en version recursive et cela avec ( delphi 7 version entreprise) si possible c'est tres tres urgent de plus etant debutant je suis dans l'incapacité de le faire,,svp , pouvez vs m'aider merci d'avancee

13 réponses

Messages postés
16392
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
6 septembre 2021
2 876
À quelques différences près, le Delphi c'est du langage Pascal...
Va donc voir ici
Messages postés
10
Date d'inscription
mardi 6 janvier 2009
Statut
Membre
Dernière intervention
8 janvier 2010
1
bonjour ,, merci pour la procedure mais ce n'est pas ce que je recherche exactement ,ce que moi je veux c'est convertir cette procedure qui est en langage pascal vers delphi car je ne suis que debutante en delphi je ne le maitrise pas bien du tout et vs avez sans doute remarquez qu'il y"avait des choses qu'il faut ajouter a cette procedure pour pouvoir l'executer en delphi car j'ai deja introduit cettte derniere en pascal et impossible de l'executer en delphi ,,donc svp si possible de me la donner directement en delphi ,,,merci d'avance et j'éspére avoir été claire
Messages postés
16392
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
6 septembre 2021
2 876
Voici les déclarations à faire au début du code (ce ne sont que des exemples à adapter)
Const Nmin = 1;  // par exemple
      Nmax = 30; // par exemple
Type Element = string; // par exemple
     TAB = array[Nmin..Nmax] of Element;
Et voici la façon d'appeler la procédure de tri dans le programme principal :
Tri_Fusion(t,Nmin,Nmax);
Messages postés
10
Date d'inscription
mardi 6 janvier 2009
Statut
Membre
Dernière intervention
8 janvier 2010
1
Const Nmin = 1;
Nmax = 30;
Type Element = string;
TAB = array[Nmin..Nmax] of Element;

procedure TriFusion (var a:tab; g, d: integer);
var i, j, k, m: integer;
begin


if g < d then
begin

m := (g + d) div 2;


TriFusion (a,g, m);
TriFusion (a,m + 1, d);


for i := m downto g do
b[i] := a[i];


for j := m+1 to d do
b[d+m+1-j] := a[j];

i := g;
j := d;

for k := g to d do

if b[i] < b[j] then
begin

a[k] := b[i];
i := i + 1
end
else
begin

a[k] := b[j];
j := j - 1
end;
end;
end; ( est ce que c'est de cette façon que je doit definir la procedure de plus je crois qu'en delphi il faut faire une certaine instruction celle de " strtoint " et aussi "edit.text " et " cells ." ou dois je les placer ? svp?
Messages postés
16392
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
6 septembre 2021
2 876
Tous dépend de la finalité du programme... C'est pour faire quoi exactement ?

Normalement, il n'y a pas à modifier le code de la procédure Tri_Fusion pour la faire marcher (sauf si on ne veut pas faire de tri sur un array mais sur un fichier par exemple)

De plus ces instuctions " strtoint " et aussi "edit.text " et " cells ." je ne m'en sert que pour des opérations biens spécifiques qui n'ont a-priori rien à voir avec la fonction de tri par fusion...
Messages postés
10
Date d'inscription
mardi 6 janvier 2009
Statut
Membre
Dernière intervention
8 janvier 2010
1
justement ce sont ces opérations qui pausent probléme car je ne sais pas exactemnt comment ni méme quand les utilisés dans la procedure ,,juste une remarque ( c'est le tri d'un vecteur array et non pas un fichier ) je suis vraiment désolée de vous avoir deranger autant , !!!!!! (^-^) ,,,!!! merci encore de m'aider c'est tres gentil de votre part,
Messages postés
16392
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
6 septembre 2021
2 876
En fait ça dépend comment tu utilises Delphi, si tu l'utilises en mode console tu n'auras pas besoin de ce genre de fonctionnalités, ton code se limitera donc à ceci :
program TriFus;

{$APPTYPE CONSOLE}

Const Nmin = 1;  // par exemple
      Nmax = 30; // par exemple

Type Element = string; // par exemple
     TAB = array[Nmin..Nmax] of Element;

Procedure Tri_Fusion (Var t : TAB; g, d : integer);
Var
   m, i, j, k : integer;
   s : TAB;
Begin
     If d > g Then
     Begin
          m := (g + d) Div 2;
          Tri_Fusion (t, g, m);
          Tri_Fusion (t, m + 1, d);
          
	    For i := m DownTo g Do
              s[i] := t[i];

	    For j := m + 1 To d Do
              s[d + m + 1 - j] := t[j];
          
	    i := g; j := d;
          For k := g To d Do
          Begin
               If s[i] < s[j] Then
               Begin
                    t[k] := s[i];
                    i := i + 1;
               End
               Else
                   Begin
                         t[k] := s[j];
                         j := j - 1;
                   End;
          End;
     End;
End;

Procedure Remplir (Var t : TAB);
Var
   i : integer;
Begin
     For i := Nmin to Nmax Do
     Begin
          write('Element ',i,' : ');
          readln(t[i]);
     End
End;

Procedure Afficher (Var t : TAB);
Var
   i : integer;
Begin
     For i := Nmin to Nmax Do
     Begin
          write('Element ',i,' : ');
          writeln(t[i]);
     End
End;

Var
   t : TAB;
Begin
     Remplir (t);
     Tri_Fusion (t, Nmin, Nmax);
     Afficher (t);
End.
Messages postés
10
Date d'inscription
mardi 6 janvier 2009
Statut
Membre
Dernière intervention
8 janvier 2010
1
je vais essayer d'etre un peu plus claire cette fois si ,,je veux réaliser une application qui me permet de trier un vecteur par la methode de fusion et pour cela il me faut creer deux vecteur et 1 bouton pour cette application ,,,donc une fois crée je le séléctionnerai et je ferai un double clique sur ce bouton tout de suite apres une procedure s'afficheautomatiquement elle est directement relié a ce bouton , et donc moi je devrai la remplire en introduisant la procédure que vous m'avez presentez tout a l'heure , mais etant donné qu'elle n'est pas compléte en pascal il faut rajouter les opérations dont je vs ai parlé pour qu'elle séexcute normalent,voila :!!!!!!!!
Messages postés
10
Date d'inscription
mardi 6 janvier 2009
Statut
Membre
Dernière intervention
8 janvier 2010
1
j'ai oublié de signaler aussi que c'est la version entreprise delphi 7( 2002) ,,,,a ma connaissance elle est utilsée pour créer des applications,
Messages postés
16392
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
6 septembre 2021
2 876
Moi j'ai Delphi 6 mais ça devrait pas changer grand chose...

Alors pour faire ça bien, j'aimerais juste comprendre pourquoi utiliser deux vecteurs ? Est-ce que le deuxième vecteur est une copie trié du premier ?
Et ce que tu appelles vecteur, c'est un objet (un bouton sur ta fenêtre) ou juste un array que tu manipules dans différentes procédures ?

Mais normalement, si je devais essayer de le faire, sans connaître les réponses aux questions que je viens de poser, on devrait avoir quelquechose comme cecii :
procedure TForm1.Button1Click(Sender: TObject);
begin
     Tri_Fusion (t, Nmin, Nmax);
end;
Messages postés
10
Date d'inscription
mardi 6 janvier 2009
Statut
Membre
Dernière intervention
8 janvier 2010
1
ah voila je vois que vous commencez a bien comprendre ,,,donc le deuxieme tableau sert seulement a afficher le resultat cad le tableau etant trié ,,,,et pour la procédure c'est exactement ce je cherchais a vous faire comprendre ça s'affiche exactement de cette maniére cad :
procedure TForm1.Button1Click(Sender: TObject);
begin
Tri_Fusion (t, Nmin, Nmax);
end;
donc maitenant que dois je introduire de plus pour qu'elle soit fonctionnelle et que je puisse realiser l'application ??????
Messages postés
16392
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
6 septembre 2021
2 876
Soit T1 ton vecteur de départ, et T2 ton vecteur d'arrivée ton code sera donc :
program TriFus;

{$APPTYPE CONSOLE}

Const Nmin = 1;  // par exemple
      Nmax = 30; // par exemple

Type Element = string; // par exemple
     TAB = array[Nmin..Nmax] of Element;

Procedure Tri_Fusion (Var t : TAB; g, d : integer);
Var
   m, i, j, k : integer;
   s : TAB;
Begin
     If d > g Then
     Begin
          m := (g + d) Div 2;
          Tri_Fusion (t, g, m);
          Tri_Fusion (t, m + 1, d);
          
	    For i := m DownTo g Do
              s[i] := t[i];

	    For j := m + 1 To d Do
              s[d + m + 1 - j] := t[j];
          
	    i := g; j := d;
          For k := g To d Do
          Begin
               If s[i] < s[j] Then
               Begin
                    t[k] := s[i];
                    i := i + 1;
               End
               Else
                   Begin
                         t[k] := s[j];
                         j := j - 1;
                   End;
          End;
     End;
End;

Var
   T1,T2 : TAB;

procedure TForm1.Button1Click(Sender: TObject);
begin
     T2:=T1; // Copie de T1  dans T2
     Tri_Fusion (T2, Nmin, Nmax); // On tri T2, T1 n'est pas modifié
end;
Mais pour que le programme soit réellement fonctionnel, il faut dans un premier temps créer une procédure qui créé le tableau T1 en lui attribuant des valeurs, et une autre d'affichage pour voir le tableau T2 quand il est trié...
Messages postés
10
Date d'inscription
mardi 6 janvier 2009
Statut
Membre
Dernière intervention
8 janvier 2010
1
bonjourrr!!!!!!! merci inffiniment KX ,,,vous m'avez été d'une grande aide je vous en remércie ,,,il me reste maintenant qu'a essayer cette procédure et voir de ce qu'il en est ,,,,j'éspére qu'il n'y aura pas de probléme cette fois ci ,,merci encore,,,!!
Messages postés
10
Date d'inscription
mardi 6 janvier 2009
Statut
Membre
Dernière intervention
8 janvier 2010
1
au fait pour inserer des valeur dans le tableau je n'ai pas besoin d"une procédure car je peux directement le faire par le biais d'une instruction qui est deja definie sur delphi,!voila,,,il ne me reste plus qu'a me mettre au boulot ,,,goooooo!