Fusion deux tableau

Fermé
nabil-bago Messages postés 255 Date d'inscription mercredi 22 mai 2013 Statut Membre Dernière intervention 24 novembre 2021 - 25 avril 2017 à 04:15
tarek_dotzero Messages postés 817 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 12 avril 2022 - 4 mai 2017 à 01:49
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
A voir également:

3 réponses

Profil bloqué
25 avril 2017 à 15:03
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
nabil-bago Messages postés 255 Date d'inscription mercredi 22 mai 2013 Statut Membre Dernière intervention 24 novembre 2021 13
25 avril 2017 à 15:07
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
Profil bloqué
25 avril 2017 à 21:23
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
tarek_dotzero Messages postés 817 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 12 avril 2022 121
Modifié le 4 mai 2017 à 01:51
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