In der ersten Aufgabe aus der Einsendeaufgabe 2 muss ein Programm geschrieben werden, das aus einer einzugebenden unsortierten Zahlenfolge (integer-Zahlen) den Maximalwert sucht und diesen ausgibt.
Die Zahlenfolge wird mit der Zahl Null beendet, welche dann nicht mehr zur Folge gehört.
Da die Eingabe einer 0 das Ende der Zahlenfolge bedeutet muss das Programm in dem Fall einer „leeren“ Eingabefolge, also wenn direkt als erstes eine Null eingegeben wird, eine Anweisung mit writeln(‚Leere Eingabefolge!‘) ausgegeben werden.
Für die Lösung dieses Problems benötigt man defintiv eine Schleife, da man nicht weiß wie lange die Zahlenfolge sein wird und man benötigt durch die Verwendung der Schleife auch nicht allzu viele Variablen. Durch die Nutzung einer repeat-until-Schleife kann man dies leicht lösen. Innerhalb dieser Schleife fragt man mittels „readln“ einfach immer wieder eine Zahl ab und vergleicht diese mit der bisherigen Zahl in der Variable Max um zu schauen ob diese größer ist. Wenn dem so ist wird die Variable Max mit der Zahl überschrieben.
In meiner ersten Version der Lösung habe ich das ganze recht umständlich gelöst, da ich außerhalb der Schleife erst mal einen Wert abgefragt habe um zu überprüfen ob dies eine Null ist:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
program Maximum (input, output); { bestimmt das Maximum einer Folge von einzulesenden integer-Zahlen, endet mit der Eingabe 0 } var Eingabe, Max : integer; begin readln(Eingabe); Max := Eingabe; if Eingabe = 0 then writeln('Leere Eingabefolge!') else begin repeat begin if Eingabe > Max then Max := Eingabe; readln(Eingabe); { Einlesen wird nach Ueberpruefung durchgefuehrt, damit 0 nicht als Maximum möglich ist } end; until Eingabe = 0; writeln(Max); end; { else } end. { Maximum } |
Das ganze lässt sich aber auch etwas kürzer fassen, indem man die Prüfung ob nur eine Null eingegeben wurde einfach hinter die Schleife verfrachtet. Die Eingabe braucht man gar nicht prüfen, sondern kann einfach die Variable Max verwenden, da diese aufgrund der sofort beendeten Schleife dann nur den Wert Null enthalten kann:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
begin repeat begin readln(Eingabe); if Eingabe > Max then Max := Eingabe; end; until Eingabe = 0; if Max = 0 then writeln('Leere Eingabefolge!') else writeln(Max); end. { Maximum } |
Download der ersten Version:
EA2_A1_Maximum.zip
Download der optimierten Version:
EA2_A1_Maximum_optimiert.zip