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 - Christians Software aus Nickenich