<?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 mit C++]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin noch C++ Anfänger und muss mich jetzt damit auseinandersetzen.</p>
<p>Ich habe 3 x-Werte, welche normiert werden müssen. Anschließend muss mit dem neuen xi-Werten weitergerechnet werden.</p>
<p>Hier ist der aktuelle Code:</p>
<p>[code]</p>
<pre><code class="language-cli">#include &lt;iostream&gt;
#include &lt;cmath&gt;

double norm(double summe, double xi);
double  xi[4], summe;
using namespace std;

double norm(double *xi)
 {
   int i;
   for(i = 1; i &lt;= 3; i++)
     summe += xi[i];
	 xi[i] = xi[i]/summe;
   return  (xi, summe);
 }

int main(){

	xi[1] = 0.26;
	xi[2] = 0.26;
	xi[3] = 0.26;

	norm( xi);
	cout&lt;&lt;summe ;
	cout &lt;&lt;&quot;\n	xi1 = &quot;&lt;&lt; xi[1];

	cout &lt;&lt; &quot;\n\n Mit ENTER beenden!&quot;;

	cin.sync();
	cin.clear();
	cin.get();
return 0;
}
</code></pre>
<p>Die Frage ist, warum der ursprüngliche Wert von x1 ausgegeben wird und nicht der neu berechnete. Ein andere Frage ist, warum die Funktion nicht nach main() geschrieben werden kann.</p>
<p>Vielen Dank für die Hilfe!</p>
<p>mfg Rico</p>
<p>p.s. Derzeit nutze ich VS 2010 express.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/269449/probleme-mit-c</link><generator>RSS for Node</generator><lastBuildDate>Mon, 31 Aug 2026 01:22:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/269449.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 25 Jun 2010 08:51:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit C++ on Fri, 25 Jun 2010 08:51:44 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin noch C++ Anfänger und muss mich jetzt damit auseinandersetzen.</p>
<p>Ich habe 3 x-Werte, welche normiert werden müssen. Anschließend muss mit dem neuen xi-Werten weitergerechnet werden.</p>
<p>Hier ist der aktuelle Code:</p>
<p>[code]</p>
<pre><code class="language-cli">#include &lt;iostream&gt;
#include &lt;cmath&gt;

double norm(double summe, double xi);
double  xi[4], summe;
using namespace std;

double norm(double *xi)
 {
   int i;
   for(i = 1; i &lt;= 3; i++)
     summe += xi[i];
	 xi[i] = xi[i]/summe;
   return  (xi, summe);
 }

int main(){

	xi[1] = 0.26;
	xi[2] = 0.26;
	xi[3] = 0.26;

	norm( xi);
	cout&lt;&lt;summe ;
	cout &lt;&lt;&quot;\n	xi1 = &quot;&lt;&lt; xi[1];

	cout &lt;&lt; &quot;\n\n Mit ENTER beenden!&quot;;

	cin.sync();
	cin.clear();
	cin.get();
return 0;
}
</code></pre>
<p>Die Frage ist, warum der ursprüngliche Wert von x1 ausgegeben wird und nicht der neu berechnete. Ein andere Frage ist, warum die Funktion nicht nach main() geschrieben werden kann.</p>
<p>Vielen Dank für die Hilfe!</p>
<p>mfg Rico</p>
<p>p.s. Derzeit nutze ich VS 2010 express.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1917126</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1917126</guid><dc:creator><![CDATA[derrico]]></dc:creator><pubDate>Fri, 25 Jun 2010 08:51:44 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit C++ on Fri, 25 Jun 2010 08:59:13 GMT]]></title><description><![CDATA[<p>Zunächst einmal:<br />
Wenn du Arrays übergibst, dann musst du immer die Größe mit angeben.</p>
<pre><code class="language-cpp">//Deklaration
typ in_vect(typ vect[], int size); // Eindimensional
typ in_matrix(typ matrix[][dim2], int size); // Mehrdimensional
//Aufruf
in_vect(typ *vect,sizeof(vect)/sizeof(vect[0]); //Eindimensional
in_matrix(typ *matrix[dim2],dim1); // Mehrdimensioinal
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1917129</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1917129</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Fri, 25 Jun 2010 08:59:13 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit C++ on Fri, 25 Jun 2010 09:06:19 GMT]]></title><description><![CDATA[<p>Oha. Da ist eine ganze Menge falsch/komisch.</p>
<p>- Komisch: Du deklarierst eine Funktion norm(double,double); welche nie wieder auftaucht<br />
- Komisch: Du definierst globale Variablen xi und summe<br />
- Falsch: Du setzt summe vorher nicht auf 0<br />
- Falsch: Du brauchst zwei Schleifen. Einmal für die Summe und ein zweites Mal für das Dividieren<br />
- Komisch: Du legst ein Array mit 4 Elementen an, benutzt aber nur drei</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1917134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1917134</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 25 Jun 2010 09:06:19 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit C++ on Fri, 25 Jun 2010 09:55:37 GMT]]></title><description><![CDATA[<p>Man kann in C (C++ ist der Code nur in cout,cin) nur einen Datentyp zurückgeben:</p>
<pre><code class="language-cpp">return  (xi, summe); // geht nich!
</code></pre>
<p>Achte wie die Schleifen verlaufen müssen.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;cmath&gt;

void norm(double *xi,int size);
double  xi[3], summe;
using namespace std;

void norm(double *xi,int size)
{
	for(int i = 0; i &lt; size; i++){ summe += xi[i]; }
	for(int i = 0; i &lt; size; i++) { xi[i] /= summe; }
}

int main(){

	xi[0] = 0.26; // Die erste Position im Array ist &quot;0&quot;
	xi[1] = 0.26;
	xi[2] = 0.26;

	norm(xi,sizeof(xi)/sizeof(xi[0]));
	// summe kannst du hier ausgeben weil sie oben global definiert ist.
	cout &lt;&lt; summe &lt;&lt; '\n' &lt;&lt; &quot;xi[1] = &quot; &lt;&lt; xi[1] &lt;&lt; '\n' &lt;&lt; &quot;Mit ENTER beenden!&quot;;

	cin.sync();
	cin.clear();
	cin.get();
	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1917135</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1917135</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Fri, 25 Jun 2010 09:55:37 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit C++ on Fri, 25 Jun 2010 10:34:58 GMT]]></title><description><![CDATA[<p>Am besten du gewöhnst dich gleich an std::vector, er ersetzt in den meisten Fällen das den *array.</p>
<p>Sieht dann so aus:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;

void norm(std::vector&lt;double&gt; &amp;xi);

using namespace std;

vector&lt;double&gt; xi;
double summe;

void norm(vector&lt;double&gt; &amp;xi)
{
	vector&lt;double&gt;::iterator i;
	for(i=xi.begin();i!=xi.end();i++){ summe += *i; } // ist es am besten

	for(int j=0;j&lt;xi.size();j++) {
		xi[j] /= summe; // so geht das auch, wenn bereits werte vorhanden sind
	}
}

int main(){

	xi.push_back(1.23); // schiebe einen Wert in die letzte Position
	xi.push_back(2.34);
	xi.push_back(3.45);

	norm(xi); //  keine größenangabe nötig

	cout &lt;&lt; &quot;summe = &quot; &lt;&lt; summe &lt;&lt; '\n';
	cout &lt;&lt; &quot;xi[0] = &quot; &lt;&lt; xi.at(0) &lt;&lt; '\n';
	cout &lt;&lt; &quot;xi[2] = &quot; &lt;&lt; xi.at(2) &lt;&lt; '\n';
	cout &lt;&lt; &quot;Mit ENTER beenden!&quot;;

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1917161</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1917161</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Fri, 25 Jun 2010 10:34:58 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit C++ on Fri, 25 Jun 2010 10:05:04 GMT]]></title><description><![CDATA[<p>darkfate schrieb:</p>
<blockquote>
<p>Am besten du gewöhnst dich gleich an std::vector, er ersetzt in den meisten Fällen das den *array.</p>
</blockquote>
<p>Und übergibst diesen bitte nicht als Kopie, sondern je nach Anforderung als Referenz oder konstante Referenz. Und verwendest auch keine globalen Variablen.</p>
<p>Nach noch ein paar Änderungen könnte dies wie folgt aussehen:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;

void norm(
    std::vector&lt;double&gt; &amp; xi, // Soll geändert werden, daher Referenz
    double &amp; summe);          // Soll geändert werden, daher Referenz

int main()
{
    std::vector&lt;double&gt; xi;
    xi.push_back(1.23);
    xi.push_back(2.34);
    xi.push_back(3.45);

    double summe = 0.0;
    norm(xi, summe);

    std::cout &lt;&lt; summe &lt;&lt; std::endl;
    std::cout &lt;&lt; &quot;xi[0] = &quot; &lt;&lt; xi[0];
    // ...
} 

void norm(
    std::vector&lt;double&gt; &amp; xi,
    double &amp; summe)
{
    // Was auch immer der Sinn von dieser Funktion sein sollte, ich
    // behaupte, die Berechnung ist nicht so, wie der OP sich das
    // vorstellt (ZUDEM: Arrays etc. beginnen beim Index 0).
    for(int pos=0, size=xi.size(); pos&lt;size; ++i) {
        summe += xi[pos];
        xi[pos] /= summe;
    }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1917171</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1917171</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Fri, 25 Jun 2010 10:05:04 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit C++ on Fri, 25 Jun 2010 10:10:19 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<p>Und übergibst diesen bitte nicht als Kopie, sondern je nach Anforderung als Referenz oder konstante Referenz. Und verwendest auch keine globalen Variablen.</p>
</blockquote>
<p>So grausam wollte ich erstmal nicht sein <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1917176</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1917176</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Fri, 25 Jun 2010 10:10:19 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit C++ on Fri, 25 Jun 2010 10:22:02 GMT]]></title><description><![CDATA[<p>darkfate schrieb:</p>
<blockquote>
<p>asc schrieb:</p>
<blockquote>
<p>Und übergibst diesen bitte nicht als Kopie, sondern je nach Anforderung als Referenz oder konstante Referenz. Und verwendest auch keine globalen Variablen.</p>
</blockquote>
<p>So grausam wollte ich erstmal nicht sein <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p>Nur ist dein Programm schlicht und ergreifend falsch. Da nur die summe (da global) dauerhaft geändert wird. Der Vektor wurde als Kopie übergeben, und nur diese Kopie (die am Ende der Funktion zerstört wird) wurde angepasst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1917184</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1917184</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Fri, 25 Jun 2010 10:22:02 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit C++ on Fri, 25 Jun 2010 10:32:34 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<p>Nur ist dein Programm schlicht und ergreifend falsch. Da nur die summe (da global) dauerhaft geändert wird. Der Vektor wurde als Kopie übergeben, und nur diese Kopie (die am Ende der Funktion zerstört wird) wurde angepasst.</p>
</blockquote>
<p>Stimmt, da fehlt ein &amp; in der Funktion</p>
<pre><code class="language-cpp">void norm(std::vector&lt;double&gt; &amp;xi);
</code></pre>
<p>und beim Aufruf</p>
<pre><code class="language-cpp">void norm(vector&lt;double&gt; &amp;xi){
...
}
</code></pre>
<p>Normieren tut aber dennoch richtig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1917192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1917192</guid><dc:creator><![CDATA[darkfate]]></dc:creator><pubDate>Fri, 25 Jun 2010 10:32:34 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit C++ on Fri, 25 Jun 2010 10:37:24 GMT]]></title><description><![CDATA[<p>darkfate schrieb:</p>
<blockquote>
<p>Zunächst einmal:<br />
Wenn du Arrays übergibst, dann musst du immer die Größe mit angeben.</p>
</blockquote>
<p>Nicht wenn wie hier die Größe vorher schon festgelegt ist. Er weiß ja dass genau 3 Elemente drin sein sollen.</p>
<p>Was hier ein problem ist:<br />
- du deklarierst eine Funktion norm(double, double) und definierst danach eine Funktion norm(double*), die eine andere Signatur hat! Wozu?<br />
- du definierst ein Array mit 4 Elementen obwohl du sagst du hast nur 3 - wozu? (das ist kein char-Array wo man ein Element mehr braucht für das abschließende '\0')<br />
- deine for-Schleife ist zwar eingerückt als solle sie über zwei Zeilen laufen, de facto läuft sie aber nur über die erste. -&gt; Klammern setzen!<br />
- die Rückgabe der Funktion tut nicht was du erwartest. Wobei nicht klar ist, was du überhaupt erwartest. (xi, summe) hat den Wert von summe, weril beim Komma-Operator der wert des letzten Ausdrucks den Wert des gesamtausdrucks ergibt.<br />
- summe als globale variable ist ungünstig bzw. schlechtes Design. Noch dazu initialisierst du die Variable nirgends, es kann also alles mögliche bei rauskommen.</p>
<p>Das alles zusammen sieht nicht so aus als ob du genau wüsstest was du tust. Hast du dir die zugehörigen Kapitel im Buch schon genau durchgelesen und verstanden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1917194</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1917194</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 25 Jun 2010 10:37:24 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit C++ on Fri, 25 Jun 2010 12:08:56 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>- summe als globale variable ist ungünstig bzw. schlechtes Design. Noch dazu initialisierst du die Variable nirgends, es kann also alles mögliche bei rauskommen.</p>
</blockquote>
<p>Nicht deswegen &quot;kann alles mögliche rauskommen&quot;. summe wird, nachdem das Programm in den Arbeitsspeicher geladen wurde, 0 sein. Es gibt aber woanders undefiniertes Verhalten...</p>
<pre><code class="language-cpp">for(i = 1; i &lt;= 3; i++)
  summe += xi[i];
  xi[i] = xi[i]/summe; // &lt;-- gehört nicht zur Schleife, i ist 4.
</code></pre>
<p>Denn xi[4] gibt es nicht.</p>
<p>Alles in allem sind da ziemlich viele Würmer drin -- soviele, dass man nicht genau weiß, was das Programm eigentlich machen sollte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1917241</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1917241</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 25 Jun 2010 12:08:56 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit C++ on Tue, 29 Jun 2010 06:56:03 GMT]]></title><description><![CDATA[<p>Erst einmal vielen dank für die Antworten und Anregungen. Das Programm läuft jetzt wie gewünscht.<br />
Bei dem Programm handelt es sich um eine Konsolenanwendung, mit deren Hilfe Messdaten ausgewertet werden sollen. Die Anwendung enthält verschiedenen Ein- und Ausgaben sowie weitere Berechnungsschritte. Zur besseren Übersichtlichkeit habe ich diese aus dem Beispielcode entfernt. Wahrscheinlich daher die Unklarheiten bzw. auch einige Fehler. Ich werde bei der nächsten Fragestellung mehr zum Ziel der Anwendung schreiben. Das Hauptproblem war die for-Anweisung und damit die falschen Ergebnisse der weiteren Berechnungen.</p>
<p>Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1918706</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1918706</guid><dc:creator><![CDATA[derrico]]></dc:creator><pubDate>Tue, 29 Jun 2010 06:56:03 GMT</pubDate></item></channel></rss>