,fonction tri fusion en delphi svp !

Fermé
kawani Messages postés 10 Date d'inscription mardi 6 janvier 2009 Statut Membre Dernière intervention 8 janvier 2010 - 6 janv. 2009 à 18:43
kawani Messages postés 10 Date d'inscription mardi 6 janvier 2009 Statut Membre Dernière intervention 8 janvier 2010 - 8 janv. 2009 à 12:06
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
A voir également:

13 réponses

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
6 janv. 2009 à 22:49
À quelques différences près, le Delphi c'est du langage Pascal...
Va donc voir ici
0
kawani Messages postés 10 Date d'inscription mardi 6 janvier 2009 Statut Membre Dernière intervention 8 janvier 2010 1
7 janv. 2009 à 13:51
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
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
7 janv. 2009 à 14:24
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);
0
kawani Messages postés 10 Date d'inscription mardi 6 janvier 2009 Statut Membre Dernière intervention 8 janvier 2010 1
7 janv. 2009 à 16:22
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?
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
7 janv. 2009 à 16:31
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...
0

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

Posez votre question
kawani Messages postés 10 Date d'inscription mardi 6 janvier 2009 Statut Membre Dernière intervention 8 janvier 2010 1
7 janv. 2009 à 18:08
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,
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
7 janv. 2009 à 18:25
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.
0
kawani Messages postés 10 Date d'inscription mardi 6 janvier 2009 Statut Membre Dernière intervention 8 janvier 2010 1
7 janv. 2009 à 19:30
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 :!!!!!!!!
0
kawani Messages postés 10 Date d'inscription mardi 6 janvier 2009 Statut Membre Dernière intervention 8 janvier 2010 1
7 janv. 2009 à 19:39
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,
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
7 janv. 2009 à 19:46
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;
0
kawani Messages postés 10 Date d'inscription mardi 6 janvier 2009 Statut Membre Dernière intervention 8 janvier 2010 1
7 janv. 2009 à 20:52
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 ??????
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
7 janv. 2009 à 21:27
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é...
0
kawani Messages postés 10 Date d'inscription mardi 6 janvier 2009 Statut Membre Dernière intervention 8 janvier 2010 1
8 janv. 2009 à 11:32
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,,,!!
0
kawani Messages postés 10 Date d'inscription mardi 6 janvier 2009 Statut Membre Dernière intervention 8 janvier 2010 1
8 janv. 2009 à 12:06
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!
0