Einführung in die imperative Programmierung

WS 2015/16

Klausur 2014 Aufg3

program PascalDreieck;
  type 
  tRefListe = ^tListe; 
  tListe = record 
             wert:integer; 
             next:tRefListe 
           end;
 
  var 
  Liste,zeiger,neu, NeuZeile : tRefListe;
   
  function naechsteZeile(inListe: tRefListe) : tRefListe;
    var
    zeigerneu, zeigeralt, neuerKnoten, zeigerneuLetzter: tRefListe;
    vorWert:integer;
  begin
    vorWert:=0;
    zeigeralt:= inListe;
    zeigerneu:=nil;
    while zeigeralt<>nil do
    begin
      new(neuerKnoten);
      neuerKnoten^.wert:= vorWert + zeigeralt^.wert;
      neuerKnoten^.next:=nil;
      if zeigerneu=nil then
      begin
        zeigerneu:=neuerKnoten;
        zeigerneuLetzter:= neuerKnoten;
      end
      else
      begin
        zeigerneuLetzter^.next:= neuerKnoten;
        zeigerneuLetzter:= neuerKnoten;
      end; 
      vorWert := zeigeralt^.wert;
      zeigeralt:= zeigeralt^.next;
    end; {while}
    {letztes Element erzeugen}
    new(neuerKnoten);
    zeigerneuLetzter^.next := neuerKnoten;
    neuerKnoten^.wert := 1;
    neuerKnoten^.next := nil;
   
    naechsteZeile := zeigerneu;
   
  end;
   
  procedure drucken(inListe: tRefListe);
    var zeiger: tRefListe;
  begin
    zeiger:= inListe;
    while zeiger<> nil do
    begin
      write(zeiger^.wert, ' ');
      zeiger:= zeiger^.next;
    end;
    writeln();
  end;
BEGIN
  new(Liste);
  Liste^.wert:=1;
  Liste^.next:=nil;
  zeiger:=Liste;
   
  new(neu);
  neu^.wert:=4;
  neu^.next:=nil;
  zeiger^.next:=neu;
  zeiger:= neu;
   
  new(neu);
  neu^.wert:=6;
  neu^.next:=nil;
  zeiger^.next:=neu;
  zeiger:= neu;
   
  new(neu);
  neu^.wert:=4;
  neu^.next:=nil;
  zeiger^.next:=neu;
  zeiger:= neu;
  new(neu);
  neu^.wert:=1;
  neu^.next:=nil;
  zeiger^.next:=neu;
  zeiger:= neu;
   
  write(' ');
  drucken(Liste);
   
  neuZeile := naechsteZeile(Liste);
   
  drucken(neuZeile);
   
END.