<?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[Ungleiche Werte zweier Mengen bestimmen und abspeichern]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich schreibe gerade ein Programm, dass ungleiche Werte zweier Mengen bestimmen und abspeichern soll.<br />
Zum Beispiel: Menge A(1,2,3), Menge B( 1,4,5 ), C = A + B = (2,3,4,5)</p>
<p>Mein Lösungsansatz funktioniert leider nicht immer. Mit den Werten im main gibt es eine Ausgabe wie folgt: -842150451 2.</p>
<p>2 ist schon richtig, aber was ist mit 4? Ich habe das Programm schon mehrmals mit Prozedurschritten durchlaufen und konnte keine Fehler finden. Ich habe nur den betreffenden Abschnitt kopiert. Die += Operator Überladung, print() und die Konstruktoren gibt es schon. Die Kommentierten Zeilen sind der zweite Teil der Überladung. Momentan sollten nur 2 und 4 abgespeichert werden.</p>
<pre><code class="language-cpp">set &lt;T&gt; operator +( set s )
	{
		int i,j,g = 0;
		T *r = NULL;
		int h = 1;

	/*	for( i = 0; i &lt; length;i++)
		{
			h = 1;
			for( j = 0; j&lt;(s.length); j++ )
				if (s.m[j] == m[i])
				{
					h = 0;
				}
			if( h != 0 )
			{
				r = new T[1];
				r[g++] = m[i];
			}
		}*/
		for( i = 0; i &lt; s.length;i++)
		{
			h = 1;
			for( j = 0; j &lt; length; j++ )
				if (m[j] == s.m[i])
				{
					h = 0;
				}
			if( h != 0 )
			{
				r = new T[1];
				r[g++] = s.m[i];
			}
		}
		m = r;
		this-&gt;length = g;
		return *this;
	}

};

void main(void)
{
	set &lt;int&gt; a;
	set &lt;int&gt; b;
	set &lt;int&gt; c;
	a += 5; a += 6; a += 8;
	b += 4; b += 6; b += 8; b += 2; 
	c = a + b;
	c.print();
	cin.get();
}
</code></pre>
<p>Könnt ihr mir bitte helfen?</p>
<p>Vielen Dank<br />
randy2</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/287445/ungleiche-werte-zweier-mengen-bestimmen-und-abspeichern</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 10:25:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/287445.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 28 May 2011 18:12:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Ungleiche Werte zweier Mengen bestimmen und abspeichern on Sat, 28 May 2011 18:12:27 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich schreibe gerade ein Programm, dass ungleiche Werte zweier Mengen bestimmen und abspeichern soll.<br />
Zum Beispiel: Menge A(1,2,3), Menge B( 1,4,5 ), C = A + B = (2,3,4,5)</p>
<p>Mein Lösungsansatz funktioniert leider nicht immer. Mit den Werten im main gibt es eine Ausgabe wie folgt: -842150451 2.</p>
<p>2 ist schon richtig, aber was ist mit 4? Ich habe das Programm schon mehrmals mit Prozedurschritten durchlaufen und konnte keine Fehler finden. Ich habe nur den betreffenden Abschnitt kopiert. Die += Operator Überladung, print() und die Konstruktoren gibt es schon. Die Kommentierten Zeilen sind der zweite Teil der Überladung. Momentan sollten nur 2 und 4 abgespeichert werden.</p>
<pre><code class="language-cpp">set &lt;T&gt; operator +( set s )
	{
		int i,j,g = 0;
		T *r = NULL;
		int h = 1;

	/*	for( i = 0; i &lt; length;i++)
		{
			h = 1;
			for( j = 0; j&lt;(s.length); j++ )
				if (s.m[j] == m[i])
				{
					h = 0;
				}
			if( h != 0 )
			{
				r = new T[1];
				r[g++] = m[i];
			}
		}*/
		for( i = 0; i &lt; s.length;i++)
		{
			h = 1;
			for( j = 0; j &lt; length; j++ )
				if (m[j] == s.m[i])
				{
					h = 0;
				}
			if( h != 0 )
			{
				r = new T[1];
				r[g++] = s.m[i];
			}
		}
		m = r;
		this-&gt;length = g;
		return *this;
	}

};

void main(void)
{
	set &lt;int&gt; a;
	set &lt;int&gt; b;
	set &lt;int&gt; c;
	a += 5; a += 6; a += 8;
	b += 4; b += 6; b += 8; b += 2; 
	c = a + b;
	c.print();
	cin.get();
}
</code></pre>
<p>Könnt ihr mir bitte helfen?</p>
<p>Vielen Dank<br />
randy2</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070207</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070207</guid><dc:creator><![CDATA[randy2]]></dc:creator><pubDate>Sat, 28 May 2011 18:12:27 GMT</pubDate></item><item><title><![CDATA[Reply to Ungleiche Werte zweier Mengen bestimmen und abspeichern on Sat, 28 May 2011 18:21:03 GMT]]></title><description><![CDATA[<p>Das ist aber nicht die std::set&lt;..&gt;, die du dort verwendest?</p>
<p>Ansonsten empfehle ich dir mal einen Blick in den Header &lt;algorithm&gt; - dort gibt es eine Reihe Funktionen, die mit set_... beginnen und solche Berechnungen erledigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070214</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070214</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 28 May 2011 18:21:03 GMT</pubDate></item><item><title><![CDATA[Reply to Ungleiche Werte zweier Mengen bestimmen und abspeichern on Sat, 28 May 2011 19:06:11 GMT]]></title><description><![CDATA[<p>Nein, es handelt sich um ein template &lt;typename T&gt;. Diese Berechnung ist als Übung gedacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070222</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070222</guid><dc:creator><![CDATA[randy2]]></dc:creator><pubDate>Sat, 28 May 2011 19:06:11 GMT</pubDate></item><item><title><![CDATA[Reply to Ungleiche Werte zweier Mengen bestimmen und abspeichern on Sun, 29 May 2011 08:46:20 GMT]]></title><description><![CDATA[<p>Aus den Codeschnipseln würde ich schliessen, dass du das Set in einem Array m speicherst. Im operator+ verwendest du r, um das Zwischenergebnis zu speichern. Dann kann es aber nicht sinnvoll sein, r immer wieder mit new T[1] ein einelementiges Array zuzuweisen. Ausserdem veränderst du this, d.h. in a ist nach der Addition des Ergebnis enthalten. Ob das Ergebnis in der Zuweisung an c wenigstens richtig kopiert wird kann man aus dem vorhandenen Code nicht erkennen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070348</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070348</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sun, 29 May 2011 08:46:20 GMT</pubDate></item><item><title><![CDATA[Reply to Ungleiche Werte zweier Mengen bestimmen und abspeichern on Sun, 29 May 2011 08:51:52 GMT]]></title><description><![CDATA[<p>randy2 schrieb:</p>
<blockquote>
<p>Nein, es handelt sich um ein template &lt;typename T&gt;.</p>
</blockquote>
<p>std::set ist auch ein &quot;template&lt;typename&gt;&quot; <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Der einfache Vorschlag: Verwende zur Speicherung einen STL-Container und setze die ganzen Mengen-Operationen mit den set_... Algorithmen der STL um.</p>
<p>Wenn du es selber programmieren willst: Sorg dafür, daß die einzelnen Mengen immer sortiert sind, dann kannst du parallel durch beide Mengen iterieren und die Werte vergleichen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070350</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070350</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sun, 29 May 2011 08:51:52 GMT</pubDate></item><item><title><![CDATA[Reply to Ungleiche Werte zweier Mengen bestimmen und abspeichern on Sun, 29 May 2011 10:26:08 GMT]]></title><description><![CDATA[<p>@manni66</p>
<p>Ich verstehe nicht, warum es nicht sinnvoll ist, r immer ein einelementiges Array zuzuweisen. Jeder Wert, der die Bedingungen erfüllt, wird in r nacheinander eingetragen. Mit Vollendung der Schleife werden alle Werte in m übertragen (So soll es zumindest sein). Das mit this werde ich ändern, allerdings sollte in C trotzdem die richtigen Werte stehen. Hier der ganze Code:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string.h&gt;

using namespace std;
template &lt;typename T&gt;
class set 
{
	T *m;
	int length;
public:

	set(){m = NULL;length = 0;}
	set ( T *mm )
	{
		m = new T[length = mm-&gt;length];
		for( int i = 0; i &lt; length; i++ )
		{

			m[i] = mm[i];

		}

	}
	set &lt;T&gt; &amp;operator += (T b )
	{
		length++;
		if( !m )
		{	
			m = new T[1];
			m[0] = b;
			return *this;
		}
		T *p = new T[length];
		for( int i = 0; i &lt; length-1; i++)
		{
			p[i] = m[i];
		}
		p[length-1] = b;
		delete[] m;
		m = p;
		return *this; 
	}
	void print(void)
	{
		for( int i = 0; i &lt; length; i++ )
		{
			cout &lt;&lt; &quot; &quot; &lt;&lt; m[i];

		}
	}
	set &lt;T&gt; operator +( set s )
	{
		int i,j,g = 0;
		T *r = NULL;
		int h = 1;

	/*	for( i = 0; i &lt; length;i++)
		{
			h = 1;
			for( j = 0; j&lt;(s.length); j++ )
				if (s.m[j] == m[i])
				{
					h = 0;
				}
			if( h != 0 )
			{
				r = new T[1];
				r[g++] = m[i];
			}
		}*/
		for( i = 0; i &lt; s.length;i++)
		{
			h = 1;
			for( j = 0; j &lt; length; j++ )
				if (m[j] == s.m[i])
				{
					h = 0;
				}
			if( h != 0 )
			{
				r = new T[1];
				r[g++] = s.m[i];
			}
		}
		m = r;
		this-&gt;length = g;
		return *this;
	}

};

void main(void)
{
	set &lt;int&gt; a;
	set &lt;int&gt; b;
	set &lt;int&gt; c;
	a += 5; a += 6; a += 8;
	b += 4; b += 6; b += 8; b += 2; 
	c = a + b;
	c.print();
	cin.get();
}
</code></pre>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10318">@CStoll</a></p>
<p>Das wusste ich nicht, ich habe gerade erst mit den Templates begonnen. Das mit den Sortieren ist ein guter Ansatz, den ich verfolgen werde.</p>
<p>Gruß<br />
randy2</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070390</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070390</guid><dc:creator><![CDATA[randy2]]></dc:creator><pubDate>Sun, 29 May 2011 10:26:08 GMT</pubDate></item><item><title><![CDATA[Reply to Ungleiche Werte zweier Mengen bestimmen und abspeichern on Sun, 29 May 2011 10:33:11 GMT]]></title><description><![CDATA[<p>randy2 schrieb:</p>
<blockquote>
<p>ich schreibe gerade ein Programm, dass ungleiche Werte zweier Mengen bestimmen und abspeichern soll.<br />
Zum Beispiel: Menge A(1,2,3), Menge B( 1,4,5 ), C = A + B = (2,3,4,5)</p>
</blockquote>
<p>Du könntest dir auch den STL-Algorithmus <code>std::set_symmetric_difference()</code> auf <a href="http://www.cplusplus.com" rel="nofollow">www.cplusplus.com</a> anschauen.</p>
<p>randy2 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">void main(void)
</code></pre>
</blockquote>
<p><code>main()</code> muss <code>int</code> zurückgeben, was anderes ist nicht standardkonform, auch wenn dein Compiler hier tolerant sein mag.</p>
<p>randy2 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">#include &lt;string.h&gt;
</code></pre>
</blockquote>
<p>Nimm entweder <code>&lt;string&gt;</code> (für die Klasse <code>std::string</code> ) oder <code>&lt;cstring&gt;</code> (für die C-Zeichenkettenfunktionen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070399</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070399</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 29 May 2011 10:33:11 GMT</pubDate></item><item><title><![CDATA[Reply to Ungleiche Werte zweier Mengen bestimmen und abspeichern on Sun, 29 May 2011 10:46:10 GMT]]></title><description><![CDATA[<p>Noch ein anderer Punkt, ich würde für diese Operation nicht den +Operator überladen. Intuitiv würde ich sage, dass diese Operation entweder die Vereinigung ist, oder wie in der Mathematik auch üblich, eine Art elementweise Addition.</p>
<p>Und der Tipp mit symmetrischer Differenz ist auch sehr gut. Schreibe doch einfach operator+ als Vereinigung um, operator/ als Differenz und operator- als Schnitt. Dann kannst du die symmetrische Differenz viel einfacher Implementieren <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>
<pre><code class="language-cpp">set symm_diff(set A, set B) {
  return (A + B) / (A - B);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2070409</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070409</guid><dc:creator><![CDATA[bmario]]></dc:creator><pubDate>Sun, 29 May 2011 10:46:10 GMT</pubDate></item><item><title><![CDATA[Reply to Ungleiche Werte zweier Mengen bestimmen und abspeichern on Sun, 29 May 2011 10:54:35 GMT]]></title><description><![CDATA[<p>bmario schrieb:</p>
<blockquote>
<p>Schreibe doch einfach operator+ als Vereinigung um, operator/ als Differenz und operator- als Schnitt.</p>
</blockquote>
<p>Aber <code>-</code> als Schnitt? Minus kommutativ? Finde ich auch nicht besonders intuitiv, zumal man viel schneller an Differenz (mathematisch \) denkt. Ich würde wenn überhaupt folgende Überladungen wählen. Sicherer sind natürlich benannte Funktionen.</p>
<ul>
<li><code>&amp;</code> Schnitt: Elemente, die in A <strong>und</strong> B sind</li>
<li><code>|</code> Vereinigung: Elemente, die in A <strong>oder</strong> B sind</li>
<li><code>^</code> Symmetrische Differenz: Elemente, die <strong>entweder</strong> in A <strong>oder</strong> B sind</li>
</ul>
]]></description><link>https://www.c-plusplus.net/forum/post/2070412</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070412</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 29 May 2011 10:54:35 GMT</pubDate></item><item><title><![CDATA[Reply to Ungleiche Werte zweier Mengen bestimmen und abspeichern on Sun, 29 May 2011 12:12:05 GMT]]></title><description><![CDATA[<p>randy2 schrieb:</p>
<blockquote>
<p>@manni66</p>
<p>Ich verstehe nicht, warum es nicht sinnvoll ist, r immer ein einelementiges Array zuzuweisen. Jeder Wert, der die Bedingungen erfüllt, wird in r nacheinander eingetragen. Mit Vollendung der Schleife werden alle Werte in m übertragen (So soll es zumindest sein).</p>
</blockquote>
<p>So funktioniert es aber leider in C++ nicht. r ist immer das letzte einelementige Array, das du erzeugt hast. Was du erreichen möchtest geht mit std::vector und push_back.Mit &quot;nackten&quot; Arrays müsstest du vorgehen wie in deiner operator+= Funktion.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070442</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sun, 29 May 2011 12:12:05 GMT</pubDate></item><item><title><![CDATA[Reply to Ungleiche Werte zweier Mengen bestimmen und abspeichern on Sun, 29 May 2011 15:16:27 GMT]]></title><description><![CDATA[<p>Danke, das war der Fehler. Ich habe nun im + Operator ein ganzes Objekt erzeugt, an dem der += Operator angewendet wird.</p>
<p>Gruß<br />
randy2</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070539</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070539</guid><dc:creator><![CDATA[randy2]]></dc:creator><pubDate>Sun, 29 May 2011 15:16:27 GMT</pubDate></item></channel></rss>