<?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[probleme beim kompilieren eines taschenrechners]]></title><description><![CDATA[<p>guten morgen.</p>
<p>ich fang gerade so an mich in c++ reinzufühlen un arbeite gerade mit dem buch &quot;die c++ programiersprache&quot; von bjarne stroustrup. daraus habe ich den taschenrechner aus einer der ersten kapiteln abgetippt. ich benutze nur nen älteren konsolen-compiler von borland, und der meldet einen fehler, der sich aber nicht auf die .cpp datei, sonder auf die .obj bezieht. vielleichtkönnte jemand mir das programm kurz zu kompilieren testen</p>
<p>wäre sehr dankbar dafür, anfangs muss man immer um seine motivation schauen (:</p>
<p>taschenrechner.cpp:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;map&gt;
#include &lt;cctype&gt;

using namespace std;

map&lt;string,double&gt; table;
double number_value;
string string_value;

enum Token_value
{
	NAME,	NUMBER,		END,
	PLUS='+',	MINUS='-',	MUL='*',	DIV='/',
	PRINT=';',	ASSIGN='=',	LP='(',	RP=')'
};

Token_value curr_tok = PRINT;
double term(bool);
double prim(bool);
double error(string);
Token_value get_token();

double expr(bool get)
{
	double left = term(get);

	for(;;)
		switch(curr_tok){
		case PLUS:
			left += term(true);
			break;
		case MINUS:
			left -= term(true);
			break;
		default:
			return left;
		}
}

double term(bool get)
{
	double left = prim(get);

	for(;;)
		switch(curr_tok){
		case MUL:
			left *= prim(true);
			break;
		case DIV:
			if (double d = prim(true)){
				left /= d;
				break;
			}
			return error(&quot;Division durch 0&quot;);
		default:
			return left;
		}
}

double prim(bool get)
{
	if (get) get_token();
	switch (curr_tok){
	case NUMBER:
	{	double v = number_value;
		get_token();
		return v;
	}
	case NAME:
	{
		double&amp; v = table[string_value];
		if (get_token() == ASSIGN) v = expr(true);
		return v;
	}
	case MINUS:
		return -prim(true);
	case LP:
	{	double e = expr(true);
		if (curr_tok != RP) return error(&quot;) erwartet&quot;);
		get_token();
		return e;
	}
	default:
		return error(&quot;primary erwartet&quot;);
	}
}

Token_value get_token()
{
	char ch;

	do {
		if(!cin.get(ch)) return curr_tok=END;
	} while (ch!='\n' &amp;&amp; isspace(ch));
	switch (ch) {
	case ';':
	case '\n' :
		return curr_tok=PRINT;
	case '*':
	case '/':
	case '+':
	case '-':
	case '(':
	case ')':
	case '=':
		return curr_tok=Token_value(ch);
	case '0': case '1': case '2': case '3': case '4': 
	case '5': case '6': case '7': case '8': case '9': 
	case '.':
		cin.putback(ch);
		cin &gt;&gt; number_value;
		return curr_tok=NUMBER;
	default:
		if(isalpha(ch)) {
			string_value = ch;
			while (cin.get(ch) &amp;&amp; isalnum(ch))                            string_value.push_back(ch);
			cin.putback(ch);
			return curr_tok=NAME;
		}
		error(&quot;Falsches Token&quot;);
		return curr_tok=PRINT;
	}
}

int no_of_errors;

double error(const string&amp; s)
{
	no_of_errors++;
	cerr &lt;&lt; &quot;Fehler: &quot; &lt;&lt; s &lt;&lt; &quot;\n\a&quot;;
	return 1;
}

int main()
{
	table[&quot;pi&quot;] = 3.1415926535897932385;
	table[&quot;e&quot;] = 2.7182818284590452354;

	while (cin) {
		get_token();
		if (curr_tok == END) break;
		if ( curr_tok == PRINT) continue;
		cout &lt;&lt; expr(false) &lt;&lt; '\n';
	}

	return no_of_errors;
}
</code></pre>
<p>Edit: Codetags <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/157221/probleme-beim-kompilieren-eines-taschenrechners</link><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 01:38:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/157221.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 23 Aug 2006 23:03:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to probleme beim kompilieren eines taschenrechners on Thu, 24 Aug 2006 04:58:37 GMT]]></title><description><![CDATA[<p>guten morgen.</p>
<p>ich fang gerade so an mich in c++ reinzufühlen un arbeite gerade mit dem buch &quot;die c++ programiersprache&quot; von bjarne stroustrup. daraus habe ich den taschenrechner aus einer der ersten kapiteln abgetippt. ich benutze nur nen älteren konsolen-compiler von borland, und der meldet einen fehler, der sich aber nicht auf die .cpp datei, sonder auf die .obj bezieht. vielleichtkönnte jemand mir das programm kurz zu kompilieren testen</p>
<p>wäre sehr dankbar dafür, anfangs muss man immer um seine motivation schauen (:</p>
<p>taschenrechner.cpp:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;map&gt;
#include &lt;cctype&gt;

using namespace std;

map&lt;string,double&gt; table;
double number_value;
string string_value;

enum Token_value
{
	NAME,	NUMBER,		END,
	PLUS='+',	MINUS='-',	MUL='*',	DIV='/',
	PRINT=';',	ASSIGN='=',	LP='(',	RP=')'
};

Token_value curr_tok = PRINT;
double term(bool);
double prim(bool);
double error(string);
Token_value get_token();

double expr(bool get)
{
	double left = term(get);

	for(;;)
		switch(curr_tok){
		case PLUS:
			left += term(true);
			break;
		case MINUS:
			left -= term(true);
			break;
		default:
			return left;
		}
}

double term(bool get)
{
	double left = prim(get);

	for(;;)
		switch(curr_tok){
		case MUL:
			left *= prim(true);
			break;
		case DIV:
			if (double d = prim(true)){
				left /= d;
				break;
			}
			return error(&quot;Division durch 0&quot;);
		default:
			return left;
		}
}

double prim(bool get)
{
	if (get) get_token();
	switch (curr_tok){
	case NUMBER:
	{	double v = number_value;
		get_token();
		return v;
	}
	case NAME:
	{
		double&amp; v = table[string_value];
		if (get_token() == ASSIGN) v = expr(true);
		return v;
	}
	case MINUS:
		return -prim(true);
	case LP:
	{	double e = expr(true);
		if (curr_tok != RP) return error(&quot;) erwartet&quot;);
		get_token();
		return e;
	}
	default:
		return error(&quot;primary erwartet&quot;);
	}
}

Token_value get_token()
{
	char ch;

	do {
		if(!cin.get(ch)) return curr_tok=END;
	} while (ch!='\n' &amp;&amp; isspace(ch));
	switch (ch) {
	case ';':
	case '\n' :
		return curr_tok=PRINT;
	case '*':
	case '/':
	case '+':
	case '-':
	case '(':
	case ')':
	case '=':
		return curr_tok=Token_value(ch);
	case '0': case '1': case '2': case '3': case '4': 
	case '5': case '6': case '7': case '8': case '9': 
	case '.':
		cin.putback(ch);
		cin &gt;&gt; number_value;
		return curr_tok=NUMBER;
	default:
		if(isalpha(ch)) {
			string_value = ch;
			while (cin.get(ch) &amp;&amp; isalnum(ch))                            string_value.push_back(ch);
			cin.putback(ch);
			return curr_tok=NAME;
		}
		error(&quot;Falsches Token&quot;);
		return curr_tok=PRINT;
	}
}

int no_of_errors;

double error(const string&amp; s)
{
	no_of_errors++;
	cerr &lt;&lt; &quot;Fehler: &quot; &lt;&lt; s &lt;&lt; &quot;\n\a&quot;;
	return 1;
}

int main()
{
	table[&quot;pi&quot;] = 3.1415926535897932385;
	table[&quot;e&quot;] = 2.7182818284590452354;

	while (cin) {
		get_token();
		if (curr_tok == END) break;
		if ( curr_tok == PRINT) continue;
		cout &lt;&lt; expr(false) &lt;&lt; '\n';
	}

	return no_of_errors;
}
</code></pre>
<p>Edit: Codetags <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1123304</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1123304</guid><dc:creator><![CDATA[nathanael]]></dc:creator><pubDate>Thu, 24 Aug 2006 04:58:37 GMT</pubDate></item><item><title><![CDATA[Reply to probleme beim kompilieren eines taschenrechners on Thu, 24 Aug 2006 07:00:51 GMT]]></title><description><![CDATA[<p>hi, die deklaration von error unterscheidet sich mit dem definitionskopf</p>
<pre><code>double term(bool);
double prim(bool);
double error(const string&amp; );	//hier
Token_value get_token();
</code></pre>
<p>zum zweiten fährst du vielleicht das visual studio 6? das kennt push back nicht in basic_string. entweder zum bleistift den neuen gcc ziehen und verwenden, einen anderen standardkonformen compiler nutzen, oder dir ein work arround dazu schreiben.<br />
gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1123378</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1123378</guid><dc:creator><![CDATA[elise]]></dc:creator><pubDate>Thu, 24 Aug 2006 07:00:51 GMT</pubDate></item><item><title><![CDATA[Reply to probleme beim kompilieren eines taschenrechners on Thu, 24 Aug 2006 11:08:58 GMT]]></title><description><![CDATA[<p>jup. das hab ich übersehen. es war tatsächlich das push_back. vs wird dann wohl mit dem neuen rechner kommen, denn im moment benutze ich noch den 400mhz rechner meiner schwester. nun gut. den code hab ich jetzt soweit verstanden, also kann ich einfach weiterlernen und am neuen rechner dann nochmal rumspielen damit.</p>
<p>vielen dank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1123624</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1123624</guid><dc:creator><![CDATA[nathanael]]></dc:creator><pubDate>Thu, 24 Aug 2006 11:08:58 GMT</pubDate></item><item><title><![CDATA[Reply to probleme beim kompilieren eines taschenrechners on Thu, 24 Aug 2006 13:33:26 GMT]]></title><description><![CDATA[<p>Hi,</p>
<pre><code class="language-cpp">string_value.push_back(ch);
</code></pre>
<p>kannst du einfach ersetzen durch</p>
<pre><code class="language-cpp">string_value += ch;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1123802</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1123802</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Thu, 24 Aug 2006 13:33:26 GMT</pubDate></item><item><title><![CDATA[Reply to probleme beim kompilieren eines taschenrechners on Thu, 24 Aug 2006 17:25:04 GMT]]></title><description><![CDATA[<p>geil, danke...</p>
<p>ich seh schon, hier wird einem geholfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1124009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1124009</guid><dc:creator><![CDATA[nathanael]]></dc:creator><pubDate>Thu, 24 Aug 2006 17:25:04 GMT</pubDate></item></channel></rss>