[PROG] Trap bij proefexamen
Posted: Wed Jan 17, 2007 3:01 pm
Hallo, was even als voorbereiding op het practicum van programmeren m'n proefexamen aan het maken. Nu, ik zit met een lastige trap (duh!) die ik niet echt kan vinden. Ik maak eerst een boom aan met een 1ste naam erin. Dat gaat goed. Dan voeg ik daar een kind aan toen, ook nog in orde. Nu, als ik dan nog een broer wil geven aan dit laatste kind, want erop neerkomt gewoon nog een kind toe te voegen aan die eerste persoon, loopt het mis. Ik kan perfect een kind aan dat laatste kind geven. Maar vanaf ik iemand twee kinderen wens te geven loopt het mis. Nu, hier m'n code:
Uiteraard heb ik ook nog een test bestandje waar ik gewoon iets inlees en daarmee die procedures test. Maar daar staat op zich niets belangrijks in.
Code: Select all
(*
Author: Joël Craenhals
Date Created: 12/12/2006
*)
MODULE Proefexamen;
IMPORT
OutExt;
TYPE
String* = ARRAY 50 OF CHAR;
Stamboom* = POINTER TO StamboomBeschrijving;
StamboomBeschrijving* =
RECORD
naam*: String;
echtgenoot*: String;
kinderen*: ARRAY 50 OF Stamboom;
overleden*, getrouwd*: BOOLEAN;
END;
PROCEDURE Zoeken* (stamboom: Stamboom; naam: String; VAR gevonden: BOOLEAN): Stamboom;
VAR
i: INTEGER;
BEGIN
gevonden := FALSE;
IF (stamboom^.naam = naam) THEN
gevonden := TRUE;
RETURN stamboom;
ELSIF (stamboom^.echtgenoot = naam) THEN
gevonden := TRUE;
RETURN stamboom;
ELSIF (stamboom^.kinderen[0] # NIL) THEN
FOR i:=0 TO 49 DO
stamboom := Zoeken(stamboom^.kinderen[i], naam, gevonden);
IF (gevonden = TRUE) THEN
gevonden := TRUE;
RETURN stamboom;
END;
END;
ELSE
gevonden := FALSE;
stamboom := NIL;
RETURN stamboom;
END;
END Zoeken;
PROCEDURE (stamboom: Stamboom) Toevoegen* (naamKind, naamOuder: String; rootPersoon: String);
VAR
stamboomOrigineel, tmpPtr: Stamboom;
i, j: INTEGER;
gevondenOuder, gevondenKind, gevondenRootPersoon: BOOLEAN;
BEGIN
stamboomOrigineel := stamboom;
gevondenOuder := FALSE;
gevondenKind := FALSE;
gevondenRootPersoon := FALSE;
i := 0;
stamboom := Zoeken(stamboomOrigineel, naamOuder, gevondenOuder);
IF ((gevondenOuder = TRUE) & (stamboom # NIL)) THEN
NEW(tmpPtr);
tmpPtr := Zoeken(stamboom, naamKind, gevondenKind);
IF ((gevondenKind = FALSE) & (tmpPtr = NIL)) THEN
FOR j:=0 TO 49 DO
IF (stamboom^.kinderen[j] # NIL) THEN
INC(i);
END;
END;
NEW(stamboom^.kinderen[i]);
stamboom^.kinderen[i]^.naam := naamKind;
OutExt.String(naamKind);
OutExt.String(" is toegevoegd als kind van ");
OutExt.String(naamOuder);
OutExt.String("!");
OutExt.Ln;
ELSE
OutExt.String(naamKind);
OutExt.String(" werd reeds toegevoegd als kind van ");
OutExt.String(naamOuder);
OutExt.String(" en is bijgevolg niet opnieuw toegevoegd!");
OutExt.Ln;
END;
ELSE
OutExt.String(naamOuder);
OutExt.String(" is niet gevonden in de stamboom en bijgevolg kan ");
OutExt.String(naamKind);
OutExt.String(" niet toegevoegd worden!");
OutExt.Ln;
END;
stamboom := Zoeken(stamboomOrigineel, rootPersoon, gevondenRootPersoon);
IF (gevondenRootPersoon = TRUE) THEN
OutExt.String("Stamboom is terug gezet op de pointer naar de root-persoon, namelijk ");
OutExt.String(stamboom^.naam);
OutExt.String("!");
OutExt.Ln;
END;
END Toevoegen;
BEGIN
END Proefexamen.