Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Zahlenraten 2: Optimale Ratezahl berechnen


Anka - Mo 06.06.11 19:28
Titel: Zahlenraten 2: Optimale Ratezahl berechnen
Hallo Leute,
Würde gerne in main Zahlenraten-Programm einen Button für den user einbauen, der die optimale Zahl anzeigt, die der User raten kann, heißt, wenn der Zahlenbereich zwischen 1 und 100 liegt, soll der "Optimizer" die Zahl 50 ausgeben, sagt der Computer dann, diese ist zu klein, soll der Optimizer die Zahl 25 ausgeben ((1+50):2).

Wie bewerkstellige ich das mit möglichst wenig Code?

Liebe Grüße
Anka


Gausi - Mo 06.06.11 19:33

Meinst du sowas?

Delphi-Quelltext
1:
2:
OptimaleZahl := (LinkeGrenze + RechteGrenze) Div 2;
ShowMessage(IntToStr(OptimaleZahl));


Anka - Mo 06.06.11 19:50

Fast :) Ich hatte vergessen, eine klitzekleine Kleinigkeit zu erwähnen:

Der Compi gibt bei jeder vom User geratenen Zahl zusätzlich an, ob diese zu groß oder zu klein ist, heißt, wenn der User beispielsweise den Zahlenbereich 1 (diese ist immer vorgegeben) und 100 (diese Zahl ist vom User durch ein Editfeld frei wählbar) gewählt hat und 50 als geratene Zahl angegeben hat und der Compi sagt, dass diese zu klein ist, wüsste ich momentan nicht, wie ich das dem Optimizer-Button beibringen soll.
Mein erster Gedanke war einfach, linke bzw. rechte Grenze durch EdtRatezahl.Text bzw. durch EdtZahlenbereich.Text zu definieren, allersings wird dann das < bzw. > nicht mitberücksichtig.
Zweiter Gedanke war dann, dass ganze mit der if-Anweisung, die das < bzw. > auswertet, zu verknüpfen. Diese steht allerdings in einer ganz anderen Prozedur und es würde das ganze ineffizient machen.


HenryHux - Mo 06.06.11 19:53

Wie wär es wenn du immer die schon versuchte Zahlen, die am nächsten ober- und unterhalb der zu-eratenen-Zahl liegen speicherst und zwischen denen die Hälfte nimmst?

lg


Anka - Mo 06.06.11 20:03

Problem ist hier aber , dass a. bei Programmstart dann keine optimale Zahl ausgegeben werden kann und b. ich die erratene Zahl nicht kenne (Random-Zahl) und damit diese nicht speichern kann (du meintest jetzt mit Hilfe von Hilfsvariablen, oder habe ich etwas falsch verstanden?)


der organist - Mo 06.06.11 22:23

user profile iconAnka hat folgendes geschrieben Zum zitierten Posting springen:
Problem ist hier aber , dass a. bei Programmstart dann keine optimale Zahl ausgegeben werden kann und b. ich die erratene Zahl nicht kenne (Random-Zahl) und damit diese nicht speichern kann (du meintest jetzt mit Hilfe von Hilfsvariablen, oder habe ich etwas falsch verstanden?)

doch, du hast halt keine Wahl zwischen kleiner und größer und entscheidest dich am Anfang für die Mitte zwischen den Grenzen.

Variablen: untere Grenze, obere Grenze, rateZahl (alle Integer) und kleiner (Boolean)

Pseudocode (Erweiterung von Gausi):

Beginn_des_Spiels_Prozedur:
Bei Beginn des Spiels: obere Grenze rateZahl +1 // zugegeben, die ist fiktiv, da noch nicht geraten wurde...
kleiner := true;

Rateprozedur:
if kleiner then
ratezahl:=(untere Grenze+rateZahl)div 2
else
rateZahl:=(obere Grenze+rateZahl)div 2;


Du spielst dem Rechner vor, er hätte schon einmal geraten. Wichtig ist halt, dass du kleiner immer aktualisierst, aber das sollte mit deinem Programm ja möglich sein....