• Aktualisierte Forenregeln

    Eine kleine Änderung hat es im Bereich Forenregeln unter Abschnitt 2 gegeben, wo wir nun explizit darauf verweisen, dass Forenkommentare in unserer Heftrubrik Leserbriefe landen können.

    Forenregeln


    Vielen Dank

Turbo Pascal Programme mit Feldern (arrays)

MrPowerTower

Anwärter/in
Registriert
21.09.2003
Beiträge
29
Reaktionspunkte
0
Ich brauch mal zwei TurboPascal Programme:
1)
bei dem ein 2 reihiges Feld (array) aus Zufallszahlen erzeugt und ausgegeben wird, und die groesste (kleinste) Zahl und deren Stelle angezeigt wird. Dabei ist es egal, wie viele Glieder eine Reihe des Feldes hat.

und 2)
bei dem die Glieder aller Reihen der Groesse nach sortiert werden
z.B.:

2 5 3
5 6 8

wird zu
5 3 2
8 6 5
 
MrPowerTower am 05.04.2005 19:09 schrieb:
Ich brauch mal zwei TurboPascal Programme:
1)
bei dem ein 2 reihiges Feld (array) aus Zufallszahlen erzeugt und ausgegeben wird, und die groesste (kleinste) Zahl und deren Stelle angezeigt wird. Dabei ist es egal, wie viele Glieder eine Reihe des Feldes hat.

und 2)
bei dem die Glieder aller Reihen der Groesse nach sortiert werden
z.B.:

2 5 3
5 6 8

wird zu
5 3 2
8 6 5

1) Nimm eine Pascal-Funktion, die Zufallszahlen ausgibt (wahrscheinlich werden die Zahlen uniform über [0..1] verteilt sein, du musst sie also noch auf deinen Definitionsbereich mappen, was kein Problem darstellen sollte), und wende sie einfach auf jeden Speicherplatz im Array an. Fortlaufend merkst du dir das aktuelle Minimum und deren Position. Somit hast du 1) in linearer Zeit gelöst.

Für 2) ist ein QuickSort zu empfehlen, da wird ein Lehrer bestimmt zufrieden sein. ;)
Gibt auch einige einfachere Algos, die jedoch meist auch langsamer sind, aber QuickSort zu kennen, schadet bestimmt nie.
 
also zum ersten hätt ich da schon fast was:
program sort;
uses crt;
var i : integer;
feld : array[1..20] OF integer;

procedure quicksort(l, r : integer);
var i, j, m, v, temp : integer;
begin
if l < r then begin
m := (l + r) div 2;
v := feld[m];
i := l;
j := r;
while i <= j do begin
while feld > v do inc(i);
while feld[j] < v do dec(j);
if i <= j then begin
temp := feld;
feld := feld[j];
feld[j] := temp;
inc(i); dec(j);
end;
end;
quicksort(l,j);
quicksort(i,r);
end;
end;

begin
randomize;
clrscr;
for i:=low(feld) to high(feld) do begin
feld:=random(100);
write(feld:2,' ');
end;
quicksort(low(feld), high(feld));
writeln;
for i:=low(feld) to high(feld) do begin
write(feld:2,' ');
end;
readln;
end.


nur leider is es nur einreihig das Feld.
 
MrPowerTower am 05.04.2005 22:29 schrieb:
Code

nur leider is es nur einreihig das Feld.

Um das ganze 2D zu machen gibt's 2 Möglichkeiten (die mir grad spontan einfallen):

1) Verwende einen 2D-Array. Afair wird der so deklariert: field: array[0..19,0..1] OF INTEGER;
Kann mich allerdings auch irren, ist schon ne Weile her mit Pascal. Anstelle von field[j] greifst du jetzt einfach auf field[j,0] und field[j,1] zu.

2) Mache deinen Array einfach doppelt so lang (der 2D-Array wird intern eh so dargestellt) und führe alle Feld-spezifischen Instruktionen zweimal aus: Anstatt field[j] rufst du jetzt einfach field[j] und field[j + size(field)/2] auf, etc. (size steht hier für die Grösse des Arrays, k.A. ob's in PASCAL dafür ne Funktion gibt). Aber Achtung QuickSort solltest du jetzt nur noch von 0 bis zur Hälfte durchführen, sonst gibt's einen Zugriff jenseits der Arraygrenzen, was dem PASCAL-Compiler wohl nicht allzu gut bekommen wird.

PS: Falls du vorhast, später mal deine Programmierkenntnisse auf etwas jenseits von PASCAL auszuweiten, gewöhne dir jetzt schon an, das erste Feld eines Arrays mit 0 zu nummerieren. Nur so als Tipp.


PPS: Ein Code-Tag wär irgendwie wünschenswert....
 
MikeA am 06.04.2005 18:51 schrieb:
PS: Falls du vorhast, später mal deine Programmierkenntnisse auf etwas jenseits von PASCAL auszuweiten, gewöhne dir jetzt schon an, das erste Feld eines Arrays mit 0 zu nummerieren. Nur so als Tipp.


PPS: Ein Code-Tag wär irgendwie wünschenswert....

zu PS: *zustimm*
zu PPS: noch heftigeres *zustimm* :-)
 
MikeA am 06.04.2005 18:51 schrieb:
MrPowerTower am 05.04.2005 22:29 schrieb:
Code

nur leider is es nur einreihig das Feld.

Um das ganze 2D zu machen gibt's 2 Möglichkeiten (die mir grad spontan einfallen):

1) Verwende einen 2D-Array. Afair wird der so deklariert: field: array[0..19,0..1] OF INTEGER;
Kann mich allerdings auch irren, ist schon ne Weile her mit Pascal. Anstelle von field[j] greifst du jetzt einfach auf field[j,0] und field[j,1] zu.

2) Mache deinen Array einfach doppelt so lang (der 2D-Array wird intern eh so dargestellt) und führe alle Feld-spezifischen Instruktionen zweimal aus: Anstatt field[j] rufst du jetzt einfach field[j] und field[j + size(field)/2] auf, etc. (size steht hier für die Grösse des Arrays, k.A. ob's in PASCAL dafür ne Funktion gibt). Aber Achtung QuickSort solltest du jetzt nur noch von 0 bis zur Hälfte durchführen, sonst gibt's einen Zugriff jenseits der Arraygrenzen, was dem PASCAL-Compiler wohl nicht allzu gut bekommen wird.

PS: Falls du vorhast, später mal deine Programmierkenntnisse auf etwas jenseits von PASCAL auszuweiten, gewöhne dir jetzt schon an, das erste Feld eines Arrays mit 0 zu nummerieren. Nur so als Tipp.


PPS: Ein Code-Tag wär irgendwie wünschenswert....

Danke dir für deine Hilfe s gab dicke 15 Punkte drauf :X :X
 
Zurück