<?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[Rechner rechnet nach z.b. &amp;quot;sin&amp;quot; nicht weiter...]]></title><description><![CDATA[<p>so ungern wie ich es auch tue.. ich muss einfach nochmal was fragen.. undzwar komme ich mit einem problem gerade echt nicht weiter..<br />
ich weis dass der code echt schlampig programmiert wurde.. werde es aber nicht mehr ändern.. nicht diesen.. ich habe versprochen ich werde mir ein paar bücher zu herzen nehmen.. geht nur leider momentan zeitlich nicht..</p>
<p>nur hier mein problem:</p>
<p>der code rechnet ganz gut umd ganz schön.. nur wenn ich z.b.: &quot;sin(2)+2&quot; rechnen will, geht dass nicht.. er rechnet immer nur sin(2) und gibt dann dass aus..<br />
andersrum geht aber &quot;2+sin(2)&quot;.. also er macht alles bis er zum ersten trigonometrischem problem kommt.. rechnet dies und ignoriert dann alles danach...</p>
<p>kurz was zum verständniss.. sinus, cosinus und tangens werden noch mit s,c und t abgekürzt.. also einfach s(2) statt sin(2).</p>
<p>und ja.. hier der momentane code.. :</p>
<pre><code>double Calculator::num()
{		

	char *endptr;
	double a, x, y, z;

	if(buffer[position] == 'p'){
	 return a = 3.14159265;
	  position++;
	}

	else if(buffer[position] == 's')
	{

		position++;
		if(buffer[position] != '(')
			error();
		position++;

		if(buffer[position] == 'p'){
			x = 3.1415926359;
		  position++;
		}
		else
		{

			 x = strtod(&amp;buffer[position], &amp;endptr); //strtod analyisert die Zahlen
			 unsigned len = (unsigned) (endptr - &amp;buffer[position]);

			if(!len) //wenn len = 0 dann wurde mit strtod keine fließkommazaheln aus dem eingangsbuffer gelesen
			error();
			position += len;
		}

		if(buffer[position] == ')'){

			 a = sin(x);
			position++;
		}

		else position++;

			if(buffer[position] == 'p'){
			  y = 3.1415926359;
			  position++;
			}
			else
			{

			  y = strtod(&amp;buffer[position], &amp;endptr); //strtod analyisert die Zahlen
			  unsigned len = (unsigned) (endptr - &amp;buffer[position]);

				if(!len) //wenn len = 0 dann wurde mit strtod keine fließkommazaheln aus dem eingangsbuffer gelesen
					error();
				position += len;
			}

			return a = sin(x*y);
	}

	else if(buffer[position] == 'c')
	{

		position++;
		if(buffer[position] != '(')
			error();
		position++;

		if(buffer[position] == 'p'){
		  x = 3.1415926359;
		  position++;
		}
		else
		{

			 x = strtod(&amp;buffer[position], &amp;endptr); //strtod analyisert die Zahlen
			 unsigned len = (unsigned) (endptr - &amp;buffer[position]);

			if(!len) //wenn len = 0 dann wurde mit strtod keine fließkommazaheln aus dem eingangsbuffer gelesen
			error();
			position += len;
		}

		if(buffer[position] == ')'){
			 return a = cos(x);
			position++;
		}

		else position++;

			if(buffer[position] == 'p'){
			  y = 3.1415926359;
			  position++;
			}
			else
			{

			  y = strtod(&amp;buffer[position], &amp;endptr); //strtod analyisert die Zahlen
			  unsigned len = (unsigned) (endptr - &amp;buffer[position]);

				if(!len) //wenn len = 0 dann wurde mit strtod keine fließkommazaheln aus dem eingangsbuffer gelesen
					error();
				position += len;
			}
			 return a = cos(x*y);
	}

	else if(buffer[position] == 't')
	{
		position++;
		if(buffer[position] != '(')
			error();
		position++;

		if(buffer[position] == 'p'){
		  x = 3.1415926359;
		  position++;
		}
		else
		{

			 x = strtod(&amp;buffer[position], &amp;endptr); //strtod analyisert die Zahlen
			 unsigned len = (unsigned) (endptr - &amp;buffer[position]);

			if(!len) //wenn len = 0 dann wurde mit strtod keine fließkommazaheln aus dem eingangsbuffer gelesen
			error();
			position += len;
		}

		if(buffer[position] == ')'){
			return a = tan(x);
			position++;
		}

		else position++;

			if(buffer[position] == 'p'){
			  y = 3.1415926359;
			  position++;
			}
			else
			{

			  y = strtod(&amp;buffer[position], &amp;endptr); //strtod analyisert die Zahlen
			  unsigned len = (unsigned) (endptr - &amp;buffer[position]);

				if(!len) //wenn len = 0 dann wurde mit strtod keine fließkommazaheln aus dem eingangsbuffer gelesen
					error();
				position += len;
			}
			return a = tan(x*y);

	}

	else
	{

        a = strtod(&amp;buffer[position], &amp;endptr); //strtod analyisert die Zahlen
        unsigned len = (unsigned) (endptr - &amp;buffer[position]);

		if(!len) //wenn len = 0 dann wurde mit strtod keine fließkommazaheln aus dem eingangsbuffer gelesen
		error();
		position += len;

	}
	return a;
}
</code></pre>
<p>nunja.. kann mir jemand sagen woran dass liegen kann??</p>
<p>also die funktion num() scheint da was nicht ganz richtig zurückzugeben (?)..<br />
bitte um hilfe...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/318567/rechner-rechnet-nach-z-b-quot-sin-quot-nicht-weiter</link><generator>RSS for Node</generator><lastBuildDate>Mon, 27 Jul 2026 06:56:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/318567.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 17 Jul 2013 18:27:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Rechner rechnet nach z.b. &amp;quot;sin&amp;quot; nicht weiter... on Wed, 17 Jul 2013 19:51:19 GMT]]></title><description><![CDATA[<p>so ungern wie ich es auch tue.. ich muss einfach nochmal was fragen.. undzwar komme ich mit einem problem gerade echt nicht weiter..<br />
ich weis dass der code echt schlampig programmiert wurde.. werde es aber nicht mehr ändern.. nicht diesen.. ich habe versprochen ich werde mir ein paar bücher zu herzen nehmen.. geht nur leider momentan zeitlich nicht..</p>
<p>nur hier mein problem:</p>
<p>der code rechnet ganz gut umd ganz schön.. nur wenn ich z.b.: &quot;sin(2)+2&quot; rechnen will, geht dass nicht.. er rechnet immer nur sin(2) und gibt dann dass aus..<br />
andersrum geht aber &quot;2+sin(2)&quot;.. also er macht alles bis er zum ersten trigonometrischem problem kommt.. rechnet dies und ignoriert dann alles danach...</p>
<p>kurz was zum verständniss.. sinus, cosinus und tangens werden noch mit s,c und t abgekürzt.. also einfach s(2) statt sin(2).</p>
<p>und ja.. hier der momentane code.. :</p>
<pre><code>double Calculator::num()
{		

	char *endptr;
	double a, x, y, z;

	if(buffer[position] == 'p'){
	 return a = 3.14159265;
	  position++;
	}

	else if(buffer[position] == 's')
	{

		position++;
		if(buffer[position] != '(')
			error();
		position++;

		if(buffer[position] == 'p'){
			x = 3.1415926359;
		  position++;
		}
		else
		{

			 x = strtod(&amp;buffer[position], &amp;endptr); //strtod analyisert die Zahlen
			 unsigned len = (unsigned) (endptr - &amp;buffer[position]);

			if(!len) //wenn len = 0 dann wurde mit strtod keine fließkommazaheln aus dem eingangsbuffer gelesen
			error();
			position += len;
		}

		if(buffer[position] == ')'){

			 a = sin(x);
			position++;
		}

		else position++;

			if(buffer[position] == 'p'){
			  y = 3.1415926359;
			  position++;
			}
			else
			{

			  y = strtod(&amp;buffer[position], &amp;endptr); //strtod analyisert die Zahlen
			  unsigned len = (unsigned) (endptr - &amp;buffer[position]);

				if(!len) //wenn len = 0 dann wurde mit strtod keine fließkommazaheln aus dem eingangsbuffer gelesen
					error();
				position += len;
			}

			return a = sin(x*y);
	}

	else if(buffer[position] == 'c')
	{

		position++;
		if(buffer[position] != '(')
			error();
		position++;

		if(buffer[position] == 'p'){
		  x = 3.1415926359;
		  position++;
		}
		else
		{

			 x = strtod(&amp;buffer[position], &amp;endptr); //strtod analyisert die Zahlen
			 unsigned len = (unsigned) (endptr - &amp;buffer[position]);

			if(!len) //wenn len = 0 dann wurde mit strtod keine fließkommazaheln aus dem eingangsbuffer gelesen
			error();
			position += len;
		}

		if(buffer[position] == ')'){
			 return a = cos(x);
			position++;
		}

		else position++;

			if(buffer[position] == 'p'){
			  y = 3.1415926359;
			  position++;
			}
			else
			{

			  y = strtod(&amp;buffer[position], &amp;endptr); //strtod analyisert die Zahlen
			  unsigned len = (unsigned) (endptr - &amp;buffer[position]);

				if(!len) //wenn len = 0 dann wurde mit strtod keine fließkommazaheln aus dem eingangsbuffer gelesen
					error();
				position += len;
			}
			 return a = cos(x*y);
	}

	else if(buffer[position] == 't')
	{
		position++;
		if(buffer[position] != '(')
			error();
		position++;

		if(buffer[position] == 'p'){
		  x = 3.1415926359;
		  position++;
		}
		else
		{

			 x = strtod(&amp;buffer[position], &amp;endptr); //strtod analyisert die Zahlen
			 unsigned len = (unsigned) (endptr - &amp;buffer[position]);

			if(!len) //wenn len = 0 dann wurde mit strtod keine fließkommazaheln aus dem eingangsbuffer gelesen
			error();
			position += len;
		}

		if(buffer[position] == ')'){
			return a = tan(x);
			position++;
		}

		else position++;

			if(buffer[position] == 'p'){
			  y = 3.1415926359;
			  position++;
			}
			else
			{

			  y = strtod(&amp;buffer[position], &amp;endptr); //strtod analyisert die Zahlen
			  unsigned len = (unsigned) (endptr - &amp;buffer[position]);

				if(!len) //wenn len = 0 dann wurde mit strtod keine fließkommazaheln aus dem eingangsbuffer gelesen
					error();
				position += len;
			}
			return a = tan(x*y);

	}

	else
	{

        a = strtod(&amp;buffer[position], &amp;endptr); //strtod analyisert die Zahlen
        unsigned len = (unsigned) (endptr - &amp;buffer[position]);

		if(!len) //wenn len = 0 dann wurde mit strtod keine fließkommazaheln aus dem eingangsbuffer gelesen
		error();
		position += len;

	}
	return a;
}
</code></pre>
<p>nunja.. kann mir jemand sagen woran dass liegen kann??</p>
<p>also die funktion num() scheint da was nicht ganz richtig zurückzugeben (?)..<br />
bitte um hilfe...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2339505</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2339505</guid><dc:creator><![CDATA[gangstergangster]]></dc:creator><pubDate>Wed, 17 Jul 2013 19:51:19 GMT</pubDate></item><item><title><![CDATA[Reply to Rechner rechnet nach z.b. &amp;quot;sin&amp;quot; nicht weiter... on Wed, 17 Jul 2013 19:09:08 GMT]]></title><description><![CDATA[<p>Hi,<br />
zu viel Code. Ich denke, das schaut sich keiner an. Wenn man beim Code scrollen muss, wirds oft kritisch. Du musst dein Code aufs wesentliche reduzieren. Vielleicht findest du dabei sogar deinen Fehler. Ansonsten, hast dus schon mit dem Debugger versucht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2339513</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2339513</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Wed, 17 Jul 2013 19:09:08 GMT</pubDate></item><item><title><![CDATA[Reply to Rechner rechnet nach z.b. &amp;quot;sin&amp;quot; nicht weiter... on Wed, 17 Jul 2013 20:19:52 GMT]]></title><description><![CDATA[<p>Poste mal die Stelle, wo du das + Zeichen in der Eingabe erkennst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2339525</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2339525</guid><dc:creator><![CDATA[Ramanujan]]></dc:creator><pubDate>Wed, 17 Jul 2013 20:19:52 GMT</pubDate></item><item><title><![CDATA[Reply to Rechner rechnet nach z.b. &amp;quot;sin&amp;quot; nicht weiter... on Wed, 17 Jul 2013 20:34:07 GMT]]></title><description><![CDATA[<p>Das dürfte kein großes Problem sein. Überprüfe die Variable len nach der sin Anweisung. Das riecht nach Buffer Overflow, Integer Overflow wg. falschem Aligment (Big Endian...). Alles Dinge welche in richtigem C++ nicht mehr vorkommen sollten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2339531</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2339531</guid><dc:creator><![CDATA[Bitte ein Bit]]></dc:creator><pubDate>Wed, 17 Jul 2013 20:34:07 GMT</pubDate></item><item><title><![CDATA[Reply to Rechner rechnet nach z.b. &amp;quot;sin&amp;quot; nicht weiter... on Wed, 17 Jul 2013 20:48:36 GMT]]></title><description><![CDATA[<p>Ramanujan schrieb:</p>
<blockquote>
<p>Poste mal die Stelle, wo du das + Zeichen in der Eingabe erkennst.</p>
</blockquote>
<pre><code>double Calculator::list()
{
 double a = expr(), b;
 if(buffer[position] == '+') {
	 position++;
   b = list();
   return a + b;
  }
 else if(buffer[position] == '-') {
	 position++;
   b = list();
   return a - b;
 }
 else if(buffer[position] &amp;&amp; buffer[position] != ')')
//      Lookhead ist eine schließende Klammer.
//      Falls der Zähler klammern Null ist liegt ein Syntaxfehler vor.
 if(!klammern)
  error();
 else
  error();
	return a;
}
</code></pre>
<p>edit: ok das problem war, dass ich counter++ erst nach dem return hatte.. habs geändert und jetzt gehts... probleme habe ich jetzt bei dem hier:</p>
<blockquote>
<p>sin(1)+cos(3)*tan(4)-arcsin(1)-arccos(0)/arctan(1)</p>
</blockquote>
<p>da rechnet er nur bis zum tan.. (ja ich habe um die umkehrfunktionen erweitert.. nach dem gleichem schema</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2339532</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2339532</guid><dc:creator><![CDATA[gangstergangster]]></dc:creator><pubDate>Wed, 17 Jul 2013 20:48:36 GMT</pubDate></item><item><title><![CDATA[Reply to Rechner rechnet nach z.b. &amp;quot;sin&amp;quot; nicht weiter... on Thu, 18 Jul 2013 08:12:14 GMT]]></title><description><![CDATA[<p>Überleg mal, welchen Sinn</p>
<pre><code class="language-cpp">if(buffer[position] == ')'){
    return a = cos(x);
    position++;
}
</code></pre>
<p>macht (bezogen auf die Reihenfolge der Anweisungen)...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2339586</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2339586</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Thu, 18 Jul 2013 08:12:14 GMT</pubDate></item></channel></rss>