Autor Beitrag
Anka
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mo 06.06.11 19:28 
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8553
Erhaltene Danke: 479

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mo 06.06.11 19:33 
Meinst du sowas?
ausblenden Delphi-Quelltext
1:
2:
OptimaleZahl := (LinkeGrenze + RechteGrenze) Div 2;
ShowMessage(IntToStr(OptimaleZahl));

_________________
We are, we were and will not be.
Anka Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 467
Erhaltene Danke: 17

WIN 7
NQC, Basic, Delphi 2010
BeitragVerfasst: 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....

_________________
»Gedanken sind mächtiger als Waffen. Wir erlauben es unseren Bürgern nicht, Waffen zu führen - warum sollten wir es ihnen erlauben, selbständig zu denken?« Josef Stalin