<?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[bubblesort]]></title><description><![CDATA[<p>Hallo!<br />
Ich soll ein Char-Array mit Telefonbucheinträgen, mit Hilfe des Bubblesort-Algorithmus nach Namen sortieren. Die Klassenhierarchie und Methodennamen waren soweit vorgeben.</p>
<p>Mein Programm sieht so aus:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

class sortable
{
	public:
		char *primkey;

		sortable(){}

		sortable* sinkingSort(sortable *feld, int anz)
		{
			for(int obergrenze = anz-1; obergrenze &gt; 0; --obergrenze)
			{
				bool austausch = false;
				for(int pos = 0; pos &lt; obergrenze; ++pos)
				{
					if(strcmp(feld[pos].primkey, feld[pos+1].primkey))
					{
						char *tmp = feld[pos].primkey;
						feld[pos].primkey = feld[pos-1].primkey;
						feld [pos-1].primkey = tmp;
						austausch = true;
					}
				}
				if(!austausch)
				{
					break;
				}
			}
			return feld;
		}

		~sortable(){}
};

class Telefonbucheintrag : public sortable
{
	private:
		char *telefonnummer;
		char *vorname;
		char *name;

	public:
		Telefonbucheintrag(){}

		Telefonbucheintrag(char* telefonnummer, char* vorname, char* name)
		{
			this-&gt;telefonnummer = telefonnummer;
			this-&gt;vorname = vorname;
			this-&gt;name = name;
			primkey = name;
		}

		char *getTelefonnummer()
		{
			return telefonnummer;
		}

		char *getVorname()
		{
			return vorname;
		}

		char *getName()
		{
			return name;
		}

		~Telefonbucheintrag(){}
};

int main()
{
	Telefonbucheintrag* Telefonbuch[10];
	Telefonbuch[0] = new Telefonbucheintrag(&quot;94949&quot;,&quot;fritz&quot;,&quot;mueller&quot;);  
	Telefonbuch[1] = new Telefonbucheintrag(&quot;49649&quot;,&quot;karl&quot;,&quot;tell&quot;);
	Telefonbuch[2] = new Telefonbucheintrag(&quot;66161&quot;,&quot;heiz&quot;,&quot;tor&quot;);
	Telefonbuch[3] = new Telefonbucheintrag(&quot;94125&quot;,&quot;hilde&quot;,&quot;mett&quot;);
	Telefonbuch[4] = new Telefonbucheintrag(&quot;12144&quot;,&quot;helga&quot;,&quot;zabel&quot;);
	Telefonbuch[5] = new Telefonbucheintrag(&quot;32629&quot;,&quot;emma&quot;,&quot;tillmann&quot;);
	Telefonbuch[6] = new Telefonbucheintrag(&quot;46998&quot;,&quot;ursula&quot;,&quot;maier&quot;);
	Telefonbuch[7] = new Telefonbucheintrag(&quot;26598&quot;,&quot;ute&quot;,&quot;keller&quot;);
	Telefonbuch[8] = new Telefonbucheintrag(&quot;71561&quot;,&quot;maria&quot;,&quot;mustermann&quot;);
	Telefonbuch[9] = new Telefonbucheintrag(&quot;82321&quot;,&quot;herbert&quot;,&quot;schmitz&quot;);

	for(int i = 0; i &lt; 10; ++i)
	{
		cout &lt;&lt; Telefonbuch[i]-&gt;getTelefonnummer() &lt;&lt; ' ' 
			 &lt;&lt; Telefonbuch[i]-&gt;getVorname() &lt;&lt; ' ' 
			 &lt;&lt; Telefonbuch[i]-&gt;getName() &lt;&lt; endl;
	}

	Telefonbuch[0]-&gt;sinkingSort((sortable*)Telefonbuch, 10);

	for(int i = 0; i &lt; 10; ++i)
	{
		cout &lt;&lt; Telefonbuch[i]-&gt;getTelefonnummer() &lt;&lt; ' ' 
			 &lt;&lt; Telefonbuch[i]-&gt;getVorname() &lt;&lt; ' ' 
		 	 &lt;&lt; Telefonbuch[i]-&gt;getName() &lt;&lt; endl;
	}

	cin.get();

	return 0;
}
</code></pre>
<p>bei:</p>
<pre><code class="language-cpp">if(strcmp(feld[pos].primkey, feld[pos+1].primkey))
</code></pre>
<p>bekomme ich eine Speicherzugriffverletzung</p>
<p>Was kann ich ändern damit es funktioniert?</p>
<p>Gruß, nihilfire</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/171000/bubblesort</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 07:28:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/171000.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 21 Jan 2007 17:51:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to bubblesort on Sun, 21 Jan 2007 17:51:06 GMT]]></title><description><![CDATA[<p>Hallo!<br />
Ich soll ein Char-Array mit Telefonbucheinträgen, mit Hilfe des Bubblesort-Algorithmus nach Namen sortieren. Die Klassenhierarchie und Methodennamen waren soweit vorgeben.</p>
<p>Mein Programm sieht so aus:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

class sortable
{
	public:
		char *primkey;

		sortable(){}

		sortable* sinkingSort(sortable *feld, int anz)
		{
			for(int obergrenze = anz-1; obergrenze &gt; 0; --obergrenze)
			{
				bool austausch = false;
				for(int pos = 0; pos &lt; obergrenze; ++pos)
				{
					if(strcmp(feld[pos].primkey, feld[pos+1].primkey))
					{
						char *tmp = feld[pos].primkey;
						feld[pos].primkey = feld[pos-1].primkey;
						feld [pos-1].primkey = tmp;
						austausch = true;
					}
				}
				if(!austausch)
				{
					break;
				}
			}
			return feld;
		}

		~sortable(){}
};

class Telefonbucheintrag : public sortable
{
	private:
		char *telefonnummer;
		char *vorname;
		char *name;

	public:
		Telefonbucheintrag(){}

		Telefonbucheintrag(char* telefonnummer, char* vorname, char* name)
		{
			this-&gt;telefonnummer = telefonnummer;
			this-&gt;vorname = vorname;
			this-&gt;name = name;
			primkey = name;
		}

		char *getTelefonnummer()
		{
			return telefonnummer;
		}

		char *getVorname()
		{
			return vorname;
		}

		char *getName()
		{
			return name;
		}

		~Telefonbucheintrag(){}
};

int main()
{
	Telefonbucheintrag* Telefonbuch[10];
	Telefonbuch[0] = new Telefonbucheintrag(&quot;94949&quot;,&quot;fritz&quot;,&quot;mueller&quot;);  
	Telefonbuch[1] = new Telefonbucheintrag(&quot;49649&quot;,&quot;karl&quot;,&quot;tell&quot;);
	Telefonbuch[2] = new Telefonbucheintrag(&quot;66161&quot;,&quot;heiz&quot;,&quot;tor&quot;);
	Telefonbuch[3] = new Telefonbucheintrag(&quot;94125&quot;,&quot;hilde&quot;,&quot;mett&quot;);
	Telefonbuch[4] = new Telefonbucheintrag(&quot;12144&quot;,&quot;helga&quot;,&quot;zabel&quot;);
	Telefonbuch[5] = new Telefonbucheintrag(&quot;32629&quot;,&quot;emma&quot;,&quot;tillmann&quot;);
	Telefonbuch[6] = new Telefonbucheintrag(&quot;46998&quot;,&quot;ursula&quot;,&quot;maier&quot;);
	Telefonbuch[7] = new Telefonbucheintrag(&quot;26598&quot;,&quot;ute&quot;,&quot;keller&quot;);
	Telefonbuch[8] = new Telefonbucheintrag(&quot;71561&quot;,&quot;maria&quot;,&quot;mustermann&quot;);
	Telefonbuch[9] = new Telefonbucheintrag(&quot;82321&quot;,&quot;herbert&quot;,&quot;schmitz&quot;);

	for(int i = 0; i &lt; 10; ++i)
	{
		cout &lt;&lt; Telefonbuch[i]-&gt;getTelefonnummer() &lt;&lt; ' ' 
			 &lt;&lt; Telefonbuch[i]-&gt;getVorname() &lt;&lt; ' ' 
			 &lt;&lt; Telefonbuch[i]-&gt;getName() &lt;&lt; endl;
	}

	Telefonbuch[0]-&gt;sinkingSort((sortable*)Telefonbuch, 10);

	for(int i = 0; i &lt; 10; ++i)
	{
		cout &lt;&lt; Telefonbuch[i]-&gt;getTelefonnummer() &lt;&lt; ' ' 
			 &lt;&lt; Telefonbuch[i]-&gt;getVorname() &lt;&lt; ' ' 
		 	 &lt;&lt; Telefonbuch[i]-&gt;getName() &lt;&lt; endl;
	}

	cin.get();

	return 0;
}
</code></pre>
<p>bei:</p>
<pre><code class="language-cpp">if(strcmp(feld[pos].primkey, feld[pos+1].primkey))
</code></pre>
<p>bekomme ich eine Speicherzugriffverletzung</p>
<p>Was kann ich ändern damit es funktioniert?</p>
<p>Gruß, nihilfire</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1213914</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1213914</guid><dc:creator><![CDATA[nihilfire]]></dc:creator><pubDate>Sun, 21 Jan 2007 17:51:06 GMT</pubDate></item><item><title><![CDATA[Reply to bubblesort on Sun, 21 Jan 2007 19:41:56 GMT]]></title><description><![CDATA[<p>Der Hase versteckt sich in der Zeile 17, wenn mich nicht alles täuscht, passiert folgendes:<br />
Wenn pos == ( obergrenze - 1 ) ist, dann kracht´s beim Zugriff auf das feld[pos+1] (in dieser if- Bedingung). Das Feld gibt es nämlich nicht, der Zugriff geht ins Leere.</p>
<p>Gruß<br />
Christian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1213967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1213967</guid><dc:creator><![CDATA[ChrisPHL]]></dc:creator><pubDate>Sun, 21 Jan 2007 19:41:56 GMT</pubDate></item><item><title><![CDATA[Reply to bubblesort on Sun, 21 Jan 2007 20:30:39 GMT]]></title><description><![CDATA[<p>hmmm... so:</p>
<pre><code class="language-cpp">if(strcmp(feld[pos].primkey, feld[pos-1].primkey))
</code></pre>
<p>geht es aber auch nicht</p>
<p>Komisch ist auch, dass der Debugger angibt anz(Zeile 13) hat den Wert: 4848328, statt der übergebenen 10 (Zeile 96)... ich kann aber nicht herausfinden woran es liegt.</p>
<p>Gruß, nihilfire</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1213987</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1213987</guid><dc:creator><![CDATA[nihilfire]]></dc:creator><pubDate>Sun, 21 Jan 2007 20:30:39 GMT</pubDate></item><item><title><![CDATA[Reply to bubblesort on Sun, 21 Jan 2007 22:45:24 GMT]]></title><description><![CDATA[<p>nihilfire schrieb:</p>
<blockquote>
<p>hmmm... so:</p>
<pre><code class="language-cpp">if(strcmp(feld[pos].primkey, feld[pos-1].primkey))
</code></pre>
<p>geht es aber auch nicht</p>
</blockquote>
<p>Natürlich nicht! Jetzt passiert der Fehlerhafte Zugriff immer noch, nur eben gleich beim ersten Durchlauf der for()- Schleife. (Zugriff auf das &quot;minus-erste-Element) Lass es einfach so wie vorher und reduziere die anzahl auf (obergrenze - 1) , dann macht es glaube ich Sinn.</p>
<p>Das andere Problem kann ich nicht angehen, da fehlt mir das Wissen... die Synthax ist mir unbekannt.</p>
<p>Gruß<br />
Christian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1214100</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214100</guid><dc:creator><![CDATA[ChrisPHL]]></dc:creator><pubDate>Sun, 21 Jan 2007 22:45:24 GMT</pubDate></item><item><title><![CDATA[Reply to bubblesort on Sun, 21 Jan 2007 23:38:10 GMT]]></title><description><![CDATA[<p>Es gibt so an die drei bis vier Fehler in der Methode sinkingSort. Hier die korrigierte Fassung</p>
<pre><code class="language-cpp">sortable** sinkingSort(sortable** feld, int anz) // Pointer-Pointer statt nur Pointer
        {
            for(int obergrenze = anz-1; obergrenze &gt; 0; --obergrenze)
            {
                bool austausch = false;
                for(int pos = 0; pos &lt; obergrenze; ++pos)
                {
                    if( strcmp(feld[pos]-&gt;primkey, feld[pos+1]-&gt;primkey) &gt; 0 ) // &gt; 0 vergessen
                    {
                        sortable* tmp = feld[pos]; // tausche sortable* und nicht nur primkey
                        feld[pos] = feld[pos+1];  // +1 statt -1
                        feld [pos+1] = tmp;
                        austausch = true;
                    }
                }
                if(!austausch)
                {
                    break;
                }
            }
            return feld;
        }
</code></pre>
<p>Und der Aufruf muss dann entsprechend</p>
<pre><code class="language-cpp">Telefonbuch[0]-&gt;sinkingSort( (sortable**)Telefonbuch , 10);
</code></pre>
<p>heißen.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1214129</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214129</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Sun, 21 Jan 2007 23:38:10 GMT</pubDate></item><item><title><![CDATA[Reply to bubblesort on Mon, 22 Jan 2007 06:32:58 GMT]]></title><description><![CDATA[<p>Hallo Werner!</p>
<p>Jetzt geht es, vielen Dank für deine Hilfe! <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>
<p>Gruß, nihilfire</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1214174</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214174</guid><dc:creator><![CDATA[nihilfire]]></dc:creator><pubDate>Mon, 22 Jan 2007 06:32:58 GMT</pubDate></item></channel></rss>