Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Hilfe für Taschenrechner

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Combat



Anmeldungsdatum: 08.02.2009
Beiträge: 4

BeitragVerfasst am: 08.02.2009, 01:30    Titel: Hilfe für Taschenrechner Antworten mit Zitat

Moin zusammen!

Ich bräuchte mal eure Hilfe... lächeln
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. grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 08.02.2009, 02:12    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Combat



Anmeldungsdatum: 08.02.2009
Beiträge: 4

BeitragVerfasst am: 08.02.2009, 02:42    Titel: Antworten mit Zitat

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? grinsen
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... verwundert
Also im Prinzip würde erstmal die Variante reichen
+ ++ +++
- -- ---
* ** ***
/ // ///
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 08.02.2009, 03:03    Titel: Antworten mit Zitat

Ich habe keinen operator-Befehl verwendet, sondern eine Variable namens operator$. Du darfst sie natürlich gerne e$ nennen. zwinkern

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
Benutzer-Profile anzeigen Private Nachricht senden
Combat



Anmeldungsdatum: 08.02.2009
Beiträge: 4

BeitragVerfasst am: 08.02.2009, 03:25    Titel: Antworten mit Zitat

Achso....
Richtig da war noch was...lächeln
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... lächeln )

Und wie müßte die Befehlsfolge dann aussehen? neutral
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.. lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 08.02.2009, 11:05    Titel: Antworten mit Zitat

"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
Benutzer-Profile anzeigen Private Nachricht senden
Combat



Anmeldungsdatum: 08.02.2009
Beiträge: 4

BeitragVerfasst am: 08.02.2009, 14:09    Titel: Antworten mit Zitat

Nee ELSE war glaub auch nicht dabei. Aber das könnt ich ja einfach mal versuchen drunter zu schmuggeln..lächeln
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
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 08.02.2009, 17:40    Titel: Antworten mit Zitat

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 lachen (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
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 08.02.2009, 18:28    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
spudder



Anmeldungsdatum: 13.02.2009
Beiträge: 6

BeitragVerfasst am: 14.02.2009, 18:39    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 14.02.2009, 18:48    Titel: Antworten mit Zitat

Code:
sqr
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
spudder



Anmeldungsdatum: 13.02.2009
Beiträge: 6

BeitragVerfasst am: 14.02.2009, 19:18    Titel: Antworten mit Zitat

28398 hat Folgendes geschrieben:
Code:
sqr

danke
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
spudder



Anmeldungsdatum: 13.02.2009
Beiträge: 6

BeitragVerfasst am: 14.02.2009, 19:25    Titel: Antworten mit Zitat

28398 hat Folgendes geschrieben:
Code:
sqr

Sorry aber wohin nun mit sqr?
Ist ja ein Befehl; müsste ich demnach
Code:
Wurzel = a sgr
eintippen oder anderst?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 14.02.2009, 19:42    Titel: Antworten mit Zitat

Code:
Wurzel = SQR(a)

_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 14.02.2009, 20:09    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
spudder



Anmeldungsdatum: 13.02.2009
Beiträge: 6

BeitragVerfasst am: 14.02.2009, 21:47    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 14.02.2009, 22:00    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
b3ast



Anmeldungsdatum: 27.04.2008
Beiträge: 34

BeitragVerfasst am: 15.02.2009, 00:07    Titel: Antworten mit Zitat

vielleicht weil er sgr gelesen hat
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz