Moin,
Ich sollte in Informatik mit Turbo Pascal ein Stammbaumprogramm mit Zeigern schreiben, wobei ich die Grundstruktur des Binärbaumes gleich zu Beginn erschaffen wollte, wobei der Linke Flügel von Links nach Rechts die Nummern 1-31 und der Rechte von Links nach Rechts die Nummern 32-62 tragen sollte. Diese sollten auch von Anfang an mit ??? gefüllt sein, sodass man bei vergessenen Familienmitgliedern etc. einfach nur eine Leerstelle anstelle eines fehlenden Gliedes hat.
Allerdings verfällt er bei diesem Block in eine Art Endlosschleife, bei der ich seit Tagen einfach nicht den Ursprung ausmachen kann.
Hier sind betreffende zwei Prozeduren (die zweite macht die Probleme):
PROCEDURE BAUM_Vorbereitung; {Bestimmt die Richtung des Baumes ausgehend von der Elterngeneration ausgehend}
vAR x,i,y,fff,ccc:longint;
sbin,s:string;
timer :LONGINT;
BEGIN
timer:=0;
x :=0;
REPEAT
i:=0;
y:=0;
sbin:='';
s:='';
timer:=timer+1;
x:=timer;
i:=2*x;
repeat
i:=trunc(int(i/2));
y:=(i mod 2);
str(y,s);
sbin:=s+sbin;
UNTIL int(i/2)<1;
vater[timer]:=sbin;
mutter[timer]:=vater[timer];
fff:=1;
ccc:=0;
FOR fff:= 1 TO LENGTH(mutter[timer]) DO
BEGIN
ccc:=ccc+1;
CASE Mutter[timer][ccc] OF
'1': Mutter[timer][ccc]:='0';
'0': Mutter[timer][ccc]:='1';
END;
END;
UNTIL timer=31;
END;
PROCEDURE PZeiger; {Zeigerkram - funktioniert nicht :(}
VAR Zeiger_geschlechtm, Zeiger_geschlechtw : STRING;
Zeiger_zaehler,Zeiger_x : INTEGER;
BEGIN;
Zeiger_zaehler:=0;
Zeiger_x :=1;
REPEAT
Zeiger_x:=1;
Zeiger_zaehler:=Zeiger_zaehler+1;
WHILE zeiger_zaehler<31 DO PA_ODER_MU:=1;
WHILE zeiger_zaehler>32 DO PA_ODER_MU:=2;
{ Zeiger_x :=0;}
Zeiger_geschlechtm:=Vater[zeiger_zaehler];
Zeiger_geschlechtw:=Mutter[Zeiger_zaehler];
h :=MASTER;
hh :=MASTER;
hilf:=MASTER;
b :=MASTER;
new(z);
z^.name :=Namen[Zeiger_zaehler];
z^.geb :=Geb [Zeiger_zaehler];
z^.tod :=Tod [Zeiger_zaehler];
z^.links :=NIL;
z^.rechts:=NIL;
IF PA_ODER_MU = 1 THEN
BEGIN
h := MASTER;
h := h^.links;
hh:=hh^.links;
REPEAT
Zeiger_x:=zeiger_x+1;
IF (Zeiger_geschlechtw[0+Zeiger_x] = '0') THEN
BEGIN
hh:=hh^.links;
h := h^.links;
END;
IF (Zeiger_geschlechtw[0+Zeiger_x] = '1') THEN
BEGIN
hh:=hh^.rechts;
h := h^.rechts;
END;
hh:=z;
hilf:=h;
UNTIL NOT (Zeiger_geschlechtm[0+Zeiger_x]='0') XOR (Zeiger_geschlechtm[0+Zeiger_x]='1');
END;
IF PA_ODER_MU = 2 THEN
BEGIN
Zeiger_x:=0;
h := MASTER;
h := h^.rechts;
hh:=hh^.rechts;
REPEAT
Zeiger_x:=zeiger_x+1;
IF (Zeiger_geschlechtm[0+Zeiger_x] = '0') THEN
BEGIN
hh:=hh^.links;
h := h^.links;
END;
IF (Zeiger_geschlechtm[0+Zeiger_x] = '1') THEN
BEGIN
hh:=hh^.rechts;
h := h^.rechts;
END;
hh:=z;
hilf:=h;
UNTIL NOT (Zeiger_geschlechtm[0+Zeiger_x]='0') XOR (Zeiger_geschlechtm[0+Zeiger_x]='1');
END;
UNTIL Zeiger_zaehler=62;
END;
Allgemeines zu den Prozeduren
Die erste Prozedur soll nur Mutter- und Vatergeneration trennen, sodass man beide Seiten und alle Äste des Baumes über eine vergleichsweise einfache Formel (Binärzahlen) erreichen kann und nicht für jede potentielle Generation dutzende Befehle dazupfeffern muss.
Die zweite Prozedur sollte dann die Zeigerkette bilden, die den Binärbaum darstellt (die in einer anderen Prozedur dann mit dem Inhalt ??? gefüllt wird um einen anonymen Grundstammbaum zu erreichen.
Und hier der Vollständigkeit halber das ganze Programm in jetziger Form:
PROGRAM Stammbaum_Zeiger;
USES CRT;
TYPE Zeiger =^Objekt;
Objekt =RECORD
name, geb ,tod :STRING;
links ,rechts :ZEIGER;
END;
VAR X,TIMER, PA_ODER_MU, wahl : INTEGER;
Stamm, Jan, JanG, JanT : String;
z, h, hh, MASTER, hilf, help,b : Zeiger;
Namen : ARRAY [1..62] OF STRING {Namen};
Geb : ARRAY [1..62] OF STRING {Geburtsdaten};
Tod : ARRAY [1..62] OF STRING {Todesdaten};
vater : Array [1..31] OF STRING;
mutter : Array [1..31] OF STRING;
PROCEDURE MENUE_Hinweise; {Setzt eine Begrenzung fuer das Hinweisfenster}
BEGIN;
WINDOW (3,14,25,22);
END;
PROCEDURE MENUE_Hinweise_end; {Setzt die Begrenzungen wieder auf den Normalzustand}
BEGIN;
WINDOW (1,1,80,25);
END;
PROCEDURE BAUM_Vorbereitung; {Bestimmt die Richtung des Baumes ausgehend von der Elterngeneration ausgehend}
vAR x,i,y,fff,ccc:longint;
sbin,s:string;
timer :LONGINT;
BEGIN
timer:=0;
x :=0;
REPEAT
i:=0;
y:=0;
sbin:='';
s:='';
timer:=timer+1;
x:=timer;
i:=2*x;
repeat
i:=trunc(int(i/2));
y:=(i mod 2);
str(y,s);
sbin:=s+sbin;
UNTIL int(i/2)<1;
vater[timer]:=sbin;
mutter[timer]:=vater[timer];
fff:=1;
ccc:=0;
FOR fff:= 1 TO LENGTH(mutter[timer]) DO
BEGIN
ccc:=ccc+1;
CASE Mutter[timer][ccc] OF
'1': Mutter[timer][ccc]:='0';
'0': Mutter[timer][ccc]:='1';
END;
END;
UNTIL timer=31;
END;
PROCEDURE PZeiger; {Zeigerkram - funktioniert nicht :(}
VAR Zeiger_geschlechtm, Zeiger_geschlechtw : STRING;
Zeiger_zaehler,Zeiger_x : INTEGER;
BEGIN;
Zeiger_zaehler:=0;
Zeiger_x :=1;
REPEAT
Zeiger_x:=1;
Zeiger_zaehler:=Zeiger_zaehler+1;
WHILE zeiger_zaehler<31 DO PA_ODER_MU:=1;
WHILE zeiger_zaehler>32 DO PA_ODER_MU:=2;
{ Zeiger_x :=0;}
Zeiger_geschlechtm:=Vater[zeiger_zaehler];
Zeiger_geschlechtw:=Mutter[Zeiger_zaehler];
h :=MASTER;
hh :=MASTER;
hilf:=MASTER;
b :=MASTER;
new(z);
z^.name :=Namen[Zeiger_zaehler];
z^.geb :=Geb [Zeiger_zaehler];
z^.tod :=Tod [Zeiger_zaehler];
z^.links :=NIL;
z^.rechts:=NIL;
IF PA_ODER_MU = 1 THEN
BEGIN
h := MASTER;
h := h^.links;
hh:=hh^.links;
REPEAT
Zeiger_x:=zeiger_x+1;
IF (Zeiger_geschlechtw[0+Zeiger_x] = '0') THEN
BEGIN
hh:=hh^.links;
h := h^.links;
END;
IF (Zeiger_geschlechtw[0+Zeiger_x] = '1') THEN
BEGIN
hh:=hh^.rechts;
h := h^.rechts;
END;
hh:=z;
hilf:=h;
UNTIL NOT (Zeiger_geschlechtm[0+Zeiger_x]='0') XOR (Zeiger_geschlechtm[0+Zeiger_x]='1');
END;
IF PA_ODER_MU = 2 THEN
BEGIN
Zeiger_x:=0;
h := MASTER;
h := h^.rechts;
hh:=hh^.rechts;
REPEAT
Zeiger_x:=zeiger_x+1;
IF (Zeiger_geschlechtm[0+Zeiger_x] = '0') THEN
BEGIN
hh:=hh^.links;
h := h^.links;
END;
IF (Zeiger_geschlechtm[0+Zeiger_x] = '1') THEN
BEGIN
hh:=hh^.rechts;
h := h^.rechts;
END;
hh:=z;
hilf:=h;
UNTIL NOT (Zeiger_geschlechtm[0+Zeiger_x]='0') XOR (Zeiger_geschlechtm[0+Zeiger_x]='1');
END;
UNTIL Zeiger_zaehler=62;
END;
PROCEDURE FAnzeigen; {Standardanzeige}
BEGIN;
WINDOW (27,3,57,22);
CLRSCR;
GOTOXY (15,1); z:=MASTER ; WRITE (Jan);
GOTOXY (14,2); WRITE ('/'); GOTOXY (13,3); WRITE ('/'); GOTOXY (12,4); WRITE ('/');
GOTOXY (11,5); WRITE ('/'); GOTOXY (10,6); WRITE ('/');
GOTOXY (16,2); WRITE ('\'); GOTOXY (17,3); WRITE ('\'); GOTOXY (18,4); WRITE ('\');
GOTOXY (19,5); WRITE ('\'); GOTOXY (20,6); WRITE ('\');
WINDOW (1,1,80,25);
GOTOXY (67,5) ; WRITE (Jan);
GOTOXY (68,6) ; WRITELN(JanG);
GOTOXY (65,7) ; WRITELN('N/A');
GOTOXY (68,9) ; WRITELN('???');
GOTOXY (67,10); WRITELN('???');
GOTOXY (71,12); WRITELN('???');
GOTOXY (70,13); WRITELN('???');
GOTOXY (71,14); WRITELN('???');
GOTOXY (70,15); WRITELN('???');
GOTOXY (69,17); WRITELN('gestrichen');
GOTOXY (66,18); WRITELN('gestrichen');
GOTOXY (67,19); WRITELN('gestrichen');
END;
PROCEDURE RAHMEN; {Setzt den aeusseren Rahmen des Programmes}
BEGIN;
CLRSCR;
X:=0;
TIMER:=0;
REPEAT
GOTOXY (1,X+1); WRITELN('=');
GOTOXY (2,X+1); WRITELN('=');
GOTOXY (78,X+1); WRITELN('=');
GOTOXY (79,X+1); WRITELN('=');
TIMER:=TIMER+1;
X:=X+1;
UNTIL TIMER=24;
TIMER:=0;
X:=0;
REPEAT
GOTOXY (X+1,1); WRITELN('=');
GOTOXY (X+1,2); WRITELN('=');
GOTOXY (X+1,23); WRITELN('=');
GOTOXY (X+1,24); WRITELN('=');
TIMER:=TIMER+1;
X:=X+1;
UNTIL TIMER=79;
END;
PROCEDURE Default; {Autoinhalt der Namen}
VAR Default_zaehler:INTEGER;
BEGIN;
CLRSCR;
Rahmen;
Default_zaehler:=0;
REPEAT
Default_zaehler:=Default_zaehler+1;
Namen[Default_zaehler]:='???';
Geb [Default_zaehler]:='N/A';
Tod [Default_zaehler]:='N/A';
UNTIL Default_zaehler=62;
GOTOXY (1,25); WRITE ('Anonymer Stammbaum erfolgreich simuliert!');
READLN;
END;
PROCEDURE About; {weitere Hinweise}
BEGIN;
Rahmen;
WINDOW (3,3,77,21);
GOTOXY (25,1); WRITELN ('STAMMBAUMSIMULATION - UEBER DAS PROGRAMM');
WRITELN ('Dieses Programm simuliert den Stammbaum des Benutzers,') ;
WRITELN ('zur Benutzung folgen Sie bitte den Anweisungen im Hinweis-Fenster.');
WRITELN; WRITE ('Zwecks Uebersicht und Praevention eventueller Fehler wird ');
WRITELN ('gebeten keine Namen von einer Laenge ueber 8 Zeichen einzugeben.');
WRITELN ('Auf der Stammbaum-Kurzansicht werden jediglich zwei Generationen abwaerts ');
WRITELN ('der Stammperson angezeigt, fuer weitere Familienmitglieder setzen Sie bitte einen neuen Ausgangspunkt.');
WRITELN; WRITELN ('Nach dem Schliessen diesen Fensters ist die Kurzansicht geloescht.');
WRITELN ('Zum Anzeigen druecken sie im Hauptfenster bitte die 2.');
WINDOW (1,1,80,25);
END;
PROCEDURE QQQ; {Beendet das Programm}
BEGIN;
Exit;
END;
PROCEDURE ME_MYSELF_AND_I; {Eigene Daten/Grundaufbau}
VAR jzeiger, jhzeiger : Zeiger;
BEGIN;
Rahmen;
GOTOXY (23,3); WRITELN ('EINGABE DER EIGENEN DATEN');
GOTOXY (3,5) ; WRITELN ('Geben Sie nun bitte die Grundinformationen ueber sich ein um zum Haupt- ');
GOTOXY (3,6) ; WRITELN ('programm gelangen zu koennen.');
GOTOXY (3,8) ; WRITE ('Wie lautet euer Familienname? '); READLN (Stamm);
GOTOXY (3,9) ; WRITE ('Geben sie nun ihren Vornamen ein: '); READLN (Jan);
GOTOXY (1,25); WRITE ('Name: ',Jan,' - erfolgreich uebertragen!');
GOTOXY (3,10); WRITE ('Geben sie nun ihr Geburtsjahr ein: '); READLN (JanG);
GOTOXY (1,25); WRITE ('Geburtsjahr: ',JanG,' - erfolgreich uebertragen!');
GOTOXY (3,11); WRITELN ('Als Benutzer sind Sie noch am Leben, daher startet nun das Hauptprogramm!');
READLN;
new(z);
z^.name:=Jan;
z^.geb:=JanG;
z^.tod:=JanT;
z^.links:=NIL;
z^.rechts:=NIL;
MASTER:=z;
h :=MASTER;
hh :=MASTER;
help:=MASTER;
jhzeiger:=MASTER;
CLRSCR;
END;
PROCEDURE Aufbau;{Grundaufbau und Einteilung}
BEGIN;
CLRSCR;
Rahmen;
X:=0;
TIMER:=0;
REPEAT
GOTOXY (58,X+1); WRITELN('=');
GOTOXY (26,X+1); WRITELN('=');
TIMER:=TIMER+1;
X:=X+1;
UNTIL TIMER=24;
X:=0;
TIMER:=0;
REPEAT
GOTOXY (X+1,12); WRITELN('=');
TIMER:=TIMER+1;
X:=X+1;
UNTIL TIMER=26;
X:=59;
TIMER:=0;
REPEAT
GOTOXY (X+1,16); WRITELN('-');
TIMER:=TIMER+1;
X:=X+1;
UNTIL TIMER=18;
END;
PROCEDURE TEXT; {Jeglicher Standardtext}
BEGIN;
GOTOXY (26,1);
WRITELN('STAMMBAUM DER FAMILIE ',Stamm);
GOTOXY (10,3); WRITELN('MENUE');
GOTOXY (4,5); WRITELN('1. Personenmenue');
GOTOXY (4,6); WRITELN('2. Anzeigen Stammb');
GOTOXY (4,7); WRITELN('3. Kopf aendern');
GOTOXY (4,8); WRITELN('4. Person=anonym');
TextBackground(7);
Textcolor(0);
GOTOXY (4,9); WRITELN('41. Loeschen Person(k)');
Textbackground(0);
Textcolor(15);
GOTOXY (16,10); WRITELN('5. About');
GOTOXY (16,11); WRITELN('6. Exit');
GOTOXY (10,13); WRITELN('HINWEISE');
GOTOXY (39,3); WRITELN('Stammbaum');
GOTOXY (61,3); WRITELN('Detailansicht');
GOTOXY (60,5); WRITELN('Name: ');
GOTOXY (60,6); WRITELN('Geburt: ');
GOTOXY (60,7); WRITELN('Tod: ');
GOTOXY (60,9); WRITELN('Mutter: ');
GOTOXY (60,10); WRITELN('Vater: ');
GOTOXY (60,12); WRITELN('Gmutter m: ');
GOTOXY (60,13); WRITELN('Gvater m: ');
GOTOXY (60,14); WRITELN('Gmutter v: ');
GOTOXY (60,15); WRITELN('Gvater v: ');
GOTOXY (60,17); WRITELN('Partner: ');
GOTOXY (60,18); WRITELN('Kind: ');
GOTOXY (60,19); WRITELN('Enkel: ');
END;
PROCEDURE MENUE_EINGABE_Hinweise; {Hinweise fuer das Grundmenue}
BEGIN;
MENUE_Hinweise;
GOTOXY (1,1);
WRITELN ('Zur Wahl ihres Menue-');
WRITELN ('punktes drucken sie diegewuenschte Zahl.');
WRITELN;
WRITELN ('Hilfen zum gewuenschtenOperator werden dann');
WRITELN ('im Menue angezeigt!');
MENUE_Hinweise_end;
END;
PROCEDURE hinzufuegen; {Neue Personen oder Editierung}
VAR pll,eing : INTEGER;
BEGIN;
CLRSCR;
Rahmen;
WINDOW (3,3,77,22);
REPEAT
CLRSCR;
GOTOXY (30,1); WRITELN ('NEUE PERSON');
WRITE ('Geben Sie zuerst die Indexzahl der gewunschten Person ein, um diese heraus-');
WRITE ('zufinden zaehlen sie fur Verwandte muetterlicherseits von rechts nach links');
WRITELN ('mit dem Zahlenspektrum 1-31, ');
WRITELN ('fuer Verwandte vaeterlicherseits tun Sie dies mit den Zahlen 32-62');
WRITELN; WRITELN ('Von welchem Familienmitglied moechten sie die Daten veraendern?');
WRITE ('Eingabe: '); READLN (pll);
REPEAT
CASE pll OF
1..62:
BEGIN
CLRSCR;
GOTOXY (30,1); WRITELN ('NEUE PERSON');
WRITELN ('Die Aktuelle Person mit der Indexzahl ',pll,' hat folgende Daten: ');
WRITELN ('Name: ',Namen[pll]);
WRITELN ('Geburtsjahr: ',Geb[pll]);
WRITELN('Todesjahr: ',Tod[pll]);
WRITELN; WRITELN ('Geben Sie nun bitte die neuen Daten ein:');
WRITE ('Name: '); READLN (Namen[pll]);
WRITE ('Geburtsjahr: '); READLN (Geb[pll]);
WRITE ('Todesjahr: '); READLN (Tod[pll]);
END;
ELSE
BEGIN
REPEAT
CLRSCR;
GOTOXY (30,1); WRITELN ('EINGABEFEHLER!');
WRITE ('Geben Sie zuerst die Indexzahl der gewunschten Person ein, um diese heraus-');
WRITE ('zufinden zaehlen sie fur Verwandte muetterlicherseits von rechts nach links');
WRITELN ('mit dem Zahlenspektrum 1-31, ');
WRITELN ('fuer Verwandte vaeterlicherseits tun Sie dies mit den Zahlen 32-62');
WRITELN; WRITELN ('Von welchem Familienmitglied moechten sie die Daten veraendern?');
WRITE ('Eingabe: '); READLN (pll);
UNTIL (pll>0) AND (pll<63)
END;
END;
UNTIL (pll>0) AND (pll<63);
CLRSCR;
WRITELN ('Weitere Aenderungen? (0=Nein, 1=Ja)');
WRITE ('Eingabe: '); READLN (eing);
UNTIL eing=0;
WINDOW (1,1,80,25);
END;
PROCEDURE KOPF; {Veraendert den Kopf des Stammbaumes}
VAR ein, ind, indz, default : INTEGER;
BEGIN
CLRSCR;
Rahmen;
WINDOW (3,3,77,22);
b:=MASTER;
indz:=0;
GOTOXY (30,1); WRITELN ('LINIENAUSWAHL');
WRITELN ('Zuruecksetzen oder neuen Kopf auswaehlen? (0=Default/1=Wechsel)');
WRITE ('Eingabe: '); READLN (Default);
CASE DEFAULT OF
0: b:=MASTER;
1: BEGIN
WRITELN (' Soll eine Person aus Ihrer muetterlichen oder vaeterlicher Linie Kopf werden? (0=m/1=v)');
WRITE ('Eingabe:'); READLN (ein);
REPEAT
CASE ein OF
0: b:=b^.links;
1: b:=b^.rechts;
ELSE
BEGIN
REPEAT
GOTOXY (30,1); WRITELN ('FEHLER!');
WRITELN (' Soll eine Person aus Ihrer muetterlichen oder vaeterlichen Linie Kopf werden? (0=m/1=v)');
WRITE ('Eingabe:'); READLN (ein);
UNTIL (ein=0) XOR (ein=1)
END;
END;
UNTIL (ein=0) XOR (ein=1);
END;
END;
CASE ein OF
0: BEGIN
CLRSCR;
GOTOXY (30,1); WRITELN ('Person Muetterlicher Linie');
WRITE ('Geben Sie nun die Indexnummer der gewuenschten Person an: '); READLN (ind);
READLN (Mutter[ind]);
REPEAT
indz:=indz+1;
IF mutter[ind][indz] = '0' THEN
b := b^.links;
IF mutter[ind][indz] = '1' THEN
b := b^.rechts;
UNTIL NOT (mutter[ind][indz]='0') XOR (mutter[ind][indz]='1');
help:=b;
END;
1: BEGIN
CLRSCR;
GOTOXY (30,1); WRITELN ('Person Vaeterlicher Linie');
WRITE ('Geben Sie nun die Indexnummer der gewuenschten Person an: '); READLN (ind);
READLN (Vater[ind]);
indz:=0;
REPEAT
indz:=indz+1;
IF Vater[ind][indz] = '0' THEN
b := b^.links;
IF Vater[ind][indz] = '1' THEN
b := b^.rechts;
UNTIL NOT (Vater[ind][indz]='0') XOR (Vater[ind][indz]='1');
help:=b;
END;
END;
WINDOW (1,1,80,25);
END;
PROCEDURE Anzeigen;
BEGIN
WINDOW (27,3,57,22);
CLRSCR;
GOTOXY (15,1); z:=help; WRITE (help^.name);
GOTOXY (14,2); WRITE ('/'); GOTOXY (13,3); WRITE ('/'); GOTOXY (12,4); WRITE ('/');
GOTOXY (11,5); WRITE ('/'); GOTOXY (10,6); WRITE ('/');
GOTOXY (16,2); WRITE ('\'); GOTOXY (17,3); WRITE ('\'); GOTOXY (18,4); WRITE ('\');
GOTOXY (19,5); WRITE ('\'); GOTOXY (20,6); WRITE ('\');
GOTOXY (21,7); z:=z^.rechts; WRITE (z^.name);
GOTOXY (5,7) ; z:=help; z:=z^.links; WRITE (z^.name);
WINDOW (1,1,80,25);
GOTOXY (67,5) ; WRITE (z^.geb);
GOTOXY (68,6) ; WRITELN(z^.tod);
GOTOXY (65,7) ; WRITELN('z^.tod');
GOTOXY (68,9) ;hilf:=z^.links; WRITELN('hilf^.name');
GOTOXY (67,10);hilf:=z^.rechts; WRITELN('hilf^.name');
GOTOXY (71,12);hilf:=z^.links^.links; WRITELN('hilf^.name');
GOTOXY (70,13);hilf:=z^.links^.rechts; WRITELN('hilf^.name');
GOTOXY (71,14);hilf:=z^.rechts^.links; WRITELN('hilf^.name');
GOTOXY (70,15);hilf:=z^.rechts^.rechts;WRITELN('hilf^.name');
GOTOXY (69,17); WRITELN('gestrichen');
GOTOXY (66,18); WRITELN('gestrichen');
GOTOXY (67,19); WRITELN('gestrichen');
END;
PROCEDURE loeschen;
VAR qwerty,best,ask: Integer;
BEGIN;
CLRSCR;
Rahmen;
WINDOW (3,3,77,22);
REPEAT
best:=0;
ask:=1;
CLRSCR;
GOTOXY (30,1); WRITELN ('LOESCHVORGANG');
WRITE ('Geben Sie zuerst die Indexzahl der gewunschten Person ein, um diese heraus-');
WRITE ('zufinden zaehlen sie fur Verwandte muetterlicherseits von rechts nach links');
WRITELN ('mit dem Zahlenspektrum 1-31, ');
WRITELN ('fuer Verwandte vaeterlicherseits tun Sie dies mit den Zahlen 32-62');
WRITELN; WRITELN ('Von welchem Familienmitglied moechten sie die Daten zuruecksetzen? ');
WRITE ('Eingabe: '); READLN(qwerty);
CASE QWERTY OF
1..62:
BEGIN
WRITELN ('Soll ',Namen[qwerty],' geboren ',Geb[qwerty],' wirklich zurueckgesetzt werden?');
WRITELN ('Folgende weitere Informationen wuerden ebenfalls verloren gehen: ');
WRITELN ('1. Todesdatum ',Tod[qwerty]);
WRITELN ('Bestaetigung loeschen (0=Nein,1=Ja): '); READLN (best);
END;
ELSE
BEGIN
REPEAT
BEGIN
WRITELN ('FEHLER! Ungueltige Eingabe');
WRITELN ('Von welchem Familienmitglied moechten sie die Daten zuruecksetzen?');
WRITE ('Eingabe: '); READLN(qwerty);
END;
UNTIL (qwerty>0) AND (qwerty<=62);
WRITELN ('Soll ',Namen[qwerty],' geboren ',Geb[qwerty],' wirklich zurueckgesetzt werden?');
WRITELN ('Folgende weitere Informationen wuerden ebenfalls verloren gehen: Todesdatum ',Tod[qwerty]);
WRITELN ('Bestaetigung loeschen (0=Nein,1=Ja): '); READLN (best);
END;
END;
IF best = 1 THEN
BEGIN
Namen[qwerty]:='???';
Geb[qwerty]:='N/A';
Tod[qwerty]:='N/A';
END;
WRITELN ('Andere Loeschung (0=Nein,1=Ja)? '); Readln(ask);
UNTIL ask=0;
READLN;
WINDOW (1,1,80,25);
END;
PROCEDURE Default_Baum;
BEGIN;
Baum_Vorbereitung;
Pzeiger;
END;
PROCEDURE EINGABE_MENUE; {Hauptmenue}
BEGIN;
GOTOXY (1,25); WRITE ('Eingabe der Menuewahl: '); READLN(Wahl);
CASE Wahl OF
1: BEGIN
hinzufuegen;
Rahmen;
Aufbau;
Text;
MENUE_EINGABE_Hinweise;
EINGABE_MENUE;
END;
2: BEGIN
Anzeigen;
Rahmen;
Aufbau;
Text;
MENUE_EINGABE_Hinweise;
EINGABE_MENUE;
END;
3: BEGIN
kopf;
Rahmen;
Aufbau;
Text;
MENUE_EINGABE_Hinweise;
EINGABE_MENUE;
END;
4: BEGIN
loeschen;
Rahmen;
Aufbau;
Text;
MENUE_EINGABE_Hinweise;
EINGABE_MENUE;
END;
{ 41: BEGIN}
5: BEGIN
CLRSCR;
About;
Readln;
Rahmen;
Aufbau;
Text;
MENUE_EINGABE_Hinweise;
EINGABE_MENUE;
END;
6: qqq;
END;
END;
BEGIN {Hauptprogramm}
CLRSCR;
Rahmen;
Default;
Default_Baum; {Fehlerquelle}
ME_MYSELF_AND_I;
Aufbau;
Text;
FAnzeigen;
MENUE_EINGABE_Hinweise;
EINGABE_MENUE;
READLN;
END.