Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Combat
Anmeldungsdatum: 08.02.2009 Beiträge: 4
|
Verfasst am: 08.02.2009, 01:30 Titel: Hilfe für Taschenrechner |
|
|
Moin zusammen!
Ich bräuchte mal eure Hilfe...
Im www bin ich leider nicht fündig geworden zu dem was ich suche.
Und zwar soll ich im Assessment n Taschenrechner über QBasic programmieren, allerdings ist das völliges Neuland für mich.
Hatte zwar auch nach einigem Hin und Her einigermaßen funktioniert, aber zeigte mir zum einen kein Ergebnis an und zum anderen hab ich das dem Anblick der Leiterin recht umständlich geschrieben.
Der Funktion nach soll es um 2, 3 und 4 Zahlen gehen, sowie die 4 Grundrechenarten.
Allerdings ist der Ablauf sehr beknackt.
Frage nach den ersten 2 Werten, danach nach einem 3. Bei nein, jede Rechenart in der Reihenfolge einzeln abfragen "+" ja/nein "-" ja/nein "*" ja/nein "/" ja/nein.
Wird die 3. Zahl bejaht, geht danach jede einzelne Rechenartabfrage vonstatten.
Mit der 4. anschließend genauso.
Ist das Rechnen beendet entweder zum Anfang oder beenden.
Verwenden soll ich bloß die einfachsten Begriffe.
CLS
PRINT
PRINT A
INPUT
INPUT e$
IF e$...THEN
END
Und Lösungswege F=a+b (bzw. c und d noch dazu)
Bräuchte einmal den einfachen Weg, alles a+b+c+d etc.
Und alle möglichen Arten, also bspw. F=a+b*c-d
Wär schick wenn ihr mir da unter die Arme greifen könntet und n einfachen Weg habt/kennt.  |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 08.02.2009, 02:12 Titel: |
|
|
Ich würde mir da immer ein Zwischenergebnis merken. Soll der Taschenrechner Punkt vor Strich rechnen? Ich hoffe nicht ...
Code: | ' erste zwei Zahlen verarbeiten
IF operator1$ = "+" THEN ergebnis = zahl1 + zahl2
IF operator1$ = "-" THEN ergebnis = zahl1 - zahl2
IF operator1$ = "*" THEN ergebnis = zahl1 * zahl2
IF operator1$ = "/" THEN ergebnis = zahl1 / zahl2
' nächste Zahl verarbeiten
IF operator2$ = "+" THEN ergebnis = ergebnis + zahl3
IF operator2$ = "-" THEN ergebnis = ergebnis - zahl3
IF operator2$ = "*" THEN ergebnis = ergebnis * zahl3
IF operator2$ = "/" THEN ergebnis = ergebnis / zahl3 |
so in der Art. Ist zwar nicht sonderlich elegant, dafür aber einfach aufgebaut. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Combat
Anmeldungsdatum: 08.02.2009 Beiträge: 4
|
Verfasst am: 08.02.2009, 02:42 Titel: |
|
|
Da beginnt schon das erste Problem. Ich sollte keine weiteren Befehle benutzen als die, die da stehen.
Also wurde der op-Befehl schon wegfallen, CASE u.s.w.
Hatte ungefähr so angefangen:
Zitat: |
CLS
PRINT "Wähle Wert a"
INPUT a
PRINT "Wähle Wert b"
INPUT b
PRINT "Eine weitere Zahl, j oder n"
INPUT e$
IF e$ "j" THEN
IF e$ "n" THEN 10
PRINT "+ Addition"
INPUT e$
IF e$ "j" THEN 14
IF e$ "n" THEN 15
PRINT "F = a + b"
PRINT "- Subtraktion"
.
.
.
END |
Kann dabei überhaupt was rauskommen?
Oder hab ich da schon n generellen Fehler drin?
Sie meinte ich müßte halt jede Befehlszeile dadurch einzeln schreiben und das es damit auch etwas länger wird.
Problem ist, die sagen nicht viel wenn man fragt. Kriegst nur n Zettel vorgeschmissen und dann mach mal...
Also im Prinzip würde erstmal die Variante reichen
+ ++ +++
- -- ---
* ** ***
/ // /// |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 08.02.2009, 03:03 Titel: |
|
|
Ich habe keinen operator-Befehl verwendet, sondern eine Variable namens operator$. Du darfst sie natürlich gerne e$ nennen.
Bei den IFs fehlt wohl ein = zwischen e$ und "j"?
Ich würde erst die ersten beiden Zahlen und die zugehörige Rechenoperation abfragen, bevor du die nächste Zahl abfragst. Also
Code: | frage erste zahl ab
frage zweite zahl ab
frage rechenoperation ab
berechne zwischenwert
frage ab, ob eine weitere zahl eingeben werden soll
wenn ja:
frage dritte zahl ab
frage zweite rechenoperation ab
berechne zwischenwert
frage ab, ob eine weitere zahl eingeben werden soll
wenn ja:
frage vierte zahl ab
frage dritte rechenoperation ab
berechne endergebnis
gib ergebnis aus
frage nach, ob nochmal gerechnet werden soll
wenn ja: springe an den programmanfang (wie immer das mit den zur Verfügung stehenden Befehlen gehen soll ;) ) |
_________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Combat
Anmeldungsdatum: 08.02.2009 Beiträge: 4
|
Verfasst am: 08.02.2009, 03:25 Titel: |
|
|
Achso....
Richtig da war noch was...
Die Rechenoperationen soll ich allerdings alle einzeln abfragen lassen, angefangen mit Addition bis Division, anstatt eine Auswahl der 4 (was natürlich die sinnvollere Variante wäre... )
Und wie müßte die Befehlsfolge dann aussehen?
Und muß ich dann zu jeder ja - nein Frage die 2 Befehlszeilen darunter schreiben oder kann ich immer auf die selben Ja Nein Zeilen verweisen?
Danke übrigens für die Hilfe zu solch später Stunde..  |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 08.02.2009, 11:05 Titel: |
|
|
"frage rechenoperation ab" besteht halt dann aus mehreren Teilen. Wenn du ELSE verwenden darfst, dann so:
Code: | INPUT "Rechenoperation + (j/n)", e$
IF e$ = "j" THEN
ergebnis = zahl1 + zahl2
ELSE
INPUT "Rechenoperation - (j/n)", e$
IF e$ = "j" THEN
ergebnis = zahl1 - zahl2
ELSE
INPUT "Rechenoperation * (j/n)", e$
IF e$ = "j" THEN
ergebnis = zahl1 * zahl2
ELSE
INPUT "Rechenoperation / (j/n)", e$
IF e$ = "j" THEN
ergebnis = zahl1 / zahl2
ELSE
PRINT "Tut mir Leid, ich kann nur die Grundrechenarten rechnen."
END IF
END IF
END IF
END IF |
Ansonsten mit GOTO:
Code: | INPUT "Rechenoperation + (j/n)", e$
IF e$ = "j" THEN ergebnis = zahl1 + zahl2 : GOTO 10
REM wenn 10 die Zeile hinter der letzten Operator-Abfrage ist
INPUT "Rechenoperation - (j/n)", e$
IF e$ = "j" THEN ergebnis = zahl1 + zahl2 : GOTO 10 |
usw.
Ob ein Verweis auf immer dieselbe Ja-Nein-Abfrage sinnvoll ist, bezweifle ich. Schließlich musst du die Eingabe jedes mal etwas anders auswerten, und da wirst du dir durch den Verweis wohl keine Schreibarbeit sparen - eher im Gegenteil. Bei Verwendung einer Funktion sähe es schon wieder ein bisschen anders aus. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Combat
Anmeldungsdatum: 08.02.2009 Beiträge: 4
|
Verfasst am: 08.02.2009, 14:09 Titel: |
|
|
Nee ELSE war glaub auch nicht dabei. Aber das könnt ich ja einfach mal versuchen drunter zu schmuggeln..
Wofür steht das ELSE dann genau?
Ach "LET" war noch erlaubt.
Aber bei deinem ersten Code bricht er das Programm ab wenn ich j drücke.
Und ich bräuchte im Prinzip noch eine Befehlszeile für n. Im Moment würde er nur durch Enter die nächste Rechenart erfragen...
Und es müßte die Frage nach ein weiteren Zahl noch vor der Frage der Rechenart erfolgen und bei nein dann erst zu den 4 Rechenarten.
Wird also wahrscheinlich relativ lang, aber die wollen das leider so...:-/ |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 08.02.2009, 17:40 Titel: |
|
|
ELSE steht für "ansonsten" - wird ausgeführt, wenn die bei IF angegebene Bedingung nicht erfüllt ist.
Code: | IF bedingung = erfuellt THEN tuedies ELSE tuedas |
Die GOTO-Version ist in diesem Fall sogar kürzer und übersichtlicher; vielleicht wollen die das ja auch tatsächlich so haben ...
Meine Codes sind alle nur Bruchstücke. Natürlich brauchst du am Ende noch eine Ausgabe oder aber Weiterverarbeitung des Rechenergebnisses.
Ohne LET wäre das Programm wohl nicht machbar (Ihr sollt tatsächlich für eine Zuweisung LET dazuschreiben??) Aus
Code: | ergebnis = zahl1 + zahl2 |
wird dann
Code: | LET ergebnis = zahl1 + zahl2 |
Zitat: | Und ich bräuchte im Prinzip noch eine Befehlszeile für n. |
Was ist n? _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 08.02.2009, 18:28 Titel: |
|
|
Falls Du etwas Einfaches mit Parser bauen möchtest, wäre die umgekehrte polnische Notation von der Umsetzung her am einfachsten, weil sich ein Ausdruck schön von links nach rechts Glied um Glied auswerten lässt. Lediglich ein Stack wird benötigt, ebenso String-Befehle. Beispiel von mir:
http://beilagen.dreael.ch/QB/UPN_RECH.BAS
So sieht eine Sitzung aus:
Zitat: | C:\BASICPRG\QBASIC\FORUM>qbasic /run upn_rech
Ausdruck (leer=Ende):2 3 + 7 *
Ergebnis: 35
Ausdruck (leer=Ende):16 33 *
Ergebnis: 528
Ausdruck (leer=Ende):17 2 0 / +
Fehler: Division durch Null
Ausdruck (leer=Ende):
C:\BASICPRG\QBASIC\FORUM>_ |
Damit auch für Dich noch etwas "Arbeit" übrig bleibt, kannst Du folgende Features dazuimplementieren:
- Sinus, Cosinus und Wurzel, selbstverständlich auch jede sonstige Operation, z.B. Zahlen Pi und e, so dass Ausdrücke wie "100 75 Pi * 180 / cos *" möglich sind. Das Ganze natürlich mit Fehlerbehandlung
- Fehlerausgabe: Ein "^_-Zeichen, wo der Fehler steckt. Anleitung: Länge von a$ und a1$ beachten um mit SPACE$() entsprechende Anzahl Leerzeichen einfügen
- Zahlenparser: VAL() gibt einfach 0 zurück bei String, der z.B. mit Buchstaben beginnt -> isNumeric()-Funktion ergänzen, so dass "5 Bla +" ebenfalls passender Fehler generiert _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
spudder
Anmeldungsdatum: 13.02.2009 Beiträge: 6
|
Verfasst am: 14.02.2009, 18:39 Titel: |
|
|
Habe hier auch einen kleinen Taschenrechner gemacht.
Ist zwar noch nicht perfekt aber ist auch mein erstes mal.
Weiss jemand wie man Wurzeln mit einbeziehen kann?
Code: | Dim a as integer
dim b as integer
dim Summe as integer
dim Produkt as integer
dim Differenz as integer
dim Quotient as single
dim wahl as integer
dim Quadrat as single
INput "Geben sie die Operationsart ein, ( 1=plus,2=minus,3=mal,4=durch,5=quadrat) :", wahl
If wahl = 1 then
input " Gib die erste Zahl ein: ", a
input " Gib die zweite Zahl ein: ", b
Summe = a + b
color 12
Print " Die Summe ist "; Summe;
sleep
end if
If wahl = 2 then
input " Gib die erste Zahl ein: ", a
input " Gib die zweite Zahl ein: ", b
Differenz = a - b
color 12
Print " Die Differenz ist "; Differenz;
sleep
end if
If wahl = 3 then
input " Gib die erste Zahl ein: ", a
input " Gib die zweite Zahl ein: ", b
Produkt = a * b
color 12
Print " Das Produkt ist "; Produkt;
sleep
end if
If wahl = 4 then
input " Gib die erste Zahl ein: ", a
input " Gib die zweite Zahl ein: ", b
Quotient = a / b
color 12
Print " Der Quotient ist "; Quotient;
sleep
end if
If wahl = 5 then
input " Gib die Zahl ein: ", a
Quadrat = a * a
color 12
Print " Die Zahl im Quadrat ist "; Quadrat;
sleep
end if
|
|
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 14.02.2009, 18:48 Titel: |
|
|
|
|
Nach oben |
|
 |
spudder
Anmeldungsdatum: 13.02.2009 Beiträge: 6
|
Verfasst am: 14.02.2009, 19:18 Titel: |
|
|
28398 hat Folgendes geschrieben: | |
danke |
|
Nach oben |
|
 |
spudder
Anmeldungsdatum: 13.02.2009 Beiträge: 6
|
Verfasst am: 14.02.2009, 19:25 Titel: |
|
|
28398 hat Folgendes geschrieben: | |
Sorry aber wohin nun mit sqr?
Ist ja ein Befehl; müsste ich demnach eintippen oder anderst? |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 14.02.2009, 20:09 Titel: |
|
|
qbasic hat übrigens eine tolle hilfe, die du problemlos hättest benutzen können, um herauszufinden, wie man SQR benutzt. Warum macht das niemand?! _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
spudder
Anmeldungsdatum: 13.02.2009 Beiträge: 6
|
Verfasst am: 14.02.2009, 21:47 Titel: |
|
|
Jojo hat Folgendes geschrieben: | qbasic hat übrigens eine tolle hilfe, die du problemlos hättest benutzen können, um herauszufinden, wie man SQR benutzt. Warum macht das niemand?! |
Eigentlich benutze ich FreeBasic, aber ich habe in der Suche nach so einem Thema gesucht und dann nicht darauf geachtet dass es nicht von FreeBasic ist. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 14.02.2009, 22:00 Titel: |
|
|
FreeBasic hat aber auch eine Hilfe... _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
b3ast
Anmeldungsdatum: 27.04.2008 Beiträge: 34
|
Verfasst am: 15.02.2009, 00:07 Titel: |
|
|
vielleicht weil er sgr gelesen hat |
|
Nach oben |
|
 |
|