Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Delphi / Kylix / Turbo Pascal » array merge in Pascal

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
19.03.2018, 20:26 Uhr
Bizepsbenny



Hallo zusammen,

ich habe eine Aufgabe, bei der zwei sortierte arrays mit unterschiedlicher Größe zu einem array verschmelzen sollen. Ich habe für den Verschmelzungsprozess eine for-Schleife benutzt, danach will ich mithilfe einer while-Schleife die Elemente des noch nicht abgearbeiteten Feldes einfügen. Klappt aber nicht so, wie ich mir das vorstelle

Hat jemand eine Idee?

Danke im voraus.

Gruß
BB


Code:
program merge (input, output);
{ liest ohne Eingabeueberpruefung zwei sortierte Felder mit
  integer-Zahlen ein; beide Felder werden in einem weiteren Feld
  sortiert zusammengefuegt; das Ergebnis wird ausgegeben; ist
  die Eingabe unsortiert, so ist das Ergebnisfeld undefiniert }
  const
  FELDLAENGE1 = 5;
  FELDLAENGE2 = 8;
  ERGEBNISFELDLAENGE = 13; { FELDLAENGE1 + FELDLAENGE2 }
        
  type
  tFeld1 = array [1..FELDLAENGE1] of integer;
  tFeld2 = array [1..FELDLAENGE2] of integer;
  tErgebnisFeld = array [1..ERGEBNISFELDLAENGE] of integer;

  var
  Feld1 : tFeld1;
  Feld2 : tFeld2;
  ErgebnisFeld : tErgebnisFeld;
  i : integer;
  j : integer;
  k : integer;
begin
  { sortierte Felder einlesen }
  writeln ('Bitte', FELDLAENGE1:2, ' Werte des ersten Feldes ',
                                         'sortiert eingeben!');
  for i := 1 to FELDLAENGE1 do
    readln (Feld1[i]);
  writeln ('Bitte', FELDLAENGE2:2, ' Werte des zweiten Feldes ',
           'sortiert eingeben!');
  for j := 1 to FELDLAENGE2 do
    readln (Feld2[j]);

  { Verschmelzungsprozess beginnen }
  i := 1; { Variablen zurücksetzen }
  j := 1;
  
  for k := 1 to ERGEBNISFELDLAENGE do
  begin
    if Feld1[i] < Feld2[j] then
    begin
      ErgebnisFeld[k] := Feld1[i];
      i := i + 1;
    end
    else
    begin
      ErgebnisFeld[k] := Feld2[j];
      j := j + 1;
    end;
  end; { for-Schleife }
  
  { restliche Elemente des noch nicht komplett abgearbeiteten
    Feldes hinter dem Maximum der zuletzt verglichenen
    Werte anhaengen.  }
  while j <= FELDLAENGE2 do
  begin
    ErgebnisFeld[k] := Feld2[j];
    j := j + 1;
    k := k + 1;
  end;
  while i <= FELDLAENGE1 do
  begin
    ErgebnisFeld[k] := Feld1[i];
    i := i + 1;
    k := k + 1;
  end;
  
  { Ausgabe Ergebnisfeld }
  writeln ('Das Ergebnisfeld ist:');
  for k := 1 to ERGEBNISFELDLAENGE do
    write (ErgebnisFeld[k], ' ');
  writeln
end.


Dieser Post wurde am 19.03.2018 um 20:28 Uhr von Bizepsbenny editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.03.2018, 15:51 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Was genau klappt denn nicht? Beim ersten überfliegen sieht es gut aus
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
20.03.2018, 15:58 Uhr
Bizepsbenny



@FloSoft

Die Feldelemente des übrigen Feldes, werden nicht in das Ergebnisfeld kopiert.

Grüße
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Delphi / Kylix / Turbo Pascal ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: