IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Pascal Discussion :

Tri par fusion


Sujet :

Pascal

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations forums :
    Inscription : Janvier 2010
    Messages : 30
    Points : 46
    Points
    46
    Par défaut Tri par fusion
    salut,
    Pouvez vous s'il vous plaît me corriger ce programme qui fait le tri par fusion?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    program maximumum;
    uses wincrt;
    const
        bi=1;
        bs=20;
    type
         tab=array[1..10]of integer;
    var
       n:integer;
       t:tab;
       t1,t2:tab;
       n1,n2:integer;
     
    procedure saisi_n(var n:integer);
    begin
         repeat
    	writeln('donner des nombres');
    	readln(n);
         until n>=0
    end;
     
    procedure remp_tab (var t:tab ; l: byte ) ;
           const
    	    msg=' entrez l element du tbleau n°';
    	var  i: byte ;
           begin
    	    for i := 1  to n do
    	       begin
    		     write (msg,i,' : ') ;
    		     readln (t[i]) ;
    		end;
           end;
     
     
    procedure eclater(t:tab;n:integer;t1,t2:tab;n1,n2:integer);
        var
           j,i:integer;
        begin
        j:=1;
        for i:=1 to n do
          begin
    	  if i<=1 then
    	   begin
    	     t1[i]:=t[i];
    	    end
    	     else t2[i]:=t[i];
    	       j:=j+1;
    	   end;
           end;
     
     
    procedure fusion(t1:tab;n1:integer;t2:tab;n2:integer;var t:tab);
    var
      c,i,c1,c2:integer;
    begin
    repeat
      begin
       c:=c+1;
        if (t1[c1]<t2[c2])then
          begin
          t[c]:=t1[c1];
          c1:=c1+1;
          end
         else
           begin
           t[c]:=t2[c2];
           c2:=c2+1;
           end
         end;
         until (c1>n1)or(c2>n2);
       if(c1>n1)then
           begin
    	   for i:=c2 to n2 do
    	       begin
    		    c:=c+1;
    		    t[c]:=t2[i];
    	       end;
           end
        else
     
           for i:=c1 to n1 do
    	  begin
    	       c:=c+1;
    	       t[c]:=t1[i];
    	  end;
    end;
    procedure aff_tab ( t: tab ; n :byte ) ;
    	var  i:integer ;
    	   begin
    		for i :=1 to n do
    		    begin
    			 write (t[i]:6) ;
    		    end;
    		writeln;
    	   end;
    begin
    saisi_n(n);
    remp_tab(t,n);
    fusion(t1,n1,t2,n2,t);
    aff_tab(t,n);
    end.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations forums :
    Inscription : Janvier 2010
    Messages : 30
    Points : 46
    Points
    46
    Par défaut
    salut,
    comment je fais un tri par fusion pour un tableau ???(procédure ou fonction)??

    c'est la procedure de tri fusion en recursif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    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;

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations forums :
    Inscription : Janvier 2010
    Messages : 30
    Points : 46
    Points
    46
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    procedure fusion(t1,t2:tab;n1,n2:integer;var t:tab;n:integer);
    var
      i:integer
     
    begin
         repeat
    	c:=c1+1;
    	if t1[c1]<t2[c2]then
    	   begin
    	      t[c]:=t1[c1];
    	      c1:=c1+1;
    	   end
    	  else
    	  begin
    	  t[c]:=t2[c2];
    	  c2:=c2+1;
    	  end;
         until(c1>n1)or(c2>n2)
         if c1>n1 then
           begin
    	 for i:=c2 to n2 do
    	   begin
    	     c:=c+1;
    	     t[c]:=t2[i];
    	   end;
           end
          else
    	begin
    	   for i:=c1 to n1 do
    	     begin
    	      c:=c+1;
    	      t[c]:=t1[i];
    	     end;
    	 end;
    end;

  4. #4
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    salut.
    ton programme principal doit être de cette forme :

    remplir(T1,n1)
    remplir (t2,n2)

    fusionner(t1,n1,t2,n2,t)
    afficher(t,n1+n2)


    donc tu dois remplir deux tableau T1 et T2 ,trier ces deux tableau après fusionner ces deux tableau pour obtenir le tableau T de taille n1+n2

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations forums :
    Inscription : Janvier 2010
    Messages : 30
    Points : 46
    Points
    46
    Par défaut
    salut tout monde,
    merci pour cette correction de mon programme.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tri par fusion
    Par meoliver dans le forum Pascal
    Réponses: 8
    Dernier message: 06/02/2011, 13h09
  2. Tri par fusion
    Par marsilla02 dans le forum Pascal
    Réponses: 2
    Dernier message: 06/02/2008, 19h38
  3. Réponses: 9
    Dernier message: 12/09/2007, 12h56
  4. Tri par fusion
    Par ousunas dans le forum Langage
    Réponses: 3
    Dernier message: 25/02/2006, 02h52
  5. Tri par fusion d'un tableau
    Par Mailgifson dans le forum C
    Réponses: 5
    Dernier message: 12/12/2002, 14h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo