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.