Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Taschenrechner mehrere Anweisungen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
17.05.2012, 17:16 Uhr
~Zel24
Gast


Hallo allerseits

Ich bin dabei einen Taschenrechner zu programmieren... einen recht simplen, wird dann noch erweitert - vorerst kann dieser nur + - * / % und das bisher auch nur mit 2 Zahlen in einer Anweisung, z.B. 7*5 erkennt er. Jetzt will ich aber, dass der Rechner auch 7*5+3 rechnen kann. Ich wollte die Eingabe über ein Array machen, bin mir aber nicht ganz sicher, wie das zu realisieren ist...


C/C++ Code:
cin >> iZahlen[0] >> cOperator >> iZahlen[1];
C/C++ Code:
cin >> iZahlen[0] >> cOperator >> iZahlen[1];


die erste Zahl wird an die 1. Stelle des Arrays geschrieben, der Operator muss auch in ein Array oder?


C/C++ Code:
cin >> iZahlen[0] >> iZahlen[1]>> iZahlen[2];
C/C++ Code:
cin >> iZahlen[0] >> iZahlen[1]>> iZahlen[2];
oder?

Nur hab ich jetzt 2, nein 3 Fragen dazu:

1. Frage: ist die Idee richtig, oder befinde ich mich auf dem Holzweg?
2. Frage: selbst das klappt nur mit 2 Zahlen... ich müsste ja theoretisch die Eingabe 7*5*3+2-1 ermöglichen... ich kann ja aber nicht vorher wissen, was der Benutzer eingeben wird... ich hoffe, ihr versteht meine Frage...^^
3. Frage: wie überprüfe ich dann, ob in einem Array eine Zahl, oder ein Rechenoperant vorhanden ist...?

Gruß Zel
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.05.2012, 18:03 Uhr
0xdeadbeef
Gott
(Operator)


Interessant ist ja auch die Frage, wie du die Punkt-vor-Strich-Regel und ggf. Klammern behandeln willst.

Eine relativ einfache Möglichkeit ist der Shunting-Yard-Algorithmus, der einen Infix-Ausdruck auswerten kann. In der ursprünglichen Form spuckt er eine RPN-Darstellung aus, mit einem zweiten Stack lässt sich das aber auch on-the-fly auswerten.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.05.2012, 18:08 Uhr
~Zel24
Gast


Ich mache das vorerst so, dass Punkt-vor-Strich-Rechnung missachtet wird...es wird alles von links nach rechts abgearbeitet^^ Erstmal langsam anfangen^^


Und jetzt schau ich mir erstmal den Algorithmus an^^ Danke, dass du das gepostet hast

Gruß Zel
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
17.05.2012, 19:12 Uhr
0xdeadbeef
Gott
(Operator)


Naja, die Komplexität steigt natürlich mit der Anzahl der Features. Wenn du ohne Klammern und stur durchrechnen willst, also nach Taschenrechnermanier, brauchst du dir die Eingabedaten nicht wirklich zu merken. Da tut's auch

C++:
double result;
double x;
char op;

std::cin >> result;

while(std::cin >> op >> x) {
  switch(op) {
    case '+': result += x; break;
    case '-': result -= x; break;
    case '*': result *= x; break;
    case '/': result /= x; break;
    default: throw std::invalid_argument("Ungültiger Operator");
  }
}


oder so.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 17.05.2012 um 19:13 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: