Einführung
in die imperative Programmierung
WS 2017/18
Hauptklausur 2014 Aufg3
program liste (input,output);
type
tRefListe = ^tListe;
tListe = record
wert : integer;
next : tRefListe;
end;
var
listenanfang : tRefListe;
zeiger : tRefListe;
endeListe : tRefListe;
B : tRefListe;
eingabe : integer;
procedure alleDrucken(zuDrucken: tRefListe);
var
zeiger: tRefListe;
begin
zeiger := zuDrucken;
while zeiger <> nil do
begin
writeln(zeiger^.wert);
zeiger:= zeiger^.next;
end;
end;
function pascalDreieck( inA: tRefListe) : tRefListe;
var B,zeigerA,zeigerB,zeigerBVorgaenger: tRefListe;
vorher:integer;
begin
new(B);
B^.wert := 1;
B^.next := nil;
vorher:= inA^.wert;
zeigerA:= inA^.next;
zeigerBVorgaenger := B;
while zeigerA<>nil do
begin
new(zeigerB);
zeigerBVorgaenger^.next := zeigerB;
zeigerB^.wert := zeigerA^.wert + vorher;
zeigerB^.next:= nil;
zeigerBVorgaenger := zeigerB;
vorher:= zeigerA^.wert;
zeigerA:= zeigerA^.next;
end;
new(zeigerB);
zeigerBVorgaenger^.next := zeigerB;
zeigerB^.wert:=1;
zeigerB^.next := nil;
pascalDreieck:= B;
end;
BEGIN
listenanfang := nil;
writeln('Eingabe der Zahlen, Beenden mit 0');
readln(eingabe);
while eingabe <> 0 do
begin
new(zeiger);
zeiger^.wert := eingabe;
zeiger^.next:=nil;
if listenanfang = nil then
listenanfang := zeiger
else
endeListe^.next:=zeiger;
endeListe := zeiger;
readln(eingabe);
end;
writeln();
alleDrucken(listenanfang);
writeln();
B := pascalDreieck(listenanfang);
alleDrucken(B);
END.