![]() |
Computer zahlen raten beibringen
Hallo,
ich möchte einen algorithmus schreiben, mit dem der computer zahlen erraten soll. und zwar nicht irgendwie, mit so wenig versuchen wie möglich. der benutzer gibt eine variable ein. der computer soll eine zufallszahl generieren (soweit bin ich schon längst), und dann so schnell es geht die zahl rausfinden. wie sollte ich diesen algo schreiben? wie bringe ich dem computer bei, dass er so wenig versuche wie möglich dafür braucht? und wie setze ich das programm technisch um? ich hatte erst an Rekursion gedacht, also sprich das der computer eine funktion aufruft, dort die zufällig gezogene zahl mit der von der benutzer eingegebenen zahl vergleich und die funktion dann einen jeweiligen rückgabewert liefert, ob die zahl nun größer sein muss, kleiner sein muss oder direkt die richtige war. mein problem hier ist nun, wie mach ich das mit den versuchen? der computer kann ja nicht zu seiner zufallszahl immer nur 1 addieren, er muss schon irgendwie wie ein mensch denken. Für eure Hilfe wäre ich euch sehr dankbar. Gruß Sebastian |
Re: Computer zahlen raten beibringen
Man kann aber den Wertebereich für die Zufallszahl festlegen.
|
Re: Computer zahlen raten beibringen
Er kann ja nach dem Intervallhalbierungsverfahren vorgehen.
D.h. es muss ein Intervall geben, in dem die Zufallszahl liegt. z.B. 0-1000
Delphi-Quellcode:
Dann nimmt er die Zahl in der Mitte
IntervalHigh := 1000;
IntervalLow := 500;
Delphi-Quellcode:
Jetzt testet er auf kleiner oder größer und setzt die Oberbzw. untergrenze neu.
Geraten:=Trunc((IntervalHigh-IntervalLow)/2);
Delphi-Quellcode:
Dann fängst du wieder oben an(also bei Geraten:=)
if zugroß then
IntervalHigh:=Geraten else if zuklein then IntervalLow:=Geraten; Ich würde keine Rekursion verwenden, ich sehe da an dieser Stelle keinen Vorteil drin. |
Re: Computer zahlen raten beibringen
vielen dank für eure antworten, ja ich hatte auch schon an so eine begrenzung gedacht, das würde es wirklich einfacher machen. auch ist die idee mit unter und obergrenze gut. das könnte ich auch gut in meine iteration bzw rekursion einbauen.
wenn ich als mensch zahlen rate, dann gebe ich erstmal auch eine zahl ein die in dem eingegebenen intervall liegt. wenn meine zahl zu groß ist schaue ich erst ob sie sehr viel größer bzw nur etwas größer ist wenn die zahl die ich erraten soll z. B. 300 ist, und das intervall zwischen 0 und 500 ist, dann wähle ich so meistens etwas aus der mitte, also sprich ca. 200 - 270. die zahl wäre aber in beiden fällen zu klein, also denke ich, es könnte 350 sein, die zahl wäre dann zu groß, somit weis ich die zahl liegt zwischen 250 und 350, dann könnte ich weiter probieren, aber nur in diesem intervall. ja es stimmt so könnte es gehen. Hat hier jemand noch eine ausgefuchstere bzw bessere idee? vielen dank euch allen |
Re: Computer zahlen raten beibringen
Das ist ja mit dem Intervallhalbierungsverfahren gemeint. Auch die binäre Suche bei Binärbäumen basiert auf diesem Prinzip.
|
Re: Computer zahlen raten beibringen
Mal ein Versuch:
Delphi-Quellcode:
var
Obergrenze, Untergrenze, Zahl, I: Integer; //... repeat I := Random(Obergrenze - Untergrenze) + Untergrenze; if I > Zahl then Obergrenze := I else if I < Zahl then Untergrenze := I else Break; until false; showmessage('Zahl gefunden: ' + IntToStr(I)); |
Re: Computer zahlen raten beibringen
jupp so gehts, hab ich gerade probiert, ich hatte es ja schon fast, nur das mit der untergrenze hatte vorhin nicht so geklappt,
damit wäre das problem gelöst vielen dank für alle antworten |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz