Einführung
in die imperative Programmierung
WS 2016/17
Klausuraufgabe HK11 Aufgabe 5
type
tRefBinBaum=^tBinBaum;
tBinBaum=record
Wert:Integer;
links,rechts:tRefBinBaum
end;
function BaumSumme(inRefWurzel: tRefBinBaum): integer;
begin
if inRefWurzel<>nil then
begin
if (inRefWurzel^.links=nil) and (inRefWurzel^.rechts=nil) then
BaumSumme:=inRefWurzel^.Wert
else
BaumSumme:= inRefWurzel^.Wert+
BaumSumme(inRefWurzel^.links)+
BaumSumme(inRefWurzel^.rechts);
end
else
BaumSumme:=0;
end;
function BaumSumme(inRefWurzel: tRefBinBaum): integer;
begin
if inRefWurzel<>nil then
begin
BaumSumme:= inRefWurzel^.Wert+
BaumSumme(inRefWurzel^.links)+
BaumSumme(inRefWurzel^.rechts);
end
else
BaumSumme:=0;
end;
Klausuraufgabe HK11 Aufgabe 4 (noch fehlerhaft)
program liste;
type
tRefDVElement=^tDVElement;
tDVElement=record
Wert:integer;
next,prev:tRefDVElement
end;
procedure DVListenElementEntfernen(var ioKopf: tRefDVElement; inZahl: integer);
var
hilfezeiger: tRefDVElement;
gefunden: boolean;
begin
if ioKopf<>nil then
begin
hilfezeiger:= ioKopf;
gefunden := false;
while (not gefunden) and (hilfezeiger^.next<>nil) do
begin
if hilfezeiger^.Wert= inZahl then
gefunden:= true
else
hilfezeiger:= hilfezeiger^.next;
end;
if gefunden then
begin
if hilfezeiger^.prev=nil then
begin
ioKopf:= hilfezeiger^.next;
ioKopf^.prev:=nil;
end
else if hilfezeiger^.next=nil then
hilfezeiger^.prev^.next:=nil
else
begin
hilfezeiger^.next^.prev:=hilfezeiger^.prev;
hilfezeiger^.prev^.next:=hilfezeiger^.next;
end;
end;
end;
end;
begin
end.
Klausuraufgabe HK11 Aufgabe 4 (korrigiert)
procedure DVListenElementEntfernen(var ioKopf: tRefListe; inZahl: integer);
var
hilfezeiger: tRefListe;
gefunden: boolean;
begin
if ioKopf<>nil then
begin
hilfezeiger:= ioKopf;
gefunden := false;
while (not gefunden) and (hilfezeiger<>nil) do
begin
if hilfezeiger^.zahl= inZahl then
gefunden:= true
else
hilfezeiger:= hilfezeiger^.next;
end;
if gefunden then
begin
if hilfezeiger^.prev=nil then
begin
ioKopf:= hilfezeiger^.next;
ioKopf^.prev:=nil;
end
else
if hilfezeiger^.next=nil then
hilfezeiger^.prev^.next:=nil
else
begin
hilfezeiger^.next^.prev:=hilfezeiger^.prev;
hilfezeiger^.prev^.next:=hilfezeiger^.next;
end;
end;
end;
end;
Klausuraufgabe HK11 Aufgabe 4 mit Gesamtprogramm
program liste (input,output);
type
tRefListe = ^tListe;
tListe = record
zahl : integer;
next,prev : tRefListe;
end;
var
listenanfang : tRefListe;
zeiger : tRefListe;
endeListe : tRefListe;
eingabe : integer;
procedure alleDrucken(zuDrucken: tRefListe);
var
zeiger: tRefListe;
begin
zeiger := zuDrucken;
while zeiger <> nil do
begin
writeln(zeiger^.zahl);
zeiger:= zeiger^.next;
end;
writeln();
end;
procedure DVListenElementEntfernen(var ioKopf: tRefListe; inZahl: integer);
var
hilfezeiger: tRefListe;
gefunden: boolean;
begin
if ioKopf<>nil then
begin
hilfezeiger:= ioKopf;
gefunden := false;
while (not gefunden) and (hilfezeiger<>nil) do
begin
if hilfezeiger^.zahl= inZahl then
gefunden:= true
else
hilfezeiger:= hilfezeiger^.next;
end;
if gefunden then
begin
if hilfezeiger^.prev=nil then
begin
ioKopf:= hilfezeiger^.next;
ioKopf^.prev:=nil;
end
else
if hilfezeiger^.next=nil then
hilfezeiger^.prev^.next:=nil
else
begin
hilfezeiger^.next^.prev:=hilfezeiger^.prev;
hilfezeiger^.prev^.next:=hilfezeiger^.next;
end;
end;
end;
end;
BEGIN
listenanfang := nil;
endeListe := nil;
writeln('Eingabe der Zahlen, Beenden mit 0');
readln(eingabe);
while eingabe <> 0 do
begin
new(zeiger);
zeiger^.zahl := eingabe;
zeiger^.next:=nil;
if listenanfang = nil then
begin
listenanfang := zeiger;
listenanfang^.prev := nil;
endeliste:=zeiger;
end
else
begin
endeListe^.next:=zeiger;
zeiger^.prev:= endeListe;
endeListe := zeiger;
end;
readln(eingabe);
end;
writeln();
alleDrucken(listenanfang);
DVListenElementEntfernen(listenanfang, 4);
alleDrucken(listenanfang);
END.