<?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[Spieltaggenerierung für Liga]]></title><description><![CDATA[<p>Moinmoin,</p>
<p>ich versuche gerade mal dem Rat meines Arbeitskollegen zu folgen und einfach mal ein paar kleine Programme zu schreiben um mal meine C++ Basiskenntnisse zu festigen und dann vielleicht mal auszubauen. Da wir gerade eine kleine Spielliga machen wollen und ich mich schon 2x mit der manuellen Gestalltung rumgeärgert habe dachte ich mir, schreibste kurz mal ein Programm. Jetzt hab ich da irgendwo aber nen Bug drin und ich seh ihn einfach nicht...</p>
<p>Das Programm wird in der Konsole beendet mit:<br />
&quot;terminate called after throwing an instance of &quot;std::out_of_range&quot;<br />
what (): vector::_M_range_check&quot;</p>
<p>Ich vermute also mal ich versuche irgendwo auf Vektorelemente zuzugreifen die nicht da sind(?)</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;

int main()
{
	std::vector &lt;std::string&gt; Teilnehmer;
/****************************************************************/
/* Das Programm generiert eine Spielplan analog zur Bundesliga.	*/
/* Bei einer ungeraden Spielerzahl muss bei &quot;Joker&quot; das Freilos	*/
/* eingetragen werden, bei einer geraden Spielerzahl muss hier	*/
/* ein regulärer Spieler eingetragen werden.					*/
/****************************************************************/

	std::string Joker = &quot;Freilos&quot;;

/****************************************************************/
/* Ligateilnehmer eingeben										*/
/****************************************************************/

	Teilnehmer.push_back (&quot;Spieler1&quot;);
	Teilnehmer.push_back (&quot;Spieler2&quot;);
	Teilnehmer.push_back (&quot;Spieler3&quot;);
	Teilnehmer.push_back (&quot;Spieler4&quot;);
	Teilnehmer.push_back (&quot;Spieler5&quot;);

/****************************************************************/
/* Jetzt kompilieren, ausführen und glücklich sein				*/
/****************************************************************/

	int Teilnehmerzahl = Teilnehmer.size() +1;

	std::ofstream Ligaspielplan;
	Ligaspielplan.imbue(std::locale(&quot;&quot;));
	Ligaspielplan.open(&quot;Ligaspielplan.txt&quot;);
	if (Ligaspielplan.is_open())
	{
	for (int Spieltag=1; Spieltag&lt;=Teilnehmerzahl; ++Spieltag)
	{
		std::vector&lt;int&gt; gepaarteSpieler;
		Ligaspielplan &lt;&lt;&quot;Spieltag &quot; &lt;&lt;Spieltag&lt;&lt;&quot;\n\n&quot;;
		for (int j=1;j&lt;=Teilnehmerzahl; ++j)
		{
			//soll verhindern, dass die Spiele doppelt generiert werden
			bool check=0;
			for (int x=0; x&lt;gepaarteSpieler.size();++x)
			{
				if(gepaarteSpieler.at(x)==j)check=1;
			}
			if(check==0)
			{
				//sucht den passenden Gegenspieler für den entsprechenden Spieltag
				for (int i=1; i&lt;=Teilnehmerzahl; ++i)
				{	
					if(((i+j)%Teilnehmer.size())==Spieltag)
					{
						Ligaspielplan &lt;&lt; Teilnehmer.at(j-1) &lt;&lt;&quot; - &quot; &lt;&lt; Teilnehmer.at(i-1)&lt;&lt;&quot;\n&quot;;
						gepaarteSpieler.push_back(i);
						gepaarteSpieler.push_back(j);
						check=1;
						break;
					}
				}
				//wenn kein Gegenspieler gefunden wurde, wird der Joker gesetzt
				if(check==0) Ligaspielplan &lt;&lt; Teilnehmer.at(j-1) &lt;&lt;&quot; - &quot; &lt;&lt; Joker &lt;&lt;&quot;\n&quot;;
			}
		}
		Ligaspielplan &lt;&lt;&quot;\n\n\n&quot;;
	}
}
return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/318880/spieltaggenerierung-für-liga</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Jul 2026 19:54:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/318880.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 29 Jul 2013 19:59:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Spieltaggenerierung für Liga on Mon, 29 Jul 2013 20:03:04 GMT]]></title><description><![CDATA[<p>Moinmoin,</p>
<p>ich versuche gerade mal dem Rat meines Arbeitskollegen zu folgen und einfach mal ein paar kleine Programme zu schreiben um mal meine C++ Basiskenntnisse zu festigen und dann vielleicht mal auszubauen. Da wir gerade eine kleine Spielliga machen wollen und ich mich schon 2x mit der manuellen Gestalltung rumgeärgert habe dachte ich mir, schreibste kurz mal ein Programm. Jetzt hab ich da irgendwo aber nen Bug drin und ich seh ihn einfach nicht...</p>
<p>Das Programm wird in der Konsole beendet mit:<br />
&quot;terminate called after throwing an instance of &quot;std::out_of_range&quot;<br />
what (): vector::_M_range_check&quot;</p>
<p>Ich vermute also mal ich versuche irgendwo auf Vektorelemente zuzugreifen die nicht da sind(?)</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;

int main()
{
	std::vector &lt;std::string&gt; Teilnehmer;
/****************************************************************/
/* Das Programm generiert eine Spielplan analog zur Bundesliga.	*/
/* Bei einer ungeraden Spielerzahl muss bei &quot;Joker&quot; das Freilos	*/
/* eingetragen werden, bei einer geraden Spielerzahl muss hier	*/
/* ein regulärer Spieler eingetragen werden.					*/
/****************************************************************/

	std::string Joker = &quot;Freilos&quot;;

/****************************************************************/
/* Ligateilnehmer eingeben										*/
/****************************************************************/

	Teilnehmer.push_back (&quot;Spieler1&quot;);
	Teilnehmer.push_back (&quot;Spieler2&quot;);
	Teilnehmer.push_back (&quot;Spieler3&quot;);
	Teilnehmer.push_back (&quot;Spieler4&quot;);
	Teilnehmer.push_back (&quot;Spieler5&quot;);

/****************************************************************/
/* Jetzt kompilieren, ausführen und glücklich sein				*/
/****************************************************************/

	int Teilnehmerzahl = Teilnehmer.size() +1;

	std::ofstream Ligaspielplan;
	Ligaspielplan.imbue(std::locale(&quot;&quot;));
	Ligaspielplan.open(&quot;Ligaspielplan.txt&quot;);
	if (Ligaspielplan.is_open())
	{
	for (int Spieltag=1; Spieltag&lt;=Teilnehmerzahl; ++Spieltag)
	{
		std::vector&lt;int&gt; gepaarteSpieler;
		Ligaspielplan &lt;&lt;&quot;Spieltag &quot; &lt;&lt;Spieltag&lt;&lt;&quot;\n\n&quot;;
		for (int j=1;j&lt;=Teilnehmerzahl; ++j)
		{
			//soll verhindern, dass die Spiele doppelt generiert werden
			bool check=0;
			for (int x=0; x&lt;gepaarteSpieler.size();++x)
			{
				if(gepaarteSpieler.at(x)==j)check=1;
			}
			if(check==0)
			{
				//sucht den passenden Gegenspieler für den entsprechenden Spieltag
				for (int i=1; i&lt;=Teilnehmerzahl; ++i)
				{	
					if(((i+j)%Teilnehmer.size())==Spieltag)
					{
						Ligaspielplan &lt;&lt; Teilnehmer.at(j-1) &lt;&lt;&quot; - &quot; &lt;&lt; Teilnehmer.at(i-1)&lt;&lt;&quot;\n&quot;;
						gepaarteSpieler.push_back(i);
						gepaarteSpieler.push_back(j);
						check=1;
						break;
					}
				}
				//wenn kein Gegenspieler gefunden wurde, wird der Joker gesetzt
				if(check==0) Ligaspielplan &lt;&lt; Teilnehmer.at(j-1) &lt;&lt;&quot; - &quot; &lt;&lt; Joker &lt;&lt;&quot;\n&quot;;
			}
		}
		Ligaspielplan &lt;&lt;&quot;\n\n\n&quot;;
	}
}
return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2342107</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342107</guid><dc:creator><![CDATA[Ynnead]]></dc:creator><pubDate>Mon, 29 Jul 2013 20:03:04 GMT</pubDate></item><item><title><![CDATA[Reply to Spieltaggenerierung für Liga on Mon, 29 Jul 2013 20:11:19 GMT]]></title><description><![CDATA[<p>Als Sofortdiagnose sieht es mir so aus, als ob deine Schleife eins zu weit laufen würde. Was sagt denn der Debugger?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342109</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342109</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Mon, 29 Jul 2013 20:11:19 GMT</pubDate></item><item><title><![CDATA[Reply to Spieltaggenerierung für Liga on Mon, 29 Jul 2013 20:14:17 GMT]]></title><description><![CDATA[<p>Beim zweiten Blick wird es offensichtlich: Die Indizes eines std::vector gehen von 0 bis size()-1. Bei dir laufen sie von 1 bis size().</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342110</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342110</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Mon, 29 Jul 2013 20:14:17 GMT</pubDate></item><item><title><![CDATA[Reply to Spieltaggenerierung für Liga on Mon, 29 Jul 2013 20:34:03 GMT]]></title><description><![CDATA[<p>Kopf-&gt;Tisch</p>
<p>danke... aber jetzt hab ich irgendwie das Problem das da irgendwas grundlegend wohl nicht stimmt, am letzten Spieltag generiert er mir keine Paarung mehr...</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;

int main()
{
	std::vector &lt;std::string&gt; Teilnehmer;
/****************************************************************/
/* Das Programm generiert eine Spielplan analog zur Bundesliga.	*/
/* Bei einer ungeraden Spielerzahl muss bei &quot;Joker&quot; das Freilos	*/
/* eingetragen werden, bei einer geraden Spielerzahl muss hier	*/
/* ein regulärer Spieler eingetragen werden.					*/
/****************************************************************/

	std::string Joker = &quot;Freilos&quot;;

/****************************************************************/
/* Ligateilnehmer eingeben										*/
/****************************************************************/

	Teilnehmer.push_back (&quot;1&quot;);
	Teilnehmer.push_back (&quot;2&quot;);
	Teilnehmer.push_back (&quot;3&quot;);

/****************************************************************/
/* Jetzt kompilieren, ausführen und glücklich sein				*/
/****************************************************************/

	int Teilnehmerzahl = Teilnehmer.size() +1;

	std::ofstream Ligaspielplan;
	Ligaspielplan.imbue(std::locale(&quot;&quot;));
	Ligaspielplan.open(&quot;Ligaspielplan.txt&quot;);

	for (int Spieltag=1; Spieltag&lt;Teilnehmerzahl; ++Spieltag)
	{
		std::vector&lt;int&gt; gepaarteSpieler;
		Ligaspielplan &lt;&lt;&quot;Spieltag &quot; &lt;&lt;Spieltag&lt;&lt;&quot;\n\n&quot;;
		for (int j=1;j&lt;Teilnehmerzahl; ++j)
		{
			//soll verhindern, dass die Spiele doppelt generiert werden
			bool check=0;
			for (int x=0; x&lt;gepaarteSpieler.size();++x)
			{
				if(gepaarteSpieler.at(x)==j)check=1;
			}
			if(check==0)
			{
				//sucht den passenden Gegenspieler für den entsprechenden Spieltag
				for (int i=1; i&lt;Teilnehmerzahl; ++i)
				{	
					if(((i+j)%Teilnehmer.size())==Spieltag)
					{
						gepaarteSpieler.push_back(j);
						if(i==j) Ligaspielplan &lt;&lt; Teilnehmer.at(j-1) &lt;&lt;&quot; - &quot; &lt;&lt; Joker &lt;&lt;&quot;\n&quot;;
						else
						{
							Ligaspielplan &lt;&lt; Teilnehmer.at(j-1) &lt;&lt;&quot; - &quot; &lt;&lt; Teilnehmer.at(i-1)&lt;&lt;&quot;\n&quot;;
							gepaarteSpieler.push_back(i);
						}

					}

				}
				//wenn kein Gegenspieler gefunden wurde, wird der Joker gesetzt

			}
		}
		Ligaspielplan &lt;&lt;&quot;\n\n\n&quot;;
	}		
}
</code></pre>
<blockquote>
<p>Spieltag 1</p>
<p>1 - 3<br />
2 - Freilos</p>
<p>Spieltag 2</p>
<p>1 - Freilos<br />
2 - 3</p>
<p>Spieltag 3</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2342111</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342111</guid><dc:creator><![CDATA[Ynnead]]></dc:creator><pubDate>Mon, 29 Jul 2013 20:34:03 GMT</pubDate></item><item><title><![CDATA[Reply to Spieltaggenerierung für Liga on Tue, 30 Jul 2013 00:12:40 GMT]]></title><description><![CDATA[<p>Ohne deinen Code jetzt wirklich nachvollziehen zu wollen, kann ich dir verraten, dass die Spielplangenerierung nicht ganz so trivial ist, wie man auf den ersten Blick meinen würde. Eine sehr anschaulich beschriebene Lösung des Problems findest du <a href="http://www-i1.informatik.rwth-aachen.de/~algorithmus/algo36.php" rel="nofollow">hier</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342150</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342150</guid><dc:creator><![CDATA[ananas]]></dc:creator><pubDate>Tue, 30 Jul 2013 00:12:40 GMT</pubDate></item><item><title><![CDATA[Reply to Spieltaggenerierung für Liga on Tue, 30 Jul 2013 06:55:16 GMT]]></title><description><![CDATA[<p>Deine Schleifen sehen auch komisch aus:<br />
Du beginnst jeweils bei 1 mit dem Zählen und gehst solange kleiner n. Und da die Indizes auch um 1 verringerst, lässt du irgendwo ein Element aus (am Ende).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342158</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342158</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 30 Jul 2013 06:55:16 GMT</pubDate></item><item><title><![CDATA[Reply to Spieltaggenerierung für Liga on Tue, 30 Jul 2013 07:47:14 GMT]]></title><description><![CDATA[<p>Moin ananas,</p>
<p>jupp, das habe ich auch schon festgestellt, dass der Algorithmus komplizierter ist <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>Also mal um das Vorgehen zu erklären:</p>
<p>Ich habe x Teilnehmer (sagen wir hier 4) (gerade Zahl, im Zweifel durch ein Freilos hergestellt).</p>
<p>3 der Teilnehmer werden in einem Vektor gespeichert (und damit eine Zahl von 1-3 zugewiesen, deswegen laufen meine Schleifen bei 1 los), der 4 wird der Joker.</p>
<p>An einem Spieltag spielen jetzt Teilnehmer i und j gegeneinander, so dass der modulo durch 3 (Gesamtzahl der Leute im Vektor) dem aktuellen Spieltag entspricht (und hier fällt mir auf könnte auch schon der fehler am letzten Spieltag liegen... hier müsste ein Spezialfall für modulo = 0 hergestellt werden, oder?). Dadurch findet genau einer der Teilnehmer im Vektor keinen Spielpartner, der spielt dann gegen den Joker.</p>
<p>Dazu speicher ich noch alle gepaarten Spieler an einem Spieltag in dem Vektor &quot;gepaarteSpieler&quot; weil ansonsten ja jede Paarung 2x auftreten würde (außer die gegen den Joker).</p>
<blockquote>
<p>Du beginnst jeweils bei 1 mit dem Zählen und gehst solange kleiner n. Und da die Indizes auch um 1 verringerst, lässt du irgendwo ein Element aus (am Ende).</p>
</blockquote>
<p>Jupp, allerdings ist die Teilnehmerzahl um eins größer als die Anzahl der Einträge im Vektor. Ich weiß, das ist etwas... Gehirnarbeit...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342166</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342166</guid><dc:creator><![CDATA[Ynnead]]></dc:creator><pubDate>Tue, 30 Jul 2013 07:47:14 GMT</pubDate></item><item><title><![CDATA[Reply to Spieltaggenerierung für Liga on Tue, 30 Jul 2013 08:01:35 GMT]]></title><description><![CDATA[<p>Ja ist es etwas, aber ich hab mich auch nicht in dein Programm reingedacht und kann so zu nicht-offensichtlichen Fehlern nichts sagen.</p>
<p>Ich weiss nur noch damals aus der Schule, dass dieses Problem nicht ganz trivial sit wie es zu sein scheint. (War da nicht ne Komplexität von O(n!) oder sowas? kA mehr)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2342172</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342172</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 30 Jul 2013 08:01:35 GMT</pubDate></item><item><title><![CDATA[Reply to Spieltaggenerierung für Liga on Tue, 30 Jul 2013 08:11:37 GMT]]></title><description><![CDATA[<p>So, das mit dem Modulo war genau der Fehler, am letzten Spieltag muss der Modulo gleich 0 sein. Programm funktioniert, danke für die Hilfe und die Denkanstöße <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="🙂"
    /> Anbei nochmal das laufende Programm, ich wollte jetzt auch nochmal mit GUI´s experimentieren, vermutlich werde ich es dann auch damit mal aufhübschen <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>#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;

int main()
{
	std::vector &lt;std::string&gt; Teilnehmer;
/****************************************************************/
/* Das Programm generiert eine Spielplan analog zur Bundesliga.	*/
/* Bei einer ungeraden Spielerzahl muss bei &quot;Joker&quot; das Freilos	*/
/* eingetragen werden, bei einer geraden Spielerzahl muss hier	*/
/* ein regulärer Spieler eingetragen werden.					*/
/****************************************************************/

	std::string Joker = &quot;Freilos&quot;;

/****************************************************************/
/* Ligateilnehmer eingeben										*/
/****************************************************************/

	Teilnehmer.push_back (&quot;1&quot;);
	Teilnehmer.push_back (&quot;2&quot;);
	Teilnehmer.push_back (&quot;3&quot;);

/****************************************************************/
/* Jetzt kompilieren, ausführen und glücklich sein				*/
/****************************************************************/

    int Teilnehmerzahl = Teilnehmer.size() +1;

    std::ofstream Ligaspielplan;
    Ligaspielplan.imbue(std::locale(&quot;&quot;));
    Ligaspielplan.open(&quot;Ligaspielplan.txt&quot;);
    bool check;
    int Modulo;

    for (int Spieltag=1; Spieltag&lt;Teilnehmerzahl; ++Spieltag)
    {
        std::vector&lt;int&gt; gepaarteSpieler;
        Ligaspielplan &lt;&lt;&quot;Spieltag &quot; &lt;&lt;Spieltag&lt;&lt;&quot;\n\n&quot;;
        for (int j=1;j&lt;Teilnehmerzahl; ++j)
        {
            //soll verhindern, dass die Spiele doppelt generiert werden
            bool check=0;
            for (int x=0; x&lt;gepaarteSpieler.size();++x)
            {
                if(gepaarteSpieler.at(x)==j)check=1;
            }
            if(check==0)
            {
                //sucht den passenden Gegenspieler für den entsprechenden Spieltag
                for (int i=1; i&lt;Teilnehmerzahl; ++i)
                {  
                	Modulo=Spieltag;
                	if(Modulo==Teilnehmer.size())Modulo=0;
                    if(((i+j)%Teilnehmer.size())==Modulo)
                    {
                        gepaarteSpieler.push_back(j);
                        if(i==j) Ligaspielplan &lt;&lt; Teilnehmer.at(j-1) &lt;&lt;&quot; - &quot; &lt;&lt; Joker &lt;&lt;&quot;\n&quot;;
                        else
                        {
                            Ligaspielplan &lt;&lt; Teilnehmer.at(j-1) &lt;&lt;&quot; - &quot; &lt;&lt; Teilnehmer.at(i-1)&lt;&lt;&quot;\n&quot;;
                            gepaarteSpieler.push_back(i);
                        }

                    }

                }
                //wenn kein Gegenspieler gefunden wurde, wird der Joker gesetzt

            }
        }
        Ligaspielplan &lt;&lt;&quot;\n\n\n&quot;;
    }      
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2342173</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2342173</guid><dc:creator><![CDATA[Ynnead]]></dc:creator><pubDate>Tue, 30 Jul 2013 08:11:37 GMT</pubDate></item></channel></rss>