Quadratwurzel ausgeben



  • Habe ein kleines Problem mit dem folgenden Rechen Programm, da ich das selber nicht geschrieben habe und das ist nur zur Übung gedacht (für Anfänger). Man musste 3 Fehler die von Compiler gefunden wurden finden und drei die nicht von Compiler gefunden wurden auch finden, das alles wurde gemacht. Nun als Übung bekam man die Aufgabe die Quadratwurzel zu berechnen was ich auch gemacht habe, nur das Problem ist folgendes ich kann das Ergebnis für die Quadratwurzel nicht ausgeben, Irgendwie hat es einmal geklappt danach geht es nicht. Und das Programm ist so gemacht das wenn ich „q“ drücke das Programm beendet wird und wenn man „=“ drückt das Ergebnis ausgeben wird. Hier sind ein Teil des code’s und nicht der ganze weil es zu lang ist. Das ist keine Hausaufgabe und bin auch kein Student sondern will nur einfach C++ lernen.

    struct Token {
    	char kind;
    	double value;
    	string name;
    	Token(char ch) :kind(ch), value(0) { }
    	Token(char ch, double val) :kind(ch), value(val) { }
    	Token(char ch, string n) :kind(ch), name(n) {}
    };
    
    class Token_stream {
    	bool full;     
    	Token buffer;  
    public:
    	Token_stream() :full(0), buffer(0) { }         
    
    	Token get();                                  
    	void unget(Token t) { buffer=t; full=true; }  
    
    	void ignore(char c);       
    };
    
    double term()
    {
    	double left = primary();
    	Token t = ts.get();  
    
    	while(true) {
    		switch(t.kind) {
    		case '*':
    			left *= primary();
    			t = ts.get();
    			break;
    		case '/':
    		{	double d = primary();
    			if (d == 0) error("divide by zero");
    			left /= d;
    			t = ts.get();
    			break;
    		}
    		case '%':
    			{ double d = primary();
    			  int i1 = int(left);
    			  if (i1 != left) error ("left operand of % is not an integer");
    			  int i2 = int(d);
    			  if (i2 != d) error ("right operand of % is not an integer");
    			  if (i2 == 0) error ("% divide by zero");
    			  left = i1 % i2;
    			  t = ts.get();
    			  break;
    			}
    		case 'S':
    			{
    			  double d = primary();
    			  if (d < 0) error("no negative square root calculations");
    			  if (d > 0) left = sqrt(d);
    			  t = ts.get();
    			  break;
    			}  
    		default:
    			ts.unget(t);  
    			return left;
    		}
    	}
    }
    
    void calculate()
    {
    	cout<<">This is a calculator program. This can calculate with '+,-,*,/,%' only!\n";
    	cout<<">For result press '=' and to end the program press 'q'!\n";
    	while(cin) try {        
    		cout << prompt;
    		Token t = ts.get();
    		while (t.kind == print) t=ts.get();    
    		if (t.kind == quit) return;            
    		ts.unget(t);
    		cout << result << statement() << endl;
    	}
    	catch(runtime_error& e) {
    		cerr << e.what() << endl;              
    		clean_up_mess();
    	}
    }
    
    int main()
    
    	try {
    		calculate();
    		keep_window_open();     
    		return 0;
    	}
    	catch (exception& e) {      
    		cerr << e.what() << endl;
    		keep_window_open("~~");
    		return 1;
    	}
    	catch (...) {
    		cerr << "exception\n";
    		keep_window_open("~~");
    		return 2;
    	}
    


  • Selber gelöst mit dieser Zeile:

    double d = narrow_cast<double>(left);
    

Anmelden zum Antworten