Ok, also dann hier mal eine Aufgabe, mit der ich noch nen kleines Problem habe...
Entwickeln sie einen Algorithmus zu einem Spielprogramm, welches eine von einem menschlichen Mitspieler ausgedachte ganze Zahl aus einem vorgegebenen Intervall [u,o] mit möglichst wenigen Versuchen errät. Dabei sollen zunächst zwei Zahlen u und o nach einer entsprechenden Eingabeaufforderung so lange eingelesen werden, bis u < o gilt.
Ihr Spielprogramm soll nun wiederholt auf ein Zahl aus diesem Intervall tippen, wobei der menschliche Mitspieler jeweils antwortet, ob diese Zahl richtig, zu klein oder zu groß ist (ohne dabei zu mogeln). Das Spielprogramm erwartet vom menschlichen Mitspieler als Tastatureingabe das Zeichen "=", wenn es die richtige Zahl erraten hat, ansonsten das Zeichen "<" bzw. ">", wenn die getippte Zahl zu klein bzw. zu groß war.
Sobald die gadachte Zahl erraten wurde, soll die Anzahl der vom Spielprogramm benötigten Rateversuche mit begleitendem Kommentar ausgegeben werden. Falls eine Eingabe des menschlichen Mitspielers früheren Eingaben widerspricht, soll der Algorithmus dies erkennen und das Spielprogramm nach Ausgabe einer entsprechend formulierten Meldung beendet werden. Anderenfalls soll gefragt werden, ob der Mitspieler ein weiteres Mal spielen möchte. Entsprechend der Antwort (Eingabe) ist ein neues Spiel zu beginnen oder das Spielprogramm zu beenden.
möglichst wenige Rateversuche erreicht man ja, wenn man von dem jeweiligen Intervall den Mittelwert bestimmt.
Hier mal das Programm, welches ich geschrieben habe:
PROGRAM zahlenraten
IMPLICIT NONE
INTEGER :: u, o, mittelwert, i
CHARACTER :: zeichen, nochmal
DO
DO
WRITE(*,*) 'Geben Sie die untere Grenze des Intervalls an.'
READ(*,*) u
WRITE(*,*) 'Geben Sie die obere Grenze des Intervalls an.'
READ(*,*) o
IF (u<o) EXIT
END DO
mittelwert=(u+o)/2
WRITE(*,*) 'Tipp: ', mittelwert
i=1
READ(*,*) zeichen
DO WHILE(zeichen/='=')
IF (zeichen=='<') THEN
o=mittelwert
ELSEIF (zeichen=='>') THEN
u=mittelwert
END IF
IF (mittelwert==(u+o)/2) THEN
WRITE(*,*) 'Fehler'
EXIT
ELSE
mittelwert=(u+o)/2
WRITE(*,*) 'Tipp: ', mittelwert
i=i+1
READ(*,*) zeichen
END IF
END DO
WRITE(*,*) 'Anzahl der Rateversuche: ', i
WRITE(*,*) 'Noch ein Spiel?'
READ(*,*) nochmal
IF (nochmal=='n') THEN
EXIT
END IF
END DO
END PROGRAM zahlenraten
Mein Problem ist jetzt, wie ich diese Fehlermeldung einbauen soll? Wir hatten das, wie oben zu sehen, mal mit einer if-Schleife versucht, das funktioniert aber so nicht.
Vielleicht hat ja jemand eine Idee, wie das zu lösen ist.
mfg Conny
P.S.: Sollte jemand das Programm benötigen bzw. den Compiler, dann bitte nochmal bei mir melden, hab den glaub mit ca. 10MB