aha, das ging ja schnell^^
also die profile sind natürlich in record organsisiert und diese dann als reihe
die anazhl an profielen is nich festgelegt, je nachdem wieviel man eingibt, maximal 100 allerdings
ja, die sollen nach name sortiert werden, also in dem fall record.name
diese ganzen records werden dann mittels FILE OF (also assigne, write, etc...) gespeichert
das ganze soll nun so funktionieren, das wen ich im menü auswähle (alle profile anzeigen), die namen aller profile nacheinander ausgibt -> also will ich in erster linie die ausgabe sortieren
wenn das natürlich auch die orginal sortiert wärs besser, aber das isja noch schwerer
ich häng mal nen code teil an den ich fertig habe, wie ich mir da so gedacht hatte
Delphi-Quellcode:
PROCEDURE hilfsreihe;
VAR nummer : INTEGER;
BEGIN
RESET(profile);
nummer :=0;
{=Nummer des ersten DS in Orig.-Datei}
WHILE NOT EOF(profile)
DO
BEGIN
READ(profile,datenbank);
WITH (datenbank)
DO
BEGIN
hilfsdaten[nummer].schl :=nam;
hilfsdaten[nummer].nr :=nummer;
END;
INC(nummer);
END;
r_index := nummer - 1;
{writeln('Anazhl DS in DB;');
writeln('Zaehlung beginnt mit 0');
writeln(r_index);
writeln; }
GOTOXY(30,8);writeln('
Weiter mit Enter!');
writeln;
END;
PROCEDURE qsort (l,r : INTEGER);
VAR i,j,x,y : INTEGER;
sz : tHILF;
BEGIN
hilfsreihe;
RESET(profile);
i:=l;
j:=r;
x:=(l+r)
DIV 2;
REPEAT
WHILE hilfsdaten[i] < x
DO
i:=i+1;
WHILE x < hilfsdaten[j]
DO
j:=j-1;
IF i<j
THEN
BEGIN
y:=hilfsdaten[i];
hilfsdaten[i] := hilfsdaten[j];
hilfsdaten[j] := y;
i:=i+1;
j:=j-1;
END;
UNTIL i>j;
IF l<j
THEN
qsort(l,j);
IF i<r
THEN
qsort(i,r);
END;
{FOR k := 0 TO (r_index - 1) DO
BEGIN
kleinstes := k;
FOR l:=k+1 TO r_index DO
IF hilfsdaten[l].schl < hilfsdaten[kleinstes].schl THEN
kleinstes := l;
sz := hilfsdaten[k];
hilfsdaten[k] := hilfsdaten[kleinstes];
hilfsdaten[kleinstes] := sz;
END; }
END;
PROCEDURE hilfsdaten_speichern;
VAR k:INTEGER;
BEGIN
ASSIGN(datenbanksort,'
E:\pfsort.dat');
REWRITE(datenbanksort);
qsort(0..nummer);
FOR k:=0
TO r_index
DO
write(datenbanksort,hilfsdaten[k]);
CLOSE(datenbanksort);
END;
PROCEDURE sortdat_ausgeben;
VAR k,ke,dz:integer;
test,test2:
string;
BEGIN
clrscr;
kopf;
hilfsdaten_speichern;
textcolor(yellow);
GOTOXY(25,6);
write('
Profile geordnet nach Name');
GOTOXY(25,7);
write('
~~~~~~~~~~~~~~~~~~~~~~~~~~');
textcolor(lightgray);
writeln; writeln;
RESET(profile);
FOR k:=0
TO r_index
DO
dz:=0;
BEGIN
SEEK(profile,hilfsdaten[k].nr);
READ(profile,datenbank);
WITH (datenbank)
DO
test := datenbank.nam;
test2:=datenbank.rasse;
GOTOXY(22,11+(k*3));writeln(k+1,'
.','
Name: ':10,test:20);
GOTOXY(24,12+(k*3));writeln('
Rasse: ':(10),test2:19);
END;
readln;
{
inc(dz);
IF dz DIV 5 = 0 THEN
BEGIN
clrscr;
ke:=k;
kopf;
GOTOXY(22,11+(ke/dz*3);writeln(k+1,'.','Name: ':(10),test:20);
GOTOXY(24,12+(k/dz*3);writeln(' Rasse: ':(10),test2:19);
END
ELSE
END; }
END;
kurz zusammengefasst:
wenn das ausgeben im HP aufgerufen wird, wird zuerst ne hilfsreihe erzeugt aus der gespeicherten datei
danach kommt die qsort prozedur, wo ich keine ahnung habe wie ich die machen sollte dabei
darnter das in kommentarklammern is die "sortieren durch auswahl" lösung fürn notfall
dann wirds die sortierte hilfsreihe gespeichert
und diese ausgegeben
naja, hoffe ihr könnt mir helfen
@wer sich wundert, das da "rasse" steht, das programm geht um das spiel warcraft3, nur zum leichteren verständnis hab ich adressbuch geschrieben