In der zweiten praktischen Aufgabe der Einsendaufgabe 2 soll das Programm „merge“ geschrieben werden, welches zwei aufsteigend sortierte Felder von nicht unbedingt unterschiedlichen integer-Zahlen zu einem sortierten Feld zusammenfasst und ausgibt. Die Größe der beiden Zahlenfolgen ist außerdem bereits begrenzt. Mehrfach vorhandene Zahlen sollen auch im Ergebis doppelt vorkommen. Die beiden Felder werden nacheinenander mit „readln“ eingelesen, wobei das Programm davon ausgehen soll, dass bereits sortierte Zahlenfolgen eingegeben werden.
Das Beispiel der Aufgabenstellung:
Feld1: 11, 14, 18, 80, 100
Feld2: 8, 11, 11, 17, 22, 30, 55, 70
Ausgabe-Feld nach Programmdurchlauf: 8, 11, 11, 11, 14, 17, 18, 22, 30, 55, 70, 80, 100
Es soll bei der Lösung kein Sortier-Algorithmus entwickelt werden, sondern die bestehende Sortierung der vorhandenen Felder genutzt werden. Ansonsten wäre die Aufgabe einfacher zu lösen gewesen, denn dann hätte man einfach beide Felder in eins zusammenfassen und dann erst sortieren können. Durch die Einschränkung muss am Ende der Rest des Feldes, welches eventuell noch Werte enthält, an das neu erstellte Feld einfach nur moch angehangen werden.
Für diese Aufgabe war der Großteil des Programms bereits in der Aufgabenstellung vorgegeben (Programmkopf, Variablen und Konstanten, die Ausgabe, etc.), sodass man nur noch die Ermittlung der Ergebniszeile bzw. das Mergen der Felder selber umsetzen muss. Den Anfang und das Ende meiner Lösung habe ich in meinem Code angegeben:
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 |
program merge (input, output); { liest ohne Eingabeueberpruefung zwei sortierte Felder mit integer-Zahlen ein; beide Felder werden in Feld sortiert zusammengefuegt; das Ergebnis wird ausgegeben; ist die Eingabe unsortiert, so ist das Ergebnisfeld nicht sortiert } const GRENZE1 = 5; GRENZE2 = 8; GRENZE = 13; { GRENZE1 + GRENZE2 } GRENZE1PLUS1 = 6; GRENZE2PLUS1 = 9; GRENZEPLUS1 = 14; type tIndex1 = 1..GRENZE1; tIndex2 = 1..GRENZE2; tIndex = 1..GRENZE; tIndex1Plus1 = 1..GRENZE1PLUS1; tIndex2Plus1 = 1..GRENZE2PLUS1; tIndexPlus1 = 1..GRENZEPLUS1; tFeld1 = array [tIndex1] of integer; tFeld2 = array [tIndex2] of integer; tFeld = array [tIndex] of integer; var Feld1 : tFeld1; Feld2 : tFeld2; Feld : tFeld; i : tIndex1Plus1; j : tIndex2Plus1; k : tIndexPlus1; begin { sortierte Felder einlesen } writeln ('Bitte', GRENZE1:2, ' Werte des ersten Feldes ', 'sortiert eingeben!'); for i := 1 to GRENZE1 do readln (Feld1[i]); writeln ('Bitte', GRENZE2:2, ' Werte des zweiten Feldes ', 'sortiert eingeben!'); for j := 1 to GRENZE2 do readln (Feld2[j]); { !!!!!!!!!!!!! hier beginnt der zu loesende Aufgabenteil: !!!!!!!!!!!! } i := 1; j := 1; k := 1; { Mergen der Felder } while (i < GRENZE1PLUS1) and (j < GRENZE2PLUS1) do begin { die Werte aus Feld1 und Feld2 werden entsprechend Ihrer Sortierung in Feld eingefuegt } if Feld1[i] < Feld2[j] then begin Feld[k] := Feld1[i]; i := i + 1; end else begin Feld[k] := Feld2[j]; j := j + 1; end; k := k + 1; end; { while } while i < GRENZE1PLUS1 do begin { die restlichen Werte aus Feld1, sofern vorhanden, werden eingefuegt } Feld[k] := Feld1[i]; i := i + 1; k := k + 1; end; while j < GRENZE2PLUS1 do begin { die restlichen Werte aus Feld2, sofern vorhanden, werden eingefuegt } Feld[k] := Feld2[j]; j := j + 1; k := k + 1; end; { !!!!!!!!! hier endet der zu loesende Aufgabenteil !!!!!!!!!! } { Ausgabe des Ergebnisfeldes } writeln ('Das Ergebnisfeld ist:'); for k := 1 to GRENZE do write (Feld[k]:8); writeln; end. { merge } |
EA2_A2_merge.zip