program testeFeldZweitMax (input, output); { testet die Funktion FeldZweitMax }
const FELDGROESSE = 10;
type tIndex = 1..FELDGROESSE; tFeld = array [tIndex] of integer;
var Feld : tFeld; i : integer;
function FeldZweitMax (var inFeld : tFeld) : integer; var max1,max2, i, Tausch: integer; begin max1:= inFeld[1]; max2:= inFeld[2]; if max2>max1 then begin Tausch:= max2; max2:=max1; max1:=Tausch; end; for i:=3 to FELDGROESSE do begin if inFeld[i]> max1 then begin max2:= max1; max1:= inFeld[i]; end else if inFeld[i]> max2 then max2:= inFeld[i]; end; FeldZweitMax:= max2; end; begin { Testprogramm } writeln('Bitte geben Sie ', FELDGROESSE, ' Zahlen ein:'); for i := 1 to FELDGROESSE do read (Feld [i]); writeln('Die zweitgroesste Zahl ist ', FeldZweitMax (Feld), '.'); end. { testeFeldZweitMax }
program testeListenMaxBestimmen (input, output); { Testet die Prozedur ListenMaxBestimmen }
type tRefListe = ^tListe; tListe = record info : integer; next : tRefListe end;
var Liste : tRefListe; Max : integer; OK : boolean;
procedure ListenMaxBestimmen ( inRefAnfang: tRefListe; var outMax : integer; var outOK : boolean); var zeiger: tRefListe; begin if inRefAnfang=nil then outOK := false else outOK := true; if outOK then begin outMax:= inRefAnfang^.info; zeiger := inRefAnfang; while zeiger^.next<>nil do begin zeiger:= zeiger^.next; if zeiger^.info > outMax then outMax := zeiger^.info; end; end; end; procedure LiesListe(var outListe : tRefListe); { Liest eine (evtl. leere) Liste ein und gibt deren Anfangszeiger outListe zurueck. }
var Anzahl : integer; i : integer; neueZahl : integer; Listenanfang, Listenende : tRefListe;
begin Listenanfang := nil; repeat write ('Wie viele Zahlen wollen Sie eingeben? '); readln (Anzahl); until Anzahl >= 0; write ('Bitte geben Sie ', Anzahl, ' Zahlen ein: ');
{ Liste aufbauen } for i := 1 to Anzahl do begin read (neueZahl); if Listenanfang = nil then begin new (Listenanfang); Listenanfang^.next := nil; Listenanfang^.info := neueZahl; Listenende := Listenanfang; end else begin new (Listenende^.next); Listenende := Listenende^.next; Listenende^.next := nil; Listenende^.info := neueZahl end { if Liste = nil } end; { for } outListe := Listenanfang; writeln end; { LiesListe }
begin LiesListe (Liste); ListenMaxBestimmen(Liste, Max, OK); if OK then writeln ('Das Maximum ist ', Max, '.') else writeln ('Leere Eingabefolge!'); end. { testeListenMaxBestimmen }
program TesteAnhaengen (input, output); { testet die Prozedur anhaengen }
type tRefListe = ^tListe; tListe = record info : integer; next : tRefListe end;
var Liste1, Liste2, Gesamtliste : tRefListe;
procedure anhaengen ( inRefAnfang1, inRefAnfang2 : tRefListe; var outRefAnfang : tRefListe); { Haengt die lineare Liste mit Anfangszeiger inRefAnfang2 an die Liste mit Anfangszeiger inRefAnfang1 an. Zurueckgegeben wird outRefAnfang, der Anfangszeiger der Ergebnisliste. } var zeiger: tRefListe; begin if inRefAnfang1=nil then outRefAnfang := inRefAnfang2 else if inRefAnfang2=nil then outRefAnfang := inRefAnfang1 else begin {bewege zeiger zum letzten Element der 1. Liste} zeiger := inRefAnfang1; while zeiger^.next<> nil do zeiger:= zeiger^.next; {Hänge 2. List an} zeiger^.next := inRefAnfang2; outRefAnfang := inRefAnfang1; end; end; procedure LiesListe(var outListe : tRefListe); { Liest eine (evtl. leere) Liste ein und gibt deren Anfangszeiger outListe zurueck. }
var Anzahl : integer; i : integer; neueZahl : integer; Listenanfang, Listenende : tRefListe;
begin Listenanfang := nil; repeat write ('Wie viele Zahlen wollen Sie eingeben? '); readln (Anzahl); until Anzahl >= 0; write ('Bitte geben Sie ', Anzahl, ' Zahlen ein: ');
{ Liste aufbauen } for i := 1 to Anzahl do begin read (neueZahl); if Listenanfang = nil then begin new (Listenanfang); Listenanfang^.next := nil; Listenanfang^.info := neueZahl; Listenende := Listenanfang; end else begin new (Listenende^.next); Listenende := Listenende^.next; Listenende^.next := nil; Listenende^.info := neueZahl end { if Liste = nil } end; { for } outListe := Listenanfang; writeln end; { LiesListe }
procedure gibListeAus (inListe : tRefListe); { gibt die Liste mit Anfangszeiger inListe aus } var ListenElement : tRefListe; begin ListenElement := inListe; while ListenElement <> nil do begin write(ListenElement^.info, ' '); ListenElement := ListenElement^.next; end; writeln; end; { gibListeAus }
begin { testeAnhaengen } writeln('Bitte geben Sie die erste Liste ein! '); LiesListe (Liste1); writeln;
writeln('Bitte geben Sie die zweite Liste ein! '); LiesListe (Liste2); writeln;
writeln('Die konkatenierte Liste lautet: '); Anhaengen (Liste1, Liste2, Gesamtliste); GibListeAus (Gesamtliste); end. { TesteAnhaengen }
program ListeInvertieren (input, output); { Testet die Prozedur ListenMaxBestimmen }
type tRefListe = ^tListe; tListe = record info : integer; next : tRefListe end;
var Liste : tRefListe; Max : integer; OK : boolean; procedure Invertieren( var ioRefAnfang: tRefListe);
var aktuell, vorheriges, naechstes: tRefListe; begin if ioRefAnfang<>nil then begin aktuell:= ioRefAnfang; vorheriges:= nil; naechstes:= aktuell^.next; aktuell^.next:= vorheriges; while naechstes<>nil do begin vorheriges := aktuell; aktuell:= naechstes; naechstes:= naechstes^.next; aktuell^.next:= vorheriges; end; ioRefAnfang := aktuell; end; end; procedure gibListeAus (inListe : tRefListe); { gibt die Liste mit Anfangszeiger inListe aus } var ListenElement : tRefListe; begin ListenElement := inListe; while ListenElement <> nil do begin write(ListenElement^.info, ' '); ListenElement := ListenElement^.next; end; writeln; end; { gibListeAus }
procedure ListenMaxBestimmen ( inRefAnfang: tRefListe; var outMax : integer; var outOK : boolean); var zeiger: tRefListe; begin if inRefAnfang=nil then outOK := false else outOK := true; if outOK then begin outMax:= inRefAnfang^.info; zeiger := inRefAnfang; while zeiger^.next<>nil do begin zeiger:= zeiger^.next; if zeiger^.info > outMax then outMax := zeiger^.info; end; end; end; procedure LiesListe(var outListe : tRefListe); { Liest eine (evtl. leere) Liste ein und gibt deren Anfangszeiger outListe zurueck. }
var Anzahl : integer; i : integer; neueZahl : integer; Listenanfang, Listenende : tRefListe;
begin Listenanfang := nil; repeat write ('Wie viele Zahlen wollen Sie eingeben? '); readln (Anzahl); until Anzahl >= 0; write ('Bitte geben Sie ', Anzahl, ' Zahlen ein: ');
{ Liste aufbauen } for i := 1 to Anzahl do begin read (neueZahl); if Listenanfang = nil then begin new (Listenanfang); Listenanfang^.next := nil; Listenanfang^.info := neueZahl; Listenende := Listenanfang; end else begin new (Listenende^.next); Listenende := Listenende^.next; Listenende^.next := nil; Listenende^.info := neueZahl end { if Liste = nil } end; { for } outListe := Listenanfang; writeln end; { LiesListe }
begin LiesListe (Liste); Invertieren(Liste); gibListeAus(Liste); end. { testeListenMaxBestimmen }