<?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[Wie 3 Werte an eine Funktion zurückgeben?]]></title><description><![CDATA[<p>Hallo liebe Forummitglieder,</p>
<p>wir sollen für die Vorlesung Algorithmen &amp; Datenstrukturen das &quot;Sieb des Eratosthenes&quot; in C++ implementieren. Folgende Bedingungen sind Voraussetzung:</p>
<p>*die Anzahl der Primzahlen und der Streichungen müssen ausgegeben werden<br />
*Bibliotheksfunktionen dürfen nicht benutzt werden (auch cout nicht!!)</p>
<p>Ich habe den Code soweit fertig. Mit cout (als Test) gibt das Programm alles prima aus. Wie kann ich aber die Werte von i (will ich aus persönlichem Interesse ausgeben), cnt_primanz und cnt_gestrichen<br />
an die Funktion sieb() zurückgeben? Kann mir jemand von euch helfen?</p>
<p>Hier der Code:</p>
<pre><code>unsigned int sieb(unsigned int n);

unsigned int sieb(unsigned int n) {

  bool zahl[n];

  unsigned int cnt_gestrichen = 0;
  unsigned int cnt_primanz = 0;

  for (unsigned int i = 2; i &lt; n; ++i) {

    if (!zahl[i]) {

       return i;
       cnt_primanz++;

      //Alle Nicht-Primzahlen werden gestrichen
      for (unsigned int j = i*i; j &lt; n; j +=i) {

        zahl[j] = true;
        cnt_gestrichen++;
      }
    }

  }

  return 0;

}

int main(void) {

    const unsigned int n = 8;

    sieb(n);

    return 0;
}
</code></pre>
<p>Bisher gibt er mit der return-Variante nichts aus.</p>
<p>Grüße<br />
kakashi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/302921/wie-3-werte-an-eine-funktion-zurückgeben</link><generator>RSS for Node</generator><lastBuildDate>Mon, 10 Aug 2026 22:04:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/302921.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 01 May 2012 05:38:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wie 3 Werte an eine Funktion zurückgeben? on Tue, 01 May 2012 05:38:03 GMT]]></title><description><![CDATA[<p>Hallo liebe Forummitglieder,</p>
<p>wir sollen für die Vorlesung Algorithmen &amp; Datenstrukturen das &quot;Sieb des Eratosthenes&quot; in C++ implementieren. Folgende Bedingungen sind Voraussetzung:</p>
<p>*die Anzahl der Primzahlen und der Streichungen müssen ausgegeben werden<br />
*Bibliotheksfunktionen dürfen nicht benutzt werden (auch cout nicht!!)</p>
<p>Ich habe den Code soweit fertig. Mit cout (als Test) gibt das Programm alles prima aus. Wie kann ich aber die Werte von i (will ich aus persönlichem Interesse ausgeben), cnt_primanz und cnt_gestrichen<br />
an die Funktion sieb() zurückgeben? Kann mir jemand von euch helfen?</p>
<p>Hier der Code:</p>
<pre><code>unsigned int sieb(unsigned int n);

unsigned int sieb(unsigned int n) {

  bool zahl[n];

  unsigned int cnt_gestrichen = 0;
  unsigned int cnt_primanz = 0;

  for (unsigned int i = 2; i &lt; n; ++i) {

    if (!zahl[i]) {

       return i;
       cnt_primanz++;

      //Alle Nicht-Primzahlen werden gestrichen
      for (unsigned int j = i*i; j &lt; n; j +=i) {

        zahl[j] = true;
        cnt_gestrichen++;
      }
    }

  }

  return 0;

}

int main(void) {

    const unsigned int n = 8;

    sieb(n);

    return 0;
}
</code></pre>
<p>Bisher gibt er mit der return-Variante nichts aus.</p>
<p>Grüße<br />
kakashi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2207092</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2207092</guid><dc:creator><![CDATA[kakashi83]]></dc:creator><pubDate>Tue, 01 May 2012 05:38:03 GMT</pubDate></item><item><title><![CDATA[Reply to Wie 3 Werte an eine Funktion zurückgeben? on Tue, 01 May 2012 06:16:00 GMT]]></title><description><![CDATA[<p>Naja, vielleicht kommst du auf die geniale Idee, eine Struktur (oder Klasse mit entsprechenden Methoden) a la</p>
<pre><code class="language-cpp">struct meins
{
    unsigned erste, zweite, dritteVariable;
};

meins func()
{
    return {1, 2, 3};
}
</code></pre>
<p>zu machen.. <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/2207095</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2207095</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 01 May 2012 06:16:00 GMT</pubDate></item><item><title><![CDATA[Reply to Wie 3 Werte an eine Funktion zurückgeben? on Tue, 01 May 2012 07:06:58 GMT]]></title><description><![CDATA[<p>Hacker schrieb:</p>
<blockquote>
<p>Naja, vielleicht kommst du auf die geniale Idee, eine Struktur (oder Klasse mit entsprechenden Methoden) a la</p>
<pre><code class="language-cpp">struct meins
{
    unsigned erste, zweite, dritteVariable;
};

meins func()
{
    return {1, 2, 3};
}
</code></pre>
<p>zu machen.. <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><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /> Aus seinem Beitrag geht doch eigentlich hervor, dass er gerade erst anfängt, C++ zu lernen. Darum:</p>
<p>1. Ich glaube nicht, dass er sich bis jetzt schon mit Klassen befasst hat.<br />
2. Dein C++11 Beispiel bringt ihm wahrscheinlich gar nichts, da er es wohl nicht kompilieren kann und überhaupt nicht weiß wieso.<br />
3. Es scheint wohl so, als ob er sich gerade mit Grundlagen wie Schleifen und Funktionen auseinandersetzt, darum wäre der logische Lösungsansatz wohl Referenzen.</p>
<p>Hallo kakashi83,<br />
du suchst also praktisch das hier:</p>
<pre><code class="language-cpp">// Lass den Prototypen weg, er ist total unnötig.

// Mittels Referenzen kannst du eine beliebige Anzahl von &quot;Rückgabeparametern&quot; (sogenannte out parameter) haben.

void sieb(unsigned n, unsigned* primzahlen, unsigned&amp; cnt_gestrichen, unsigned&amp; cnt_primanz) 
{
	bool* zahl = new bool[n]; // Die Größe eines Arrays muss immer zur Compiletime feststehen. Hier steht n aber erst zur Laufzeit fest, darum geht es nicht. Darum: Speicher dynamisch anfordern.
                              // (Falls es bei dir docht geht, solltest du deinen Compiler wechseln)

	for(unsigned i=2; i&lt;n; ++i)
		zahl[i] = false;

	for(unsigned i=2, index=0; i&lt;n; ++i)
	{
		if( zahl[i]==false )
		{
			primzahlen[index++] = i;
			++cnt_primanz;

			for(unsigned j=i*i; j&lt;n; j+=i)
			{
				zahl[j] = true;
       			++cnt_gestrichen;
			}
		}
	}
	delete[] zahl; // Du hast Speicher dynamisch angefordert, also musst du ihn auch selbst wieder freigeben.
}

int main()
{
	const unsigned n        = 8; // Das int kannst du weglassen, da nur unsigned die Kurzschreibwesie für unsigned int ist.
	unsigned primzahlen[n]  = {};// ok, da n const ist.
	unsigned cnt_gestrichen = 0;
    unsigned cnt_primanz    = 0;

    sieb(n,primzahlen,cnt_gestrichen,cnt_primanz);

    cout &lt;&lt; &quot;n              = &quot; &lt;&lt; n &lt;&lt; '\n';
    cout &lt;&lt; &quot;cnt_gestrichen = &quot; &lt;&lt; cnt_gestrichen &lt;&lt; '\n';
    cout &lt;&lt; &quot;cnt_primanz    = &quot; &lt;&lt; cnt_primanz &lt;&lt; '\n';
    cout &lt;&lt; &quot;primzahlen     = &quot;;
    for(unsigned i=0; i&lt;cnt_primanz; ++i)
    {
		cout &lt;&lt; primzahlen[i] &lt;&lt; &quot;, &quot;;  // Also cout brauchst du schon, wie willst du sonst bitte eine Ausgabe machen?
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2207096</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2207096</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 01 May 2012 07:06:58 GMT</pubDate></item><item><title><![CDATA[Reply to Wie 3 Werte an eine Funktion zurückgeben? on Tue, 01 May 2012 08:09:52 GMT]]></title><description><![CDATA[<p>Mich würde allerdings auch mal interessieren, wie du es ausgeben sollst, wenn du keine bibliotheksfunktionen nutzen darfst, auch cout nicht.</p>
<p>ohne cout bleibt ja nur noch printf - wäre zwar dämlich, aber scheint ja an manchen unis keine rolle zu spielen... dummerweise ist es aber erst recht ne bibliotheksfunktion.<br />
frag mal bitte deinen lehrer/prof/übungsleiter und schreib mal, was er antwortet.<br />
deine frage an sich sollte ja von gugelmoser ausreichend beantwortet sein?!</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2207107</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2207107</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Tue, 01 May 2012 08:09:52 GMT</pubDate></item><item><title><![CDATA[Reply to Wie 3 Werte an eine Funktion zurückgeben? on Tue, 01 May 2012 08:54:10 GMT]]></title><description><![CDATA[<p>Wieso benutzt du C-Arrays für dynamische Speicheranforderung? Wär doch viel einfacher mit z.B. einem vector o.ä.?</p>
<pre><code class="language-cpp">unsigned primzahlen[n]  = {};// ok, da n const ist.
</code></pre>
<p>Und nein, nicht OK wenn <code>n</code>  <code>const</code> ist, es müsste schon <code>constexpr</code> sein... seit C99 ist das aber sowieso im Standard (das es auch mit normalen Variablen geht, siehe <a href="http://ideone.com/GYr2k" rel="nofollow">hier</a>).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2207112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2207112</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 01 May 2012 08:54:10 GMT</pubDate></item><item><title><![CDATA[Reply to Wie 3 Werte an eine Funktion zurückgeben? on Tue, 01 May 2012 09:42:49 GMT]]></title><description><![CDATA[<p>Hacker schrieb:</p>
<blockquote>
<p>seit C99 ist das aber sowieso im Standard</p>
</blockquote>
<p>Wir programmieren hier aber C++, wo VLAs nach wie vor verboten sind.</p>
<p>Der Code beweist gar nichts, es handelt sich um eine g++-spezifische Compilererweiterung und nicht um Standard-C++.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2207129</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2207129</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 01 May 2012 09:42:49 GMT</pubDate></item><item><title><![CDATA[Reply to Wie 3 Werte an eine Funktion zurückgeben? on Tue, 01 May 2012 10:03:36 GMT]]></title><description><![CDATA[<p>Liebe Forummitglieder,</p>
<p>ich habe meinem Dozenten nochmal eine Email zu diesem Problem geschrieben. Mal sehen, was er dazu schreibt.</p>
<p>Ich danke euch für eure Beiträge und werde meinen Code nochmal überarbeiten. Mit cout wäre das Ganze kein Problem, ohne ist es jedoch sehr umständlich.</p>
<p>Grüße<br />
Kakashi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2207138</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2207138</guid><dc:creator><![CDATA[kakashi83]]></dc:creator><pubDate>Tue, 01 May 2012 10:03:36 GMT</pubDate></item><item><title><![CDATA[Reply to Wie 3 Werte an eine Funktion zurückgeben? on Tue, 01 May 2012 10:37:06 GMT]]></title><description><![CDATA[<p>Hacker schrieb:</p>
<blockquote>
<p>Wieso benutzt du C-Arrays für dynamische Speicheranforderung? Wär doch viel einfacher mit z.B. einem vector o.ä.?</p>
</blockquote>
<p>kakashi83 schrieb:</p>
<blockquote>
<p>*Bibliotheksfunktionen dürfen nicht benutzt werden</p>
</blockquote>
<p>Hacker schrieb:</p>
<blockquote>
<p>Und nein, nicht OK wenn <code>n</code>  <code>const</code> ist, es müsste schon <code>constexpr</code> sein.</p>
</blockquote>
<p>Doch, das ist genau richitg so. Die Größe eines Arrays muss ein konstanter Ausdruck sein und das ist <code>n</code> , da es const-spezifiziert ist und mit einem konstanten Ausdruck initialisiert wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2207155</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2207155</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 01 May 2012 10:37:06 GMT</pubDate></item><item><title><![CDATA[Reply to Wie 3 Werte an eine Funktion zurückgeben? on Tue, 01 May 2012 11:11:58 GMT]]></title><description><![CDATA[<p>Gugelmoser schrieb:</p>
<blockquote>
<p>Doch, das ist genau richitg so. Die Größe eines Arrays muss ein konstanter Ausdruck sein und das ist <code>n</code> , da es const-spezifiziert ist und mit einem konstanten Ausdruck initialisiert wurde.</p>
</blockquote>
<p>const hat mit konstanten Ausdrücken erstmal nichts zu tun. Nicht alles, was const ist, ist auch ein konstanter Ausdruck.</p>
<pre><code class="language-cpp">int i = 42;
int const j = i; // const, aber kein konstanter Ausdruck
</code></pre>
<p>Da im oben gegebenen Beispiel n ein konstanter Ausdruck ist, funktioniert es.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2207171</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2207171</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Tue, 01 May 2012 11:11:58 GMT</pubDate></item><item><title><![CDATA[Reply to Wie 3 Werte an eine Funktion zurückgeben? on Tue, 01 May 2012 11:35:25 GMT]]></title><description><![CDATA[<p>Gugelmoser schrieb:</p>
<blockquote>
<p>da es const-spezifiziert ist und mit einem konstanten Ausdruck initialisiert wurde.</p>
</blockquote>
<p>Bei <code>constexpr</code> ist immer garantiert, dass ihm ein konstanter Ausdruck zugewiesen wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2207175</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2207175</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 01 May 2012 11:35:25 GMT</pubDate></item><item><title><![CDATA[Reply to Wie 3 Werte an eine Funktion zurückgeben? on Tue, 01 May 2012 12:11:34 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Gugelmoser schrieb:</p>
<blockquote>
<p>Doch, das ist genau richitg so. Die Größe eines Arrays muss ein konstanter Ausdruck sein und das ist <code>n</code> , da es const-spezifiziert ist und mit einem konstanten Ausdruck initialisiert wurde.</p>
</blockquote>
<p>const hat mit konstanten Ausdrücken erstmal nichts zu tun. Nicht alles, was const ist, ist auch ein konstanter Ausdruck.</p>
</blockquote>
<p>Habe ich auch nicht behauptet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2207192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2207192</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 01 May 2012 12:11:34 GMT</pubDate></item><item><title><![CDATA[Reply to Wie 3 Werte an eine Funktion zurückgeben? on Tue, 01 May 2012 12:42:34 GMT]]></title><description><![CDATA[<p>Gugelmoser schrieb:</p>
<blockquote>
<p>, da es const-spezifiziert ist</p>
</blockquote>
<p>Nein, hast du natürlich nicht. Es heißt übrigens qualifiziert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2207209</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2207209</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Tue, 01 May 2012 12:42:34 GMT</pubDate></item><item><title><![CDATA[Reply to Wie 3 Werte an eine Funktion zurückgeben? on Wed, 02 May 2012 08:13:18 GMT]]></title><description><![CDATA[<p>Tja, ohne Bibliotheksfunktion läuft es wohl auf WriteConsole auf Windows bzw auf write bei dem Rest der Welt heraus. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2207434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2207434</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Wed, 02 May 2012 08:13:18 GMT</pubDate></item><item><title><![CDATA[Reply to Wie 3 Werte an eine Funktion zurückgeben? on Thu, 03 May 2012 13:43:26 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>mein Dozent sagte, es gänge mit Referenzparametern. Trotzdem bin ich mir noch nicht ganz im Klaren. Ich werde es aber einmal probieren.</p>
<p>Grüße<br />
Kakashi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2207935</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2207935</guid><dc:creator><![CDATA[kakashi83]]></dc:creator><pubDate>Thu, 03 May 2012 13:43:26 GMT</pubDate></item><item><title><![CDATA[Reply to Wie 3 Werte an eine Funktion zurückgeben? on Thu, 03 May 2012 21:48:41 GMT]]></title><description><![CDATA[<p>das haben wir dir doch auch gesagt.</p>
<p>die frage war, wie die ausgabe ohne cout und bibliotheksfunktionen erfolgen sollte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2208093</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2208093</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Thu, 03 May 2012 21:48:41 GMT</pubDate></item><item><title><![CDATA[Reply to Wie 3 Werte an eine Funktion zurückgeben? on Fri, 04 May 2012 06:45:18 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>die frage war, wie die ausgabe ohne cout und bibliotheksfunktionen erfolgen sollte.</p>
</blockquote>
<p>Das ist keine Frage. Ohne Bibliotheksfunktionen könntest du dir allerhöchstens selber ein <code>ostream</code> -Objekt basteln und das an den Ausgabestream koppeln (der wiederum auch eine Bibliotheksfunktion ist); das ist allerdings völlig unmöglich für einen Anfänger zu schaffen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2208114</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2208114</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 04 May 2012 06:45:18 GMT</pubDate></item><item><title><![CDATA[Reply to Wie 3 Werte an eine Funktion zurückgeben? on Fri, 04 May 2012 23:25:53 GMT]]></title><description><![CDATA[<p>dummerweise mal wieder komplett fail deine antowrt: man braucht kein ostream-objekt zu basteln, da man die stream-eigenschaften nicht zwangsläufig braucht. aber ansonsten hast du den widerspruch super bemerkt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2208415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2208415</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Fri, 04 May 2012 23:25:53 GMT</pubDate></item><item><title><![CDATA[Reply to Wie 3 Werte an eine Funktion zurückgeben? on Fri, 04 May 2012 23:57:17 GMT]]></title><description><![CDATA[<p>Mit der Einschränkung wird nur gemeint sein, dass der Kram nicht innerhalb der Funktion sieb ausgegeben werden soll, sondern in main. Der Zweck der Übung scheint ja zu sein, call-by-reference zu lernen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2208416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2208416</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Fri, 04 May 2012 23:57:17 GMT</pubDate></item></channel></rss>