Einsendeaufgaben EA-Besprechung WS 2017/2018 EA2 00814 (04.01.2018)

Hochschulabschluss
Bachelor of Science
Studiengang
M.Sc. Wirtschaftswissenschaft
Hier mal meine Lösungen. Würde mich über Hinweise / Verbesserungsvorschläge freuen ;-)

a)

TYPE
PARTNERZGR = ↑ PARTNER
PARTNER = RECORD
nummer : INTEGER;
name : STRING;
anschrift : STRING;
wert : REAL;
links : PARTNERZGR;
rechts : PARTNERZGR;​
END;​

VARIABLE
kundwurzel : PARTNERZGR; {Zeiger auf Kundenbaum-Wurzel}
kunde : PARTNERZGR; {Zeiger auf Kundenbaum-Knoten}
liefwurzel : PARTNERZGR; {Zeiger auf Lieferantenbaum-Wurzel }
lieferant : PARTNERZGR; {Zeiger auf Lieferantenbaum -Knoten}
anzkund : INTEGER; {Anzahl der Kunden}
anzlief : INTEGER; {Anzahl der Lieferanten}​
 
Zuletzt bearbeitet:
b)

PROCEDURE InitPartner();
BEGIN
NEW(kundwurzel); {Speicherplatz für Kundenbaumwurzel}
kundwurzel := NIL; {Kundenbaumwurzel initialisieren}
liefwurzel := NIL; {Lieferantenbaumwurzel initialisieren}​
END InitPartner;
 
Zuletzt bearbeitet:
c)

FUNCTION EinfügePartner(partner : PARTNER) : BOOLEAN;
DATA
VARIABLE vater, zeiger : PARTNERZGR;​
BEGIN
{Partner einfügen in Kundenbaum}
vater := kundwurzel;
zeiger := kundwurzel;
WHILE (zeiger ≠ NIL) DO
vater := zeiger;
IF (CompareStrings(zeiger↑.name, partner↑.name) < 0) THEN
zeiger := zeiger↑.rechts;​
ELSEIF (CompareStrings(zeiger↑.name, partner↑.name) = 0)
RETURN FALSE;​
ELSE
zeiger := zeiger↑.links;​
ENDIF;​
ENDWHILE;

NEW(zeiger);
zeiger↑.nummer := partner↑.nummer;
zeiger↑.name := partner↑.name;
zeiger↑.anschrift := partner↑.anschrift;
zeiger↑.wert := partner↑.wert;
zeiger↑.rechts := NIL;
zeiger↑.links := NIL;

IF (kundwurzel = NIL) THEN
kundwurzel := zeiger;​
ELSE
IF (vater ↑.name < partner↑.name) THEN
vater ↑.rechts := zeiger;​
ELSE
vater ↑.links := zeiger;​
ENDIF;​
ENDIF;
RETURN TRUE;​
END EinfügePartner;
 
Zuletzt bearbeitet:
d)

PROCEDURE OutputPartner(pos: PARTNERZGR);
BEGIN
IF (pos ≠ NIL) THEN
CALL OutputPartner(pos↑.links);
CALL OutputEinPartner(pos);
CALL OutputPartner(pos↑.rechts);​
ENDIF;​
END OutputPartner;
 
e)

FUNCTION AktualisiereWert(root: PARTNERZGR, partnername : STRING, betrag : REAL) : BOOLEAN;
DATA
VARIABLE zeiger : PARTNERZGR;​
BEGIN
zeiger := root;
WHILE (zeiger ≠ NIL) DO
IF (CompareStrings(zeiger↑.name, partnername) < 0) THEN
zeiger := zeiger↑.rechts;​
ELSEIF (CompareStrings(zeiger↑.name, partnername) = 0)
zeiger↑.wert := zeiger↑.wert + betrag;
RETURN TRUE;​
ELSE
zeiger := zeiger↑.links;​
ENDIF;​
ENDWHILE;
RETURN FALSE; { partnername nicht gefunden }​
END AktualisiereWert;
 
g)

FUNCTION IstKundeLieferant(root : PARTNERZGR, kundenname : STRING) : INTEGER;
BEGIN
IF (root ≠ NIL) THEN
CALL IstKundeLieferant (root↑.links);
IF (CompareStrings(root↑.name, kundenname) = 0) THEN RETURN root↑.nummer;
CALL IstKundeLieferant (root↑.rechts);​
ENDIF;
RETURN 0;​
END IstKundeLieferant;
 
Zurück
Oben