![]() |
C# LowHigh Programmieren
Hey, ich versuche schon die ganze Zeit mein LowHigh Spiel, in C# programmiert, zu vollenden, allerdings schaffe ich es nicht. Ich bekomme den Algorithmus nicht auf die Reihe, das regt mich tierisch auf. Ich bin noch ganz am Anfang, habe noch nicht viel gelernt :dozey: , aber das muss doch irgendwie hinhauen. Könnt ihr mir vielleicht helfen? Hier einmal der Quelltext, so wie er im moment ist funktioniert der nicht, müsste angepasst werden ist nämlich nur ein Ausschnitt aus dem Gesamtprogramm :
Code:
using System; |
dann hast du selbst nicht viel ahnung
den hättest du dir den code angesehen, wüsstest du auch was er will |
Ich besuche seid gut einem Monat eine Berufsschule für TAI (Technischer Assistent für Informatik).
Habe keinerlei vorkenntnisse und das ist alles total neu für mich. Kleine, leichte Sachen wie einen "Taschenrechner" oder sowas kann ich Programmieren oder halt sowas wie dieses Spiel "LowHigh", allerdings schaffe ich es nicht den Algorithmus zu schreiben, sodass der Computer meine Zahl erraten soll, die ich mir ausgedacht habe. Ich habe vor meiem geistigen Augen schon die "Lösung" kann diese nur nicht richtig umsetzen. Ich möchte nämlich das der Computer, die ausgedachte Zahl, zwischen 1 und 1000 , herausfindet unzwar mit sowenig wie möglichen Versuchen. Dafür muss man halt "nur" den Bereich eingrenzen, d.h. es müsste wie folgt aussehen : Computertipp : 500 Benutzer : Zahl ist kleiner // D.h. der Bereich ist zwischen 1 und 500 offen. Dann wieder die Hälfte. Computertipp : 250 Benuutzer : Zahl ist größer // D.h. der Bereich ist nun zwischen 250 und 500 Computertipp : 375 Benutzer : Zahl ist größer // Bereich : 375 und 500 Computertipp : 438 (oder so) Und dann wieder aussuchen größer oder kleiner, allerdings schaffe ich das nicht umzusetzen. Das der Benutzer die Zahl des computers rät habe ich geschafft nur andersrum nicht, ... :S Bitte helft mir ... Ich habe keine "richtigen" tutorials gefunden, ich habe schon nach "binärem suchen" geschaut, habe nämlich den tipp von meinem lehrer bekommen, allerdings habe ich das nicht richtig verarbeiten können was ich gefunden habe. Nein programmieren soll mir hier keiner was, ich will nur wissen wie ich vorgehen muss. Es gibt so viele Funktionen und Möglichkeiten, die ich mit meinen minimalsten Grundkenntnissen ja gar nicht wissen kann und somit sehr stark eingeschränkt bin was das programmieren angeht. Deshalb bitte ich um eine kleine Hilfestellung bzgl meines Problems :S Also im Endeffekt muss ich nur wissen wie ich die Variablen zwischenspeichern kann, sodass das Programm darauf wiederzurückgreifen kann um festzustellen wie groß der Bereich, bzw wie klein, geworden ist , weil sonst würde es so aussehen bzw tut es bei mir im moment. Bsp. meine Zahl ist 233 500 kleiner 250 kleiner 125 kleiner 67 größer 134 größer 268 (wenn ich jetzt aber kleiner mache kommt das hier raus ): 134 d.h. ich komm nicht dazwischen :S |
ich denke er weiß nicht wie er dann die zahl erraten soll aber für diese spiel gibt es glaub genug anleitungen im netz
|
Hm, okay HababaX ich habe meinen 1. post editiert und habe dort mal den KOMPLETTEN Quelltext gepostet. :)
Hoffe du kannst es jetzt besser verstehen. |
Überleg doch mal wie viel Bit du brauchst um den Zahlenbereich 0-1000 abzudecken.
MFG Melfis |
Ähm... 1 Byte = 8 bit, , 10 bit oder? 0000.0011 1110.1000 (also 2 byte) oder irre ich mich ?
|
Jap, 10 bit decken den ganzzahligen raum von 0 bis 1023 ab.
Soo.. jetzt stellst der PC nach der Reihe für jedes Bit eine frage(Zahl=400): PC: 512 Du: Kleiner (->false) -> das 10te Bit ist false 0????????? PC: 256 Du: Größer (->true) -> das 9te Bit ist true 01???????? PC: 384 (Die Bekannten Informationen 256 + das 8te Bit 2^(8-1)=128 ) Du: Größer -> das 8te Bit ist true 011??????? ... usw. aus dieser Systematik solltest du dir eigentlich einen Code basteln können MFG Melfis |
Ah, okay das hat mir schonmal geholfen die Denkweise zu ändern. Das ist die "Binäre Suche" richtig?
Ich hab dazu aber noch eine Frage, so theoretisch hört sich das ganz einfach an, nur in der Praxis ist es ein wenig schwerer umzusetzen, finde ich, weil ich nicht genau weiß wie ich diese Abfrage bzw Überprüfen von den Bits machen kann ... |
Wie weit seit ihr in der schule?
Im Prinzip brauchst du nur: 1 Array 1 Schleife ein paar if-Else Bedingungen Die Abfragen stehen prinzipiel in meinen Vorpost, überlege dir mal was sich grob wiederhohlt, und welche feinheiten sich ändern. Schlaf mal ne Nacht drüber, gn8. MFG Melfis |
Wir sind noch nicht weit ... "man ist so stark wie das schwächste Glied in der Kette" passt ganz gut, ... der Unterricht ist so angepasst das alle mitziehen können, naja egal...
Mit if-else kann ich umgehen und Schleifen haben wir gerade gelernt, aber die sind ja auch relativ einfach anzuwenden. Arrays habe ich noch nicht kennengelernt, sind die Arrays notwendig? Den Vorgang verstehe ich Melfis, also was du davor geschrieben hast, nur die Vokabeln welche ich brauch um das zu schreiben und dessen Funktionen , zbsp von Arrays weiss ich leider (noch) nicht und kann somit damit nicht arbeiten :S Naja, ja mach ich mal :) danke, g8n ;) |
Nein, Du brauchst keine Arrays.
In Worten hast Du deinen Algorithmus auch schon ganz gut beschrieben. Als Tipp nimmst du immer die Zahl, die in der Mitte Deines Suchintervalls liegt. Anfangen tust Du mit dem Intervall von 1 bis 1000. Erster Tipp ist also (1+1000)/2=500 (abgerundet). Je nachdem, ob die Zahl größer oder kleiner ist, machst Du mit (500,1000) bzw. mit (1,500) weiter bis Du die Zahl gefunden hast. Du musst Dir im Wesentlichen nur die Ober- und die Untergrenze des Intervalls merken. Kleiner Hinweis: Was passiert, wenn Ober- und Untergrenze direkt nebeneinander liegen? |
Epeos, danke.
Ähm... wie meinst du das ? Also die Rechnung ist : (1+1000)/2=500 bzw. (minwert+maxwert)/2=mittelwert Das verstehe ich, aber ich weiss nur nicht wie ich das automatisieren kann. Ich kann natürlich alles bis aufs letzte manuell schreiben, aber das sind dann ja zich Zeilen... Ja, die Ober- und Untergrenze merken, das ist ja was ich will, ich weiß allerdings nicht wie ich das genau angehen kann :( Hm falls du das hier meinst 234 und 235 dann ist da was verkehrt gelaufen ... :'D Aber schon mal danke das du mir hilfst. ;) an die anderen auch schonmal ein danke für die jetztige Hilfe :) |
Kann mir keiner bei meinem Anliegen behilflich sein? :(
|
Code:
using System; Ne, ein Array braucht man nicht, würde aber die binäre Suche veranschaulichen Hier, dann hat das Elend ein Ende:p Ne mal im ernst, Kontrollstrukturen sind das A und O bei der Programmierung. Wenn du mit switch case nichts anfangen kannst, geht auch mit if-else. Alles was sich am stück wiederhohlt: Schleife Alles was sich sporadisch wiederhohlt: Methode MFG Melfis |
@Melfis: Das ist schon mal eine Struktur als Vorgabe. Aber du solltest schon dazu schreiben, dass das nicht die endgültige Lösung ist :-)
@zaisheng: In Melfis Code musst Du in den switch-Cases die richtige Berechnung für die Ober- und Untergrenze einsetzen und den neuen Tipp ausrechnen. Das muss dann in etwa so aussehen: Code:
int untergrenze=0; |
@Melfis: Das ist schon mal eine Struktur als Vorgabe. Aber du solltest schon dazu schreiben, dass das nicht die endgültige Lösung ist :-)
@zaisheng: In Melfis Code musst Du in den switch-Cases die richtige Berechnung für die Ober- und Untergrenze einsetzen und den neuen Tipp ausrechnen. Das muss dann in etwa so aussehen: Code:
//variablen einmal initialisieren |
@Epeos: Das ist nicht nur die Struktur, das ist das "PC ratet" Programm, man muss keine Ober und Untergrenze berechnen. Kannst es ja gerne ausprobieren
Den Umgekehrten fall "Mensch ratet" hab ich mir gespart, weil der "PC" ja nur "größer kleiner richtig" schreien muss ^^ |
Okay danke, aber irgendwie verstehe ich das nicht so ganz, was ist denn :
System.Math.Pow ? Aufjedenfall ist es super nett von euch das ihr mir das jetzt so gemacht habt, obwohl ich das nicht mal unbedingt wollte, aber es wäre sehr schön, Melfis, wenn du ggf. die Schritte kommentieren könntest :S Hoffe das ist nicht zu viel verlangt, ich hab mir das jetzt angeschaut und so, verstehe es auch teils, aber das mit System.math.pow nicht, das ist irgendwie aus dem nichts erschienen und wäre halt toll wenn du die schritte für mich kommentieren könntest :S Ich habe jetzt deinen Code, Melfis, in mein Programm implentiert, ich hoffe ich durfte das. Ich habe diesen auch ein wenig verändert und ich versuche zu verstehen was es mit diesem "System.Math.Pow" auf sich hat bzw. wie dein Programm diese Rechnung durchführt, naja hier ist jetzt mein Vollständiges Programm. Code:
using System; |
Langsam glaube ich das du kein interesse am Programmieren hast,
denn du entwickelst keine Eigeninitiative. C# hat (sowie jede andere Sprache) eine API/Doc mit der Standart-Libs, gib doch einfach mal "System.Math.Pow" in google ein, der ERSTE treffer beantwortet dir schon alle fragen. Viel Glück, Melfis |
Hm, das stimmt nicht. Falls ich den Eindruck gemacht habe tut es mir leid ;)
Ich bin sehr wohl interessiert das Programmieren zu erlernen und das mit google stimmt, hätte ich machen können oder sollen, aber das "api/doc mit der standard-libs" begreif ich auch nicht bzw hab kein schimmer was das ist und wenn ich das jetzt google kommt bestimmt wieder irgendwas mit fachausdrücken die ich wieder googlen muss :D ein teufelskreis. ;) naja egal dankeschön :) weisst du vlt wie es mit der "binären suche" funktionieren würde? habe bei google danach gesucht aber das alles nicht so richtig verstanden :( |
Du greifst deinem Kenntnisstand weit voraus. Versuche doch erst einmal dir die absoluten Basics anzueignen.
Kaufe ein gutes C# Buch (aus Papier!) und arbeite es durch, danach kommst du noch einmal in diesen Thread zurück. Du wirst feststellen, dass du dir mittlerweile die Fragen selbst beantworten kannst. Viele Grüße, haze303 |
Ja, ich habe vor mir "Visual C# 2010: Das komplette Starterkit für den erfolgreichen Einstieg" zu kaufen, das wurde uns nämlich in meiner Schule empfohlen. ;) Das werde ich die Tage bestellen, aber danke für den Tipp. ;)
ich glaube ich hab das jetzt verstanden mit dem "system.math.pow", also aufjedenfall in dem zusammenhang, denke ich, denn ich habe mir diese Seite angeschaut und durchgelesen : [Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...] Naja, ja haze303, ich weiß, der Kenntnisstand ist weiter voraus, aber wie gesagt, unser lehrer gab uns das halt nur für die, die sich mal an etwas rantasten wollen bzw etwas schwereres probieren wollen ;) Im moment haben wir "erst" die Schleifen gelernt und arbeiten jetzt damit , bis vor kurzem haben wir halt nur Programme erstellt, die für uns Sachen errechnen sollen etc. :P |
@Melfis: Hast recht, chapeau. Auf die Idee, die neuen Tipps über 2^i zu berechnen, bin ich noch gar nicht gekommen. Spart die Probleme mit dem Runden.
@zaisheng: [Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...] gibt's ein kostenloses Buch zu C# und im IT-Handbuch für Fachinformatiker gibt es auch zwei Kapitel über Programmierung. Die Erklärungen für C kannst Du weitestgehend für C# und Java übernehmen. Die grundlegende Syntax für Schleifen, Bedingungen und einfache Arithmetik ist in den drei Sprachen gleich (ok, die Profis werden hier jetzt gleich die Sonderfälle posten, bei denen ich Unrecht habe ;-) ) |
Danke, Epeos, aber das hab ich schon runtergeladen :) hat unser Lehrer uns schon gegeben. Kam aber noch nicht dazu das Komplett durchzulesen ... aber trotzdem danke.
Haha :D Naja, aber egal, ihr habt mir sehr geholfen. :) Ich bleib erstmal dabei das weiter zu machen was ich kann und mir schritt für schritt was neues , neben der schule, bei zu bringen ;) |
kein wunder, dass melfis glaubt, dass du keine lust hast dich mit dem programmieren auseinander zu setzen, denn wenn du nicht mal lust hast im wiki nachzusehen weil du angst vor neuen begriffen hast, welche du nicht verstehst dann sieht es schlecht aus! du wirst als programmierer immer wieder dir neues anlesen müssen! api-docs sind das "a" und "o" falls du mal gegen eine bestimmte api programmieren möchtest!
|
Ihr habt einen ganz falschen Eindruck, ich bin weder faul noch desinteressiert.
Das müsste man eig. schon daran erkennen das ich eine Aufgabe gemacht habe, die gar nicht nötig war, d.h. eine Zusatzaufgabe gemacht habe, die unser Lehrer uns gegeben hat, falls wir mal was "kniffeliges" machen wollen. Ich will jetzt aber natürlich nicht so viel zusätzlich lernen das ich dumm rum sitze im Unterricht, das ist ja nicht der Sinn der Sache, aber trotzdme danke. :) |
Hey. nichts ist geiler, als wenn Du im Info-Unterricht mehr weisst als der Lehrer :)
|
Hatte jetzt keine zeit den ganzen Tread zu lesen, aber der gesuchte Algorithmus heißt "teilen und herrschen".
|
Ah, hab schon gesehen das meine Idee hier im Post #20 eh schon gelöst drinn steht, darum sind weitere erklärungen eh überflüssig.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:18 Uhr. |
Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.