Brauche Hilfe zu einem Programm

azdr

Lieutenant
Registriert
Feb. 2005
Beiträge
685
Hi an alle.

Ich bräuchte mal eure HILFE, ich hab einen kleinen taschenrechner mit den 4 Grundrechnungsarten in "C++ (borland) " programmiert. Soweit funktioniert auch alles.

Nur , Wie kann ich z.b mehere rechnungsanweisungen inklusive klammern per eingabe rechnen lassen? Z.b:. sowas
(5+5)+(5*10)+10-2=

wie könnte ich sowas realiesiern?




Code:
#include <conio.h>
#include <iostream.h>
#include <stdio.h>
//---------------------------------------------------------------------
//------------------------Deklaration----------------------------------
//---------------------------------------------------------------------


void Eingabe(void);
void Berechnung (void);
;
void Ausgabe(void);

	int eingabe1;
	char zeichen;
	int eingabe2;
   int ausgabe;


//----------------------------------------------------------------------
//------------------------Hauptprogramm---------------------------------
//----------------------------------------------------------------------


int main (void)
{
 	while(1)
 	{
 		Eingabe();
		Berechnung();
		Ausgabe();

		getch();
 	}
}


//-----------------------------------------------------------------------
//------------------------Unterprogramme---------------------------------
//-----------------------------------------------------------------------



//-----------------------------Eingabe---------------------------------
void Eingabe(void)
{
	//cout << "Gib bitte die erste Zahl ein: ";
	cin >> eingabe1;
	//cout << endl << endl;

   //cout << "Gib bitte die Rechenart ein (+,-,*,/): ";
	cin >> zeichen;
	//cout << endl << endl;

   //cout << "Gib bitte die zweite Zahl ein: ";
	cin >> eingabe2;
	//cout << endl << endl;

}

//-----------------------------Berechnung---------------------------------
void Berechnung (void)
{


	switch(zeichen)
	{
	case '+':
		ausgabe = eingabe1+eingabe2;
		break;
	case '-':
		ausgabe = eingabe1-eingabe2;
		break;
	case '*':
		ausgabe = eingabe1*eingabe2;
		break;
	case '/':
		ausgabe = eingabe1/eingabe2;
		break;
	default:
		cout << "du hast keine gueltige Rechenart angegeben";
	}


}

//-----------------------------Ausgabe---------------------------------
void Ausgabe(void)
{

cout << "Das Ergbenis betraegt: ";
cout << ausgabe << endl;

}
 
du hast zwei möglichkeiten zur auswahl:
1. du benutzt einen parser-generator für das problem. also zum beispiel yacc&lex bzw. bison&flex. da findet sich in quasi jedem tutorial, wie man das für mathematische formeln macht.
2. du schreibst den parser von hand.
a) du schreibst eine richtigen parser für terme. das sollte in jedem buch über compilerbau erklärt sein wie es geht. bzw. in jedem online-tutorial.
b) du schreibst ein system das rpn (reverse-polish-notation) versteht. dann reicht dir ein einfacher lexer und der algo zum umwandeln von infex in postfix notation.

1) ist die kürzeste variante. allerings wirst du dabei auch am wenigsten lernen.
2a) ist der standardweg, wenn man lernen will, wie parser-funktionieren.
2b) das ist der elegante weg und ist vor allem nützlich, wenn du hinterher noch einen plotter einbauen willst, da rpn im vergleich zu den anderen varianten einfach mal sauschnell in er ausführung. ;-)

sag was du willst, dann kann ich dir helfen.
 
Zurück
Oben