Fighter_MV
11. Januar 2007 - 15:00 Uhr
Nun ja, vielleicht kann mir einer von euch helfen.
Ich habe folgendes Problem:
Ich soll ein Programm schreiben (Programmcode interessiert nicht ich brauche nur den Lösungsweg) und komme nicht auf den Weg.
Also in das Programm werden zwei Zahlen eingegeben und es soll ausspucken, welche der beiden die größere ist.
Das gemeine ist, ich darf nur mit + und - arbeiten, also nicht mit (<, >, usw).
Das ganze soll rekursiv geschehen.
Am besten erkläre ich es am Beispiel einer anderen Aufgabe.
Dort war verlangt nur mit Hilfe von + und - zu überprüfen ob zwei Zahlen gleich sind.
Das sah dann wiefolgt aus:
Das Programm heißt "überprüfen"
x und y kommen rein
ich gebe an, dass das Program "überprüfen" noch mal aufgerufen werden soll und zwar mit den Zahlen 0 und (x-y) (das ist rekursiv)
Nun überprüfe ich ob in das Programm 0 und y reinkommt (dann waren die Zahlen nicht gleich), oder
ob in das Programm 0 und 0 reinkommt (dann waren die Zahlen gleich)
So, soviel zum Schema, hat irgendjemand ne Idee wie ich das mit dem größer, kleiner machen kann?
Gruß
Fighter
Jack4x4
11. Januar 2007 - 15:07 Uhr
Also ich hab kein Plan lol....
aber du solltest vll. Systemless pmen, der kennt sich bei solchen sachen gut aus
fenriswolf22
11. Januar 2007 - 15:19 Uhr
Kannst du das nicht mit dem gleichen Lösungsweg machen und wenn das Ergebniss negativ ist ist die zweite Zahl grösser wenn es positiv ist die erste Zahl?
Fighter_MV
11. Januar 2007 - 15:26 Uhr
ne, das programm erkennt nicht, ob ne zahl positiv oder negativ ist.
Aber selbst wenn es das könnte, hätte ich ne neue Zahl die ins Programm kommt und somit könnte ich nicht mehr auf die ursprünglichen Zahlen zugreifen (von welchen ich ja die größere zurückgeben soll)
Tumbil
11. Januar 2007 - 15:30 Uhr
Hab keine Ahnung vom Programmieren aber vllt. gehts so:
Man subtrahiert einmal beide Zahlen von einander also:
X-Y=
und
Y-X=
Wenn bei einer ein Aufgabe ein Negatives Ergebiss rauskommt so wissen wir das die Zahl von der was subtrahiert wird die kleine Zahl ist. zb nehmen
Beispiel
X 15 und für Y 28
15-28= (-13)
28-15= 13
Ob das bei negativen Zaheln auch geht weis ich nicht genau, aber glaub schon.
Ich weis das das totaler Crap ist, was ich laber aber mir ist langweilig
EDIT: hab grad erstgesehen das es keine negativen zahlen erkennt

Dieser Beitrag wurde von Tumbil bearbeitet: 11. Januar 2007 - 15:33 Uhr
Fighter_MV
11. Januar 2007 - 15:32 Uhr
jo, aber wie gesagt, wie kann ich von -13, wieder zurück auf 15 und 28 kommen, um dannach 28 anzugeben, die beiden Werte werden ja gelöscht, sobald ich das programm neu aufrufe
Keksmann
11. Januar 2007 - 16:35 Uhr
x und y in Deine Rekursive_Funktion (x, y) eingeben.
Rekursive_Funktion subtrahiert beide um 1:
x--
y--
und testet, ob eine der Zahlen == 0 ist.
Ist keine Zahl == 0 (Rückgabe ist FALSE), ruft sich Rekursive_Funktion(x, y) solange selbst auf und subtrahiert, bis das der Fall ist (Rückgabe ist TRUE).
Die andere Zahl ist dann die größere Zahl.
Funktioniert natürlich nur bei Zahlen > 0.

Fighter_MV
11. Januar 2007 - 17:34 Uhr
ja Keksmann, das ist genau der richtige Weg.
Mir bleibt nur die Frage offen, wie ich mitzählen kann, wie oft die Rekursion aufgerufen wurde, um wieder auf die ursprüngliche Zahl zu kommen.
Die Ausgabe soll nicht lauten (die erste Zahl war größer)
Sondern
4 war größer (als 2 zum beispiel)
Systemless
11. Januar 2007 - 17:43 Uhr
ja für positive Zahlen geht es so wie Keksmann beschrieben hat. Also
Grösser(x, y, delta) {
if (x - delta == 0) {
Ausgabe("y ist grösser als x")
return
}
if (y - delta == 0) {
Ausgabe("x ist grösser als y")
return
}
Grösser(x, y, delta + 1);
}
kenne deine Einschränkungen nicht genau, nehme mal an ein "==" Vergleich ist erlaubt, und man darf extra Parameter in der Funktion haben.
Edit: Falls es auch mit negativen funktionieren soll, dann so
Grösser(x, y, delta) {
if (x - delta == 0) {
Ausgabe("y ist grösser als x")
return
}
if (y - delta == 0) {
Ausgabe("x ist grösser als y")
return
}
if (x + delta == 0) {
Ausgabe("x ist grösser als y")
return
}
if (y + delta == 0) {
Ausgabe("y ist grösser als x")
return
}
Grösser(x, y, delta + 1);
}
.: Systemless :.
Fighter_MV
11. Januar 2007 - 17:50 Uhr
ja system, aber wir dürfen es leider net in Java programmieren, sondern in Haskell.
Es dürfen nur 2 Int zahlen in die Funktion rein und eine muss rauskommen (oder die Funktion wird rekursiv mit 2 int wieder augferufen)
Und wir sollen auch net schreiben
"x ist größer als y" das ginge ja auch noch, nein wir müssen den Wert der für x am Anfang eingegeben wurde zurück geben
Systemless
11. Januar 2007 - 18:01 Uhr
ja das mit der Ausgabe hab ich nur aus Schlamperei so geschrieben, aber die Zahlen hätte man ja eh auch.
Das mit nur 2 Int hab ich befürchtet lol, dann geht es so natürlich nicht. ^^
.: Systemless :.
Fighter_MV
11. Januar 2007 - 19:09 Uhr
juhuu System und ich hab haben noch ne Stunde rumüberlegt und dann hat ers rausgekriegt!
Danke noch mal!
