ich mache momentan einen Anfängerkurs für Pascal und sitze an folgender aufgabe, aber ich komme einfach nicht auf die lösung. ich habe da echt ein blackout. könnte mir dazu jemand vielleicht helfen?
ich habe nur vermutungen, was richtig sein könnte, aber ich bräuchte halt eine fundierte lösung, damit ich weiss, ob ich falsch oder richtig liege.
wäre toll, wenn mir jemand dazu helfen könnte.
Gegeben sind die Konstanten- und Typdefinitionen
const
UNTEN = 0; { Array-Untergrenze }
OBEN = 10; { Array-Obergrenze }
type
tIndex = UNTEN..OBEN;
tFeld = array[tIndex] of integer;
Welche der folgenden Funktionen bestimmen das Maximum in einem Feld mit den variablen Grenzen inUnten und inOben korrekt?
Sie können davon ausgehen, dass beim (ersten) Aufruf der Funktionen stets
UNTEN <= InUnten <= InOben <= OBEN gilt.
(Bemerkung: Bei A-D handelt es sich um keine sinnvolle Anwendung der Rekursion.)
--> A:--> B:Code: Alles auswählen
function FeldMaxA ( var inFeld : tFeld; inUnten, inOben : tIndex) : integer; { bestimmt rekursiv das Maximum in einem Feld mit den Grenzen inUnten und inOben } var Mitte : tIndex; MaxL, MaxR : integer; begin if inUnten = inOben then FeldMaxA := inFeld[inUnten] else begin Mitte := (inUnten + inOben) div 2; MaxL := FeldMaxA (inFeld,inUnten,Mitte); MaxR := FeldMaxA (inFeld,Mitte+1,inOben); if MaxL > MaxR then FeldMaxA := MaxL else FeldMaxA := MaxR end end; { FeldMaxA }
--> C:Code: Alles auswählen
function FeldMaxB ( var inFeld : tFeld; inUnten, inOben : tIndex) : integer; { bestimmt rekursiv das Maximum in einem Feld mit den Grenzen inUnten und inOben } var Mitte : tIndex; MaxL, MaxR : integer; begin if inUnten = inOben then FeldMaxB := inFeld[inUnten] else begin Mitte := (inUnten + inOben) div 2; MaxL := FeldMaxB (inFeld,inUnten,Mitte); MaxR := FeldMaxB (inFeld,Mitte,inOben); if MaxL > MaxR then FeldMaxB := MaxL else FeldMaxB := MaxR end end; { FeldMaxB }
--> D:Code: Alles auswählen
function FeldMaxC ( var inFeld : tFeld; inUnten, inOben : tIndex) : integer; { bestimmt rekursiv das Maximum in einem Feld mit den Grenzen inUnten und inOben } var Mitte : tIndex; MaxL, MaxR : integer; begin if inUnten > inOben then FeldMaxC := inFeld[inUnten] else begin Mitte := (inUnten + inOben) div 2; MaxL := FeldMaxC (inFeld,inUnten,Mitte); MaxR := FeldMaxC (inFeld,Mitte+1,inOben); if MaxL > MaxR then FeldMaxC := MaxL else FeldMaxC := MaxR end end; { FeldMaxC }
--> E:Code: Alles auswählen
function FeldMaxD ( var inFeld : tFeld; inUnten, inOben : tIndex) : integer; { bestimmt rekursiv das Maximum in einem Feld mit den Grenzen inUnten und inOben } var Mitte : tIndex; MaxL, MaxR : integer; begin if inUnten > inOben then FeldMaxD := inFeld[inUnten] else begin Mitte := (inUnten + inOben) div 2; MaxL := FeldMaxD (inFeld,inUnten,Mitte); MaxR := FeldMaxD (inFeld,Mitte,inOben); if MaxL > MaxR then FeldMaxD := MaxL else FeldMaxD := MaxR end end; { FeldMaxD }
Code: Alles auswählen
function FeldMaxE ( var inFeld : tFeld; inUnten, inOben : tIndex) : integer; { bestimmt iterativ das Maximum in einem Feld mit den Grenzen inUnten und inOben } var i : tIndex; HilfMax : integer; { Hilfsvariable } begin HilfMax := 0; for i := inUnten to inOben do if inFeld[i] > HilfMax then HilfMax := inFeld[i]; FeldMaxE := HilfMax end; { FeldMaxE }