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.