<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Quadratwurzel ausgeben]]></title><description><![CDATA[<p>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.</p>
<pre><code class="language-cpp">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);       
};
</code></pre>
<pre><code class="language-cpp">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(&quot;divide by zero&quot;);
			left /= d;
			t = ts.get();
			break;
		}
		case '%':
			{ double d = primary();
			  int i1 = int(left);
			  if (i1 != left) error (&quot;left operand of % is not an integer&quot;);
			  int i2 = int(d);
			  if (i2 != d) error (&quot;right operand of % is not an integer&quot;);
			  if (i2 == 0) error (&quot;% divide by zero&quot;);
			  left = i1 % i2;
			  t = ts.get();
			  break;
			}
		case 'S':
			{
			  double d = primary();
			  if (d &lt; 0) error(&quot;no negative square root calculations&quot;);
			  if (d &gt; 0) left = sqrt(d);
			  t = ts.get();
			  break;
			}  
		default:
			ts.unget(t);  
			return left;
		}
	}
}
</code></pre>
<pre><code class="language-cpp">void calculate()
{
	cout&lt;&lt;&quot;&gt;This is a calculator program. This can calculate with '+,-,*,/,%' only!\n&quot;;
	cout&lt;&lt;&quot;&gt;For result press '=' and to end the program press 'q'!\n&quot;;
	while(cin) try {        
		cout &lt;&lt; prompt;
		Token t = ts.get();
		while (t.kind == print) t=ts.get();    
		if (t.kind == quit) return;            
		ts.unget(t);
		cout &lt;&lt; result &lt;&lt; statement() &lt;&lt; endl;
	}
	catch(runtime_error&amp; e) {
		cerr &lt;&lt; e.what() &lt;&lt; endl;              
		clean_up_mess();
	}
}

int main()

	try {
		calculate();
		keep_window_open();     
		return 0;
	}
	catch (exception&amp; e) {      
		cerr &lt;&lt; e.what() &lt;&lt; endl;
		keep_window_open(&quot;~~&quot;);
		return 1;
	}
	catch (...) {
		cerr &lt;&lt; &quot;exception\n&quot;;
		keep_window_open(&quot;~~&quot;);
		return 2;
	}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/277658/quadratwurzel-ausgeben</link><generator>RSS for Node</generator><lastBuildDate>Tue, 25 Aug 2026 20:06:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/277658.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 22 Nov 2010 14:11:14 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Quadratwurzel ausgeben on Mon, 22 Nov 2010 14:11:14 GMT]]></title><description><![CDATA[<p>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.</p>
<pre><code class="language-cpp">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);       
};
</code></pre>
<pre><code class="language-cpp">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(&quot;divide by zero&quot;);
			left /= d;
			t = ts.get();
			break;
		}
		case '%':
			{ double d = primary();
			  int i1 = int(left);
			  if (i1 != left) error (&quot;left operand of % is not an integer&quot;);
			  int i2 = int(d);
			  if (i2 != d) error (&quot;right operand of % is not an integer&quot;);
			  if (i2 == 0) error (&quot;% divide by zero&quot;);
			  left = i1 % i2;
			  t = ts.get();
			  break;
			}
		case 'S':
			{
			  double d = primary();
			  if (d &lt; 0) error(&quot;no negative square root calculations&quot;);
			  if (d &gt; 0) left = sqrt(d);
			  t = ts.get();
			  break;
			}  
		default:
			ts.unget(t);  
			return left;
		}
	}
}
</code></pre>
<pre><code class="language-cpp">void calculate()
{
	cout&lt;&lt;&quot;&gt;This is a calculator program. This can calculate with '+,-,*,/,%' only!\n&quot;;
	cout&lt;&lt;&quot;&gt;For result press '=' and to end the program press 'q'!\n&quot;;
	while(cin) try {        
		cout &lt;&lt; prompt;
		Token t = ts.get();
		while (t.kind == print) t=ts.get();    
		if (t.kind == quit) return;            
		ts.unget(t);
		cout &lt;&lt; result &lt;&lt; statement() &lt;&lt; endl;
	}
	catch(runtime_error&amp; e) {
		cerr &lt;&lt; e.what() &lt;&lt; endl;              
		clean_up_mess();
	}
}

int main()

	try {
		calculate();
		keep_window_open();     
		return 0;
	}
	catch (exception&amp; e) {      
		cerr &lt;&lt; e.what() &lt;&lt; endl;
		keep_window_open(&quot;~~&quot;);
		return 1;
	}
	catch (...) {
		cerr &lt;&lt; &quot;exception\n&quot;;
		keep_window_open(&quot;~~&quot;);
		return 2;
	}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1984169</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1984169</guid><dc:creator><![CDATA[winux]]></dc:creator><pubDate>Mon, 22 Nov 2010 14:11:14 GMT</pubDate></item><item><title><![CDATA[Reply to Quadratwurzel ausgeben on Mon, 22 Nov 2010 14:27:29 GMT]]></title><description><![CDATA[<p>Selber gelöst mit dieser Zeile:</p>
<pre><code class="language-cpp">double d = narrow_cast&lt;double&gt;(left);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1984177</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1984177</guid><dc:creator><![CDATA[winux]]></dc:creator><pubDate>Mon, 22 Nov 2010 14:27:29 GMT</pubDate></item></channel></rss>