Fusion deux tableau

nabil-bago Messages postés 289 Statut Membre -  
tarek_dotzero Messages postés 834 Statut Membre -
Bonjour,
je doit faire un exercice et j'ai besoin d'aide
ecrire un programe pascal qui fusionne deux tableau (t,w) en un seul tableau (v) est éliminé les doublons
voila le code que j'ai ecris
program Project2;


   {$APPTYPE CONSOLE}
uses
  SysUtils;

var
  t:array[0..25] of integer;
  w : array [0..16] of integer;
  tw : array [0..41] of integer;
  v  : array of integer;
  i,j,dt,dw,a,exist: integer;
begin
writeln('entrer la longueur de tableau T');
read(Dt);

for i := 1 to dt
do
read(t[i]);
    writeln('entrer la longueur de tableau W');
readln(Dw);
for i := 1 to dw
do
read(w[i]);
for i := 1 to dt
do
tw[i]:= t[i] ;
for i:= dt+1 to dt+dw
do
tw[i] := w[i-dt];


for i := 1 to dt+dw
  do
    begin
    a:=tw[i];
       for j:= 1 to dt+dw
         do
          begin
           if a = v[j]
            then
            exist:=1
             else
              exist:=0;
          end;
       if exist = 0
          then
          v[i]:=a;
       end;
writeln('le tableau fusionné est:');
for i := 1 to dt+dw
do
write (',',w[i]) ;

readln;readln;

end.



Merci pour votre aide

3 réponses

  1. Profil bloqué
     
    On peut aussi puiser dans l'artifice des tableau dynamiques .

    program Project1;

    {$APPTYPE CONSOLE}

    {$R *.res}

    uses
    System.SysUtils;

    type Source = array of Integer;

    procedure Definir_Source(var S : Source);
    var Ta : Integer;
    Ok : Char;
    begin
    Ok := 'o';
    Ta := 0;
    while Ok = 'o' do begin
    Ta := Ta + 1;
    SetLength(S, Ta);
    Write('Saisir un nombre entier : ');
    ReadLn(S[Ta - 1]);
    Write('Continuez ?. o = oui / n = non : ');
    ReadLn(Ok);
    end;
    end;

    var Sa, Sb, Sd : Source;
    I, J, Taille_Sd, K : integer;
    Existe : Boolean;

    begin

    WriteLn('----- Tableau source A -----');
    Definir_Source(Sa);

    Taille_Sd := High(Sa) + 1; {Chargement du tableau 1
    dans le tableau de fusion}
    SetLength(Sd, Taille_Sd);
    for I := 0 to High(Sd) do begin
    Sd[I] := Sa[I];
    end;

    Sa := nil; {Désallocation du 1er tableau, sinon
    erreur de redéfinition passée par reference}

    WriteLn;
    WriteLn('----------------');
    WriteLn;

    WriteLn('----- Tableau source B -----');
    Definir_Source(Sb);

    I := 0; {Suppression des doublons}
    K := High(Sd);
    while I <= High(Sb) do begin
    Existe := False;
    J := 0;
    while (J <= K) and not Existe do begin
    Existe := Sb[I] = Sd[J] = True;
    J := J + 1;
    end;
    if not Existe then begin
    Taille_Sd := Taille_Sd + 1;
    SetLength(Sd, Taille_Sd);
    Sd[Taille_Sd - 1] := Sb[I];
    end;
    I := I + 1;
    end;

    WriteLn;
    WriteLn('----- Fusion des deux tableaux -----');
    WriteLn;

    for I := 0 to High(Sd) do begin
    Write(Sd[I]:6); end;

    ReadLn;
    end.
    1
  2. nabil-bago Messages postés 289 Statut Membre 13
     
    merci beaucoup metarefsalem pour votre réponse.
    c'est un exercice a faire mais on es pas encore arrivé comment utiliser les procédure et fonction.
    je suis encore débutant je m'excuse.
    y aura t-il un moyen de le faire sans procédure ?
    Merci
    0
    1. Profil bloqué
       
      Sur ton profil tu renseignes que tu maitrises Delphi XE 7 ?. la procédure ne fait que remplir les deux tableaux sources, la supprimer et inclure son corps dans le bloc principal ne nécessite que quelques modifications minimes .
      0
  3. tarek_dotzero Messages postés 834 Statut Membre 122
     
    Bonjour,

    Enlevez les lignes 44 et 45

    S'il existe alors c'est bon, la valeur de la variable existe est mise à 1 et doit rester 1.

    Vous avez encore des problèmes dans les limites des boucles :

    j doit aller de 1 à i, pas la fin du tableau parceque le troisième tableau n'est pas encore rempli.

    C'est ce que je vois parce que vous n'avez pas pu comprendre le code de metarefsalem.
    0