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.