<?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[vectoraddition funktioniert nicht]]></title><description><![CDATA[<p>hallo zusammen,</p>
<p>habe ein kleines programm zur vektoraddition und multiplikation geschrieben. leider tut die addition nicht, statt der summe zweier vektoren wird stets nur der erste vektor wiedergegeben. das problem liegt an der additionsanweisung sum.v[i] = v[i] + x.v[i]; an sich, genau genommen am letzten summand. kann mir jemand sagen, was das problem ist?</p>
<p>für andere tipps bzgl meines programmierstils bin ich auch dankbar!</p>
<p>danke!</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class vector
{
      private:
      int dim;
      double* v;

      public:
      vector(int);
      ~vector();

      friend istream&amp; operator &gt;&gt; (istream&amp; is, vector&amp; x);
      friend ostream&amp; operator &lt;&lt; (ostream&amp; os, vector x);

      vector operator + (vector);
      double operator * (vector);
};

vector::vector(int n)
{
      v = new double[n];
      dim = n;
      for(int i=0; i&lt;dim; i++) v[i]=0;
}

vector::~vector()
{
      delete[] v;
}

istream&amp; operator &gt;&gt; (istream&amp; is, vector&amp; x)
{
         for(int i=0; i&lt;x.dim; i++) cin &gt;&gt; x.v[i];
         return is;
}

ostream&amp; operator &lt;&lt; (ostream&amp; os, vector x)
{
         for(int i=0; i&lt;x.dim; i++) cout &lt;&lt; x.v[i] &lt;&lt; &quot;\n&quot;;
         return os;
}

vector vector::operator + (vector x)
{
       vector sum(x.dim);
       for (int i=0; i&lt;x.dim; i++) sum.v[i] = v[i] + x.v[i];
       return sum;
}

double vector::operator * (vector x)
{
       double produkt=0;
       for (int i=0; i&lt;x.dim; i++) produkt += v[i] * x.v[i];
       return produkt;
}

int main()
{
    int n;
    cin &gt;&gt; n; cout &lt;&lt; endl;

    vector a(n); vector b(n);

    cin &gt;&gt; a; cin &gt;&gt; b; cout &lt;&lt; endl;

    cout &lt;&lt; a; cout &lt;&lt; &quot;\n&quot;; cout &lt;&lt; b; cout &lt;&lt; &quot;\n&quot;;

    double skalarprodukt = a*b; cout &lt;&lt; skalarprodukt &lt;&lt; endl &lt;&lt; endl;

    vector add(n); add  = a + b; cout &lt;&lt; add;

    system(&quot;PAUSE&quot;);
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/232773/vectoraddition-funktioniert-nicht</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 05:21:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/232773.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 27 Jan 2009 01:29:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to vectoraddition funktioniert nicht on Tue, 27 Jan 2009 01:29:29 GMT]]></title><description><![CDATA[<p>hallo zusammen,</p>
<p>habe ein kleines programm zur vektoraddition und multiplikation geschrieben. leider tut die addition nicht, statt der summe zweier vektoren wird stets nur der erste vektor wiedergegeben. das problem liegt an der additionsanweisung sum.v[i] = v[i] + x.v[i]; an sich, genau genommen am letzten summand. kann mir jemand sagen, was das problem ist?</p>
<p>für andere tipps bzgl meines programmierstils bin ich auch dankbar!</p>
<p>danke!</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class vector
{
      private:
      int dim;
      double* v;

      public:
      vector(int);
      ~vector();

      friend istream&amp; operator &gt;&gt; (istream&amp; is, vector&amp; x);
      friend ostream&amp; operator &lt;&lt; (ostream&amp; os, vector x);

      vector operator + (vector);
      double operator * (vector);
};

vector::vector(int n)
{
      v = new double[n];
      dim = n;
      for(int i=0; i&lt;dim; i++) v[i]=0;
}

vector::~vector()
{
      delete[] v;
}

istream&amp; operator &gt;&gt; (istream&amp; is, vector&amp; x)
{
         for(int i=0; i&lt;x.dim; i++) cin &gt;&gt; x.v[i];
         return is;
}

ostream&amp; operator &lt;&lt; (ostream&amp; os, vector x)
{
         for(int i=0; i&lt;x.dim; i++) cout &lt;&lt; x.v[i] &lt;&lt; &quot;\n&quot;;
         return os;
}

vector vector::operator + (vector x)
{
       vector sum(x.dim);
       for (int i=0; i&lt;x.dim; i++) sum.v[i] = v[i] + x.v[i];
       return sum;
}

double vector::operator * (vector x)
{
       double produkt=0;
       for (int i=0; i&lt;x.dim; i++) produkt += v[i] * x.v[i];
       return produkt;
}

int main()
{
    int n;
    cin &gt;&gt; n; cout &lt;&lt; endl;

    vector a(n); vector b(n);

    cin &gt;&gt; a; cin &gt;&gt; b; cout &lt;&lt; endl;

    cout &lt;&lt; a; cout &lt;&lt; &quot;\n&quot;; cout &lt;&lt; b; cout &lt;&lt; &quot;\n&quot;;

    double skalarprodukt = a*b; cout &lt;&lt; skalarprodukt &lt;&lt; endl &lt;&lt; endl;

    vector add(n); add  = a + b; cout &lt;&lt; add;

    system(&quot;PAUSE&quot;);
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1652988</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1652988</guid><dc:creator><![CDATA[vector]]></dc:creator><pubDate>Tue, 27 Jan 2009 01:29:29 GMT</pubDate></item><item><title><![CDATA[Reply to vectoraddition funktioniert nicht on Tue, 27 Jan 2009 01:41:16 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">vector operator + (vector&amp;);
</code></pre>
<p>außerdem fehlen dir ein kopierkonstruktor und ein zuweisungsoperator.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1652992</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1652992</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 27 Jan 2009 01:41:16 GMT</pubDate></item><item><title><![CDATA[Reply to vectoraddition funktioniert nicht on Tue, 27 Jan 2009 01:55:52 GMT]]></title><description><![CDATA[<p>danke für die antwort, jedoch behebt dein vorschlag mein problem leidernicht - ich erhalte stets den ersten vektor als ergebnis! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":-("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1652994</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1652994</guid><dc:creator><![CDATA[vector]]></dc:creator><pubDate>Tue, 27 Jan 2009 01:55:52 GMT</pubDate></item><item><title><![CDATA[Reply to vectoraddition funktioniert nicht on Tue, 27 Jan 2009 02:38:32 GMT]]></title><description><![CDATA[<p>implementier den copy-ctor und assignment-operator!<br />
das ist kein scherz oder so, ohne die beiden wird das nie was.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1652998</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1652998</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 27 Jan 2009 02:38:32 GMT</pubDate></item><item><title><![CDATA[Reply to vectoraddition funktioniert nicht on Tue, 27 Jan 2009 07:54:49 GMT]]></title><description><![CDATA[<p>Und schau mal hier:</p>
<blockquote>
<p>istream&amp; operator &gt;&gt; (istream&amp; <strong>is</strong>, vector&amp; x)<br />
{</p>
<p>for(int i=0; i&lt;x.dim; i++) <strong>cin</strong> &gt;&gt; x.v[i];<br />
return is;</p>
<p>}</p>
</blockquote>
<p>Für was übergibst du den istream, wenn du ihn nicht nutzen willst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1653039</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1653039</guid><dc:creator><![CDATA[franz]]></dc:creator><pubDate>Tue, 27 Jan 2009 07:54:49 GMT</pubDate></item><item><title><![CDATA[Reply to vectoraddition funktioniert nicht on Tue, 27 Jan 2009 11:03:46 GMT]]></title><description><![CDATA[<p>leider weiß ich nicht, was du damit genau meinst, franz. tut mir leid, ich bin anfänger.</p>
<p>aber wieso klappt denn nun die addition nicht? es muss irgendwas geben, wieso die komponente des zu addierenden vektors ignoriert wird, denn mit zahlen oder der komponente des ursprünglichen vektors geht es problemlos.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1653133</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1653133</guid><dc:creator><![CDATA[vector]]></dc:creator><pubDate>Tue, 27 Jan 2009 11:03:46 GMT</pubDate></item><item><title><![CDATA[Reply to vectoraddition funktioniert nicht on Tue, 27 Jan 2009 11:21:11 GMT]]></title><description><![CDATA[<p>Du hast als Member den Pointer *double <em>v</em>.<br />
Da der Default-Kopierkonstruktor hier nur die Adresse kopiert (und damit bei einer Kopie des Objektes auf das selbe Array im Speicher zeigt) MUSST (!) du einen Kopier-Konstruktor, ebenso wie einen Zuweisungsoperator (operator=) implementieren, der ein neues double-array anlegt und mit den WERTEN des alten Arrays füllt.</p>
<p>Da du deine operator+ und operator* nicht mit ner Referenz sondern einem Value als Argument implementieren willst (k.A. warum) hast du hier schon mal eine Kopie, die wohl auch schief gehen wird.</p>
<p>Und wegen dem istream als Argument:</p>
<pre><code>istream&amp; operator &gt;&gt; (istream&amp; is, vector&amp; x)
{
   for(int i=0; i&lt;x.dim; i++) is &gt;&gt; x.v[i];
   return is;
}
</code></pre>
<p>So willst du es haben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> Damit schreibst du auch in den Stream, in den geschrieben werden soll, und gibst den auch noch zurück <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
Ein <strong>cout &lt;&lt; 3;</strong> ist nichts anderes als der Aufruf <strong>operator&lt;&lt;(cout, 3);</strong>. Dass du mein voriges Anliegen verstehst.</p>
<p>Grüße<br />
Franz</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1653136</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1653136</guid><dc:creator><![CDATA[franz]]></dc:creator><pubDate>Tue, 27 Jan 2009 11:21:11 GMT</pubDate></item><item><title><![CDATA[Reply to vectoraddition funktioniert nicht on Tue, 27 Jan 2009 11:37:12 GMT]]></title><description><![CDATA[<p>achso, danke, jetzt weiß ich was du meinst.</p>
<p>die idee mit dieser vektorrechnung hatte ich selbst und wollte es zur übung implementieren, in der uni hatten wir den copyconstructor etc noch nicht wirklich geübt.</p>
<p>bei dem instream habe ich anfangs using namespace std verwendet, sodass die eingabe und ausgabe bisher auch problemlos verlief. ist die formulierung mit cin / cout &quot;falsch&quot;?</p>
<p>danke!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1653139</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1653139</guid><dc:creator><![CDATA[vector]]></dc:creator><pubDate>Tue, 27 Jan 2009 11:37:12 GMT</pubDate></item><item><title><![CDATA[Reply to vectoraddition funktioniert nicht on Tue, 27 Jan 2009 12:59:04 GMT]]></title><description><![CDATA[<p>vector schrieb:</p>
<blockquote>
<p>...in der uni hatten wir den copyconstructor etc noch nicht wirklich geübt....</p>
</blockquote>
<p>Falls Du das erstmal nicht selbst machen willst, kannst Du natürlich auch statt C-Arrays direkt std::vector nehmen (also nicht anstelle von Deinem vector, sondern nur als Ersatz für das &quot;new[]/delete[]-Geschäft&quot; ... der bringt seine &quot;Big3&quot; (CpyCtor, operator=(), Dtor) schon fertig mit und lässt sich ansonsten genauso bearbeiten wie ein dynamisch alloziertes Array.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1653173</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1653173</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 27 Jan 2009 12:59:04 GMT</pubDate></item><item><title><![CDATA[Reply to vectoraddition funktioniert nicht on Tue, 27 Jan 2009 18:11:03 GMT]]></title><description><![CDATA[<p>vector schrieb:</p>
<blockquote>
<p>bei dem instream habe ich anfangs using namespace std verwendet, sodass die eingabe und ausgabe bisher auch problemlos verlief. ist die formulierung mit cin / cout &quot;falsch&quot;?</p>
</blockquote>
<p>In dem Fall ist es falsch, ja. Oder besser gesagt es macht nicht das, was du willst. Du willst ja in einen beliebigen stream einlesen. Und das stellst du mit der Funktion ja bereit. Nun musst du ja noch in genau den übergebenen stream einlesen und dann stimmt es. Und das schöne ist, dass du ebenfalls in die Konsole schreiben kannst, oder davon einelesen, ohne eine neue Funktion zu definieren. Und das kommt daher, da cout und cin auch streams sind, welche einfach extern deklariert wurden und auf die Standardausgabe verweisen:<br />
<a href="http://www.cplusplus.com/reference/iostream/" rel="nofollow">http://www.cplusplus.com/reference/iostream/</a></p>
<p>Die &lt;&lt; und &gt;&gt; Operatoren sind eigentlich ganz normale Funktionen, welche aber syntaktischen Zucker bieten. (z.B das schöne verknüpfen, was du von der Ausgabe her kennst). Sie übergeben die Argumente einfach auf eine für Funktionen ungewöhnliche Art und das kann verwirren.<br />
Wie franz schon sagte, bedeutet ein</p>
<pre><code class="language-cpp">std::cout &lt;&lt; &quot;hallo, welt&quot;;
</code></pre>
<p>nichts anderes, als :</p>
<pre><code class="language-cpp">std::operator &lt;&lt; (std::cout,&quot;hallo, welt&quot;);
</code></pre>
<p>Ist aber verständlicherwiese nicht schön zu lesen. <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/1653393</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1653393</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 27 Jan 2009 18:11:03 GMT</pubDate></item></channel></rss>