Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Array Ausgabe


Nippey - Mi 21.10.09 14:12
Titel: Array Ausgabe
Hallo. Ich sitze momentan vor einer Aufgabe in Informatik. Ich programmiere zwar nicht mit Delphi aber die Programmiersprache ist die gleiche.

folgende Aufgabe:

"Gesucht ist ein Programm merge, welches zwei (aufsteigend) sortierte Felder von (nicht notwendig verschiedenen) integer-Zahlen zu einem sortierten Feld verschmilzt......."

Die Aufgabe ist noch wesentlich länger aber ich brauche im Moment nur den Befehl um die Werte in einem Array nacheinander auszulesen und zu schreiben. Ich habe es mit write (Array[i]), probiert, aber wobwohl 8 Werte drin sein müssten schreibt er mir nur eine "0" hin.

Ausserdem weiß ich nicht genau wie ich Felder zusammenfügen kann. Ich habs mit Feld3[k] := Feld1[k] . Ich dachte so ist der Eintrag vom ersten Feld an der Stelle [k] = dem Eintrag im 3. Feld an der Stelle [k]. Aber funktioniert nicht. Is anscheinend kein gültiger Syntax.

Wäre cool wenn ihr einen Tip hättet.

Vielen Dank


Xentar - Mi 21.10.09 14:14

Und wie sieht der Code drumherum aus?
Wie kommen die Werte ins Array? Wo kommt i her? Wo ist Array deklariert? Du solltest hier übrigens den Bezeichner ändern, da array eigentlich ein reserviertes Wort ist.


Nippey - Mi 21.10.09 14:19

user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:
Und wie sieht der Code drumherum aus?
Wie kommen die Werte ins Array? Wo kommt i her? Wo ist Array deklariert? Du solltest hier übrigens den Bezeichner ändern, da array eigentlich ein reserviertes Wort ist.


Ja das war jetzt nur ein Beispiel. Ich habs so nicht programmiert. Ich dachte ihr braucht den Code nicht. Wollte nur wissen ob es ein Befehl gibt. Aber ich poste euch gerne die ganze AUfgabe. Vielleicht hilft es euch ja^^

Aufgabe:
Gesucht ist ein Programm merge, welches zwei (aufsteigend) sortierte Felder von (nicht
notwendig verschiedenen) integer-Zahlen zu einem sortierten Feld verschmilzt. Dabei sollen
mehrfach vorkommende Elemente auch mehrfach im Ergebnisfeld gespeichert werden. Die
beiden Felder werden von der Standardeingabe eingelesen, wobei wir voraussetzen, dass nur
sortierte Zahlenfolgen eingegeben werden. Eine Prüfung dieser Annahme ist nicht
erforderlich. Das sortierte Ergebnisfeld wird ausgegeben.
Beispiel: Feld1 enthalte die Elemente 11, 14, 18, 80, 100, Feld2 die Elemente 8, 11, 11, 17,
22, 30, 55, 70.
Feld enthält dann nach der Ausführung von merge die Elemente 8, 11, 11, 11, 14, 17, 18, 22,
30, 55, 70, 80, 100, d.h. wenn Feld2 erschöpft ist, müssen noch die restlichen Elemente aus
Feld1 nach Feld kopiert werden.
Ergänzen Sie folgende Programmvorlage zu einem vollständigen Programm:
Hinweis: Das Verschmelzen nutzt die bestehende Sortierung des Feldes aus, Sie sollen
keinen Sortier-Algorithmus implementieren.
Ein Kopieren der Feldinhalte von Feld1 und Feld2nach Feld mit anschließendem Sortieren
von Feld ist keine Lösung der Aufgabe.
Auch das komplette Kopieren eines Feldes nach Feld mit anschließendem Einsortieren der
Elemente des anderen Feldes ist keine Lösung.



Delphi-Quelltext
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:
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 Ein-
gabe 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;

//  HIER MUSS/KANN ICH WEITER DEKLarATONEN VORNEHMEN!

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 MUSS ICH DAS PROGRAMM WEITER FÜHREN!

writeln ('Das Ergebnisfeld ist:');
for k := 1 to GRENZE do
write (Feld[k]: 8 );
writeln
end{ merge }



Vielleicht hilft es ja weiter: Wenn ich die Zeile Feld[k] := Feld[i] eingeb stopt das programm an der Stelle mit "Error 201 : Range check Error"

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


Nippey - Mi 21.10.09 23:03

okay hat sich erledigt. Kann zu. Danke