Pseudocode, größte Zahl ausgeben ohne Array?
Hi, ich habe von meinem Dozenten Folgende Aufgabe bekommen, ich soll bei den Algorithmen "max6" (1-6) und "max9" (1-9) jeweils die größte Zahl ausgeben lassen ohne einen Array zu verwenden. Stehe da etwas auf den Schlauch, irgenwelche Lösungsansätze?
7 Antworten
Das kommt absolut auf deinen Algorithmus an.
In welcher Sprache arbeitest du?
Was soll "max6" bzw. "max9" sein? Die max Funktion für 6 bzw. 9 Werte?
Also die Sprache ist C, aber im Pseudocode und "max 6/9" soll für den Algorithmus stehen, der für die natürlichen Zahlen 1-6 bzw. 1-9 die größte Zahl zurückgeben soll. Jedoch ohne einen Array zu verwenden.
Dir ist schon klar, dass es keinen "Pseudocode" gibt oder? Das kann alles bedeuten. Jeder Pseudocode kann anders aussehen - deshalb "Pseudo"
Sprache,
Dann nimm doch eine dynamische Liste. Scherz beiseite:
Wenn es sich um einen von vornherein gegebenen Bereich aufeinander folgender natürlicher Zahlen handelt, ist die Aufgabe müßig. Für diesen Fall hat LeonardM schon die nahezu optimale Antwort gegeben.
Um dem Professor etwas zu schmeicheln, kann man aber auch eine Zählschleife nehmen und hier den Index selbst anstelle des Array-Elements an dieser Stelle vergleichen.
Oder könnte es sein, dass die Zahlen nacheinander eingelesen werden (Benutzereingabe oder Datei)? Dann
solange nicht Eingabestream.Ende
...
Aber das widerspricht schon wieder der von Anfang an bekannten Anzahl der Elemente.
In C# sähe der Code z. B. so aus:
var max6Result = System.Linq.Enumerable.Range(1, 6).Max();
(verwendet kein Array, sondern ein Enumerable und einen impliziten Iterator)
die Max()-Methode kann man auch mal eben selbst implementieren - hierbei muss man allerdings entscheiden, was bei einer leeren Liste rauskommen soll.
Wieder C# - mit "Generics":
public static T Max<T>(this IEnumerable<T> list)
where T: IComparable<T>;
{
T retVal = DefaultValue<T>(); // DefaultValue<T>() ist geeignet zu implementieren
bool listIsEmpty = true;
foreach (T elem in list) {
if (listIsEmpty) {
retVal = elem;
listIsEmpty = false;
} else {
if (retVal.CompareTo(elem) < 0) { retVal = elem; }
}
}
if (!listIsEmpty) {
return retVal;
} else {
throw new ListIsEmptyException(); // ListIsEmptyException : Exception ist geeignet zu implementieren
}
}
Du benötigst für so einen Algorithmus einen Start- und einen Endwert, um den Zahlenbereich erst einmal einzuschränken. Dann prüfst du, welcher von beiden größer ist und gibst diesen zurück.
Oder du gibst gleich den letzten/höchsten Wert zurück, sofern dieser bekannt ist.
Die von dir formulierte Aufgabe ergibt irgendwie keinen Sinn und führt zu so schicken Funktionen, wie denen aus LenoardM's Antwort.
Kann es sein, dass du eher eine Funktion suchst, die das größte von jeweils sechs bzw. neun Argumenten liefert?
Wenn ja, dann in Pseudocode vielleicht so:
function max6(n1, n2, n3, n4, n5, n6) {
max = n1
if n2 > max: max = n2
if n3 > max: max = n3
if n4 > max: max = n4
if n5 > max: max = n5
if n6 > max: max = n6
return max
}
Wie die Funktion mit neun Argumenten aussieht, kannst du dir ja vermutlich schon denken.
Naja, viel Spaß noch ... was auch immer für eine Antwort du suchst. :)
Naja hey, dank neuer beschreibung konnte ich ja dann https://pastebin.com/Q7i1SGAX nachreichen :D
Steht in der Frage, Pseudocode.