Aufgabe 3.1

Aufgabenstellung:

In der Vorlesung wurde die Datenstruktur Liste von Integer über folgenden Pascal-Datentyp implementiert:

type list = ^node;
      node = record x : integer; next : list; end;

Die nachfolgende Funktion doit verändert eine so gegebene Liste. Finden Sie heraus, wie.

function doit(l : list) : list;
 var anfang, hilf : list;
begin
 anfang := l;
 while l <> nil do begin
  hilf := l^.next;
  if hilf <> nil then begin
    l^.next := hilf^.next;
    l := l^.next;
  end else l := hilf;
 end;
 doit := anfang;
end;

a) Wenn man die Funktion doit auf folgende Liste anwendet, welche Liste wird zurückgegeben ?

48 51 54 57 60 73

b) Beschreiben Sie verbal, was doit tut.

Probelauf im Programm

program Test;

type list = ^node; node = record x : integer; next : list; end;

{ Vorgegebene Funktion } function doit(l : list) : list; var anfang, hilf : list; begin anfang := l; while l <> nil do begin hilf := l^.next; if hilf <> nil then begin l^.next := hilf^.next; l := l^.next; end else l := hilf; end; doit := anfang; end;

{ Liste ausdrucken } procedure print(l : list); var i:integer; begin i:=0; while (l<>nil) do begin i:=i+1; WriteLn(i,": ",l^.x); l:=l^.next; end; end;

var l:list; var n:array[1..6] of node;

begin { Liste erzeugen } n[1].x:=48; n[2].x:=51; n[3].x:=54; n[4].x:=57; n[5].x:=60; n[6].x:=73;

l:=@n[1]; n[1].next:=@n[2]; n[2].next:=@n[3]; n[3].next:=@n[4]; n[4].next:=@n[5]; n[5].next:=@n[6]; n[6].next:=nil;

{ Liste bearbeiten }

print(l); l:=doit(l);

print(l); end.

Kompilieren:

Christian-Schmitzs-G4:~/test cs$ gpc -o test main.pas

Testlauf:

Christian-Schmitzs-G4:~/test cs$ ./test
1: 48
2: 51
3: 54
4: 57
5: 60
6: 73
1: 48
2: 54
3: 60

Antwort:

Das Programm entfernt aus einer Liste jeden zweiten Eintrag.




Links
MBS Real Studio Plugins

In Erinnerung and den lächelnden Mac Plus, den man beim Start von Mac OS 1 bis X.1 sieht...