4
Übersicht

![]() |
Dicker HobbitBetreff: 4 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey leute ich möchte ein programm schreiben das zahlen zwischen 1 und 100 ausrechnet es dürfen aber nur rechenzeichen (plus minus mal durch) und 4 vieren verwendet werden (z.b8+8+8+8 = 16).
leider hab ich keine idee wie man das am besten anstellt danke schonmal im vorraus |
||
HavockToxx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
1. brauchst du n Abfrage, Welche Zahlen oder welche Vorzeichen genutzt werden darf.
2. eine Auswertungsystem, welcher dir dann das Ergebnis liefern soll. 3. eine Ausgabe in Form von Console oder Gui. Das hengt davon ab, ob du lieber n Console oder n Gui bei punkt 1 Verwenden willst. 1.1 Frage ist.... Formel = Wert +Vorzeichen+Wert2 +Anfrage ob mehr Dazukommt? 2.1 Wenn dann Wenn Anfrage = Ja dann Formel = Formel + VorzeichenNeu + WertNeu + Anfrage ob mehr dazukommt? Wenn Anfrage = Nein dann Ergebnis = Formel 3.1 Ausgabe in der Console "Print Ergebnis" Das alles ist nur Theoretisch. Wird dir aber n Denkanstoss geben, wie du selber auf so ein Taschenrechner kommst. MFG Havock Toxx |
||
![]() |
Mr.HydeNewsposter |
![]() Antworten mit Zitat ![]() |
---|---|---|
Weiterer Tipp:
Mit Mod ![]() |
||
BBP News RSS | Chaos Interactive | Watanien 2 Screens, Infos und Download | Watanien 2 Worklog | PuzzleMasters
http://abgeordnetenwatch.de - http://www.regierungs-beratung.de - Der Regierung auf die Finger schauen |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Leider geht aus deinem Beitrag nicht hervor, ob der User das ganze wie einen Taschenrechner betreiben wird, oder ob er die Aufgabe als einen Gesamttext erst mal angibt und dann der Computer die Aufgabe lösen soll.
Was du dann wahrscheinlich brauchst nennt sich "Parser". Das ist ein Code, der Texte (Strings) in seine einzelnen Elemente zerlegt und dann darauf mit bestimmten Funktionen reagiert. Deine Aussage mit den "4 Vieren" verstehe ich nicht. Danach schreibst Du ein Beispiel, bei dem 4 "Achten" vorkommen und die Lösung auf der rechten Seite ist auch noch falsch: 8+8+8+8=32 und nicht "16" ?!? Wie meinst Du das? Erläutere das bitte noch mal etwas genauer! |
||
![]() |
Dicker Hobbit |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja 4 * 8 ist naturlich 32 ich hatte mich verscrieben und meinte naturlich 4*4 ![]() um zu verdeutlichen was ich meine hab ich einen kleinen code geschrieben der aber noch nicht funktioniert. Ich würde mich freuen wenn ihr mir diesbezüglöich helfen könntet: BlitzBasic: [AUSKLAPPEN]
|
||
![]() |
count-doku |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dein Problem ist, wie dir der Debugger sicherlich auch gesagt hat,
dass Rand ![]() ![]() Einen Min- und einen Maxwert... D.h. du musst die Variablen in ein Array packen, damit du da die Indexes abrufen kannst. Gleiche Frage und die Lösung gabs hier schonmal: https://www.blitzforum.de/foru...hp?t=37364 Und am Besten noch Rnd zu Rand machen. Rnd liefert auch Kommawerte - Rand nicht. BlitzBasic: [AUSKLAPPEN] vier="4" lg, count-doku |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hier einige Gedanken zum Errechnen des Ergebnis aus dem Textstring:
also geht es um einen TextString. Da brauchst Du einen "Parser". Der Text wird von links nach rechts Zeichen für Zeichen zerlegt. Dabei treten folgende Schritte auf (Beispiel-String: Zitat: 3 + 4 - ...
A: Das aktuelle Zeichen "3" ist eine Zahl. Die wird gespeichert als ZAHL_A. B: Das aktuelle Zeichen "+" ist ein Rechenzeichen. Die Rechenoperation ("Addition") entdeckt und vermerkt. C: Das aktuelle Zeichen "4" ist eine Zahl. Die wird gespeichert als ZAHL_B. D: Das aktuelle Zeichen "-" ist ein Rechenzeichen. Die vorherige Rechenoperation wird zuerst abgeschlossen: Da nun ZAHL_A und ZAHL_B vorliegen kann die Rechenoperation beginnen. Du verzweigst in die Funktion Addition() und errechnest 3+4=7. Das Ergebnis wird zur neuen ZAHL_A. Die neue Rechenoperation ("Subtraktion") entdeckt und vermerkt. bei weiteren Schritten geht es bei C: weiter. Reduzierung des Codes: Schritt B und D sind fast identisch. Schritt A und C auch, aber... Die Schritte A und B laufen nur einmal ab. Da das erste Entdecken eines Rechenzeichens ja noch keinen Abschluss der "vorherigen" Rechenoperation auslösen kann, scheint für die erste Zahl und das erste Rechenzeichen die Vorgehensweise anders zu sein. Du kannst das aber geschickt umgehen, indem du einfach behauptest, die ZAHL_A stünde von Anfang an fest ("0") und auch die erste Rechenoperation ("+") wäre schon vorgegeben. So könntest Du mit der ersten Zahl "3" gleich bei C: einsteigen. Beispiel: Lass die ZAHL_A vor Beginn der Aktion "0" sein und die erste Rechenoperation ein "+". Dann ergibt sich bei einem Einstieg in C: 0 + 3 = 3 in Zahl_A. Das ist genau das gleiche was du mit den Schritten A und B erreicht hättest. So brauchst Du nur die Schritte C und D verwirklichen. Tipp: Entdeckt der Parser das Ende des String muss er noch die letzte Rechenoperation abschließen. Hier könnte noch einen Schritt E: nötig sein.... Auch hier gibt es einen Trick um das mit Schritt D: hinzubekommen: Hänge vor der Aktion an den String einfach ein "=" dran: Zitat: vom rnd():
4 x 4 - 4 + 4 besser: 4 x 4 - 4 + 4 = . So "entdeckt" der Parser ein Rechenzeichen ("=") und reagiert automatisch mit Schritt D. FRAGE: Wirst du "Punkt vor Strich" rechnen? 4 + 4 x 4 = 32 oder 4 + 4 x 4 = 20 ??? |
||
- Zuletzt bearbeitet von Midimaster am Fr, Jul 08, 2011 10:15, insgesamt einmal bearbeitet
![]() |
Dicker Hobbit |
![]() Antworten mit Zitat ![]() |
---|---|---|
danke schonmal für eure hilfe allerdings hab ich jetzt das problem das der operator jetzt als string gewertet wird und nicht eben als operator für eine rechnung (so weit ich das sehe)
Mein ziel war es das dann auch auszurechnen .... jetzt hab ich die frage wie ich das am besten anstelle mit meinem lösungsansatz funktioniert es nicht BlitzBasic: [AUSKLAPPEN]
|
||
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
DickerHobbit hat Folgendes geschrieben: Hey leute ich möchte ein programm schreiben das zahlen zwischen 1 und 100 ausrechnet es dürfen aber nur rechenzeichen (plus minus mal durch) und 4 vieren verwendet werden
Aber es sind doch gar nicht alle Zahlen erreichbar? 100 zum Beispiel ist unmöglich so darstellbar (oder ich bin einfach zu dumm, um eine Darstellung zu finden). Um das ganze mit einem Programm auszurechnen, gehst du mit Rand schon mal in die richtige Richtung. Das Problem hier ist aber, dass du mit Rand ja nie sicher bist, ob du alle Kombinationen durchprobiert hast. Besser also wäre es, wenn du gleich eine verschachtelte Schleife nimmst: BlitzBasic: [AUSKLAPPEN] For Operator1 = 0 To 3 Wenn die Schleife durchgelaufen ist, bist du sicher, dass du alle Kombinationen durchprobiert hast. Um das ganze dann auszurechnen, kannst du ja direkt die Operatoren benutzen, anstatt zuerst einen String zusammenzusetzen und den dann auszurechnen. Hier mal ein Beispiel, wie man es machen könnte: BlitzBasic: [AUSKLAPPEN] Dim Operator$(3) Diese Methode beachtet kein Punkt-Vor-Strich, wenn du das benötigst, musst du dir noch was überlegen. |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es ist ein großer Unterschied, ob Dein Code auf ein + oder einen String mit "+" stößt. Das eine ist ein Rechenzeichen, das andere ein Text, der so aussieht wie ein Rechenzeichen.
Daher musst Du diese Texte "auswerten" und in entsprechende Rechenoperationen uminterpretieren: BlitzBasic: [AUSKLAPPEN] If RechenZeichen="+" Then Nachfragen: Wird es sich immer nur um die Zahl 4 handeln? Ist auch 44 erlaubt? Wie ist das nun mit "Punkt vor Strich"? Wie meinst Du das mit den Zahlen bis 100? 4*4*4*4 wäre ja deutlich mehr als 100... Brauchst Du alle möglichen 64 Ergebnisse oder wirklich nur die, die sich per Zufall ergeben? |
||
![]() |
Dicker Hobbit |
![]() Antworten mit Zitat ![]() |
---|---|---|
ok also es sind nur die 4 vieren erlaubt (es geht übrigens um eine Hausaufgaben ![]() also weder 44 noch 4.4 außerdem wäre punkt vor strichrechnung auf alle fälle wichtig danke nochmal für diese große hilfe im forum |
||
![]() |
Dicker Hobbit |
![]() Antworten mit Zitat ![]() |
---|---|---|
es dürfen nur ergebniss unter hundert herauskommen (hab ich schon selbst gelöst) und ich benötige alle 64 ergebnisse | ||
![]() |
Dicker Hobbit |
![]() Antworten mit Zitat ![]() |
---|---|---|
hm also ich hab jetzte die ganze zeit versucht punkt vor strichrechnung einzubauen aber es will mir nicht gelingen ...kann mir jemand einen denkanstoß geben ?? ![]() |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Den "Denkanstoß", den dir Noobody gegeben hatte, war ja schon fast die gesamte Hausaufgabe....
also gut: bei Punkt vor Strich scannst Du die gesamte Zeile vor der ersten Aktion und suchst das "*" oder das "/"-Zeichen. Ist eines drin, dann schneidest Du aus dem String den Teil "ab der Zahl davor bis zur Zahl danach" heraus, sendest das an die Berechnung und setzt in den String an der herausgenommenen Stelle die Ergebniszahl wieder ein. Dann scannst Du wieder die gesamte Zeile und wiederholst gegebenenfalls diese Aktion. Beispiel: Code: [AUSKLAPPEN] 4 + 4 * 4 / 4 =
4 + / 4 = Berechnung: 4*4=16 4 + 16 / 4 = 4 + = Berechnung: 16/4=4 4 + 4 = Erst in einem zweiten Schritt wird nun auf "+" oder "-" gescannt Zum Zerlegen des Strings wirst Du Funktionen wie LEFT$(), MID$() benötigen. Soll das ganze aus der "Noobody"-Hausaufgabe entstehen, dann kannst du jetzt beweisen, dass Du nicht nur abschreibst. Allerdings wird der Weg jetzt komplizierter als wenn du von anfang an mit einem Parser gearbeitet hättest. |
||
HavockToxx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
HavockToxx hat Folgendes geschrieben: 1. brauchst du n Abfrage, Welche Zahlen oder welche Vorzeichen genutzt werden darf.
2. eine Auswertungsystem, welcher dir dann das Ergebnis liefern soll. 3. eine Ausgabe in Form von Console oder Gui. Das hengt davon ab, ob du lieber n Console oder n Gui bei punkt 1 Verwenden willst. 1.1 Frage ist.... Formel = Wert +Vorzeichen+Wert2 +Anfrage ob mehr Dazukommt? 2.1 Wenn dann Wenn Anfrage = Ja dann Formel = Formel + VorzeichenNeu + WertNeu + Anfrage ob mehr dazukommt? Wenn Anfrage = Nein dann Ergebnis = Formel 3.1 Ausgabe in der Console "Print Ergebnis" Das alles ist nur Theoretisch. Wird dir aber n Denkanstoss geben, wie du selber auf so ein Taschenrechner kommst. MFG Havock Toxx Das kommt halt dabei raus wenn man Zuwenige Infos bekommt um zu Helfen zu können. ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group