<?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[vector&amp;lt;int&amp;gt;  statistisch auswerten [Gelöst]]]></title><description><![CDATA[<p>Ich möchte gerne einen vector&lt;int&gt; statistisch auswerten.<br />
Beispiel: In dem Vektor sind Kontenstände gespeichert im Bereich von 0,- bis 2000,- Euro.<br />
Nun soll eine statistische Verteilung in 100 Euro Schritten ermittelt werden, wären also insgesamt 20 Gruppen.</p>
<p>Normalerweise würde ich dazu eine switch/case Anweisung benutzen.<br />
Soweit ich das aber weiß, geht</p>
<pre><code class="language-cpp">switch(myvector[i]) {}
</code></pre>
<p>nicht.</p>
<p>D.h. man müßte dann mit der Verzweigung if arbeiten, was bei der Anzahl von 20 Verzweigungen unschön ist.<br />
Gibt es irgendwelche Alternativen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/304952/vector-lt-int-gt-statistisch-auswerten-gelöst</link><generator>RSS for Node</generator><lastBuildDate>Wed, 24 Jun 2026 13:15:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/304952.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 17 Jun 2012 21:16:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to vector&amp;lt;int&amp;gt;  statistisch auswerten [Gelöst] on Mon, 18 Jun 2012 21:04:21 GMT]]></title><description><![CDATA[<p>Ich möchte gerne einen vector&lt;int&gt; statistisch auswerten.<br />
Beispiel: In dem Vektor sind Kontenstände gespeichert im Bereich von 0,- bis 2000,- Euro.<br />
Nun soll eine statistische Verteilung in 100 Euro Schritten ermittelt werden, wären also insgesamt 20 Gruppen.</p>
<p>Normalerweise würde ich dazu eine switch/case Anweisung benutzen.<br />
Soweit ich das aber weiß, geht</p>
<pre><code class="language-cpp">switch(myvector[i]) {}
</code></pre>
<p>nicht.</p>
<p>D.h. man müßte dann mit der Verzweigung if arbeiten, was bei der Anzahl von 20 Verzweigungen unschön ist.<br />
Gibt es irgendwelche Alternativen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224351</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224351</guid><dc:creator><![CDATA[redrew99]]></dc:creator><pubDate>Mon, 18 Jun 2012 21:04:21 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;int&amp;gt;  statistisch auswerten [Gelöst] on Sun, 17 Jun 2012 21:19:55 GMT]]></title><description><![CDATA[<p>Wieso sollte der gezeigte switch nicht gehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224352</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224352</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 17 Jun 2012 21:19:55 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;int&amp;gt;  statistisch auswerten [Gelöst] on Sun, 17 Jun 2012 21:34:09 GMT]]></title><description><![CDATA[<p>Der switch an sich geht schon noch, aber bei der case Anweisung verweigert<br />
der Compiler den Dienst.</p>
<p>Also:</p>
<pre><code class="language-cpp">switch(myvector[i])
 {
   case (myvector[i]&lt;100): Gruppe1+=1;break;
 }
</code></pre>
<p>Fehlermeldung: &quot;i cannot appear in a constant-expression&quot;</p>
<p>Nachtrag: Ich ahne den Fehler...<br />
Richtig wäre</p>
<pre><code class="language-cpp">case (i&lt;100) : Gruppe1+=;break;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2224355</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224355</guid><dc:creator><![CDATA[redrew99]]></dc:creator><pubDate>Sun, 17 Jun 2012 21:34:09 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;int&amp;gt;  statistisch auswerten [Gelöst] on Sun, 17 Jun 2012 21:35:46 GMT]]></title><description><![CDATA[<p>Wieso denn ueberhaupt ein switch-statement. Wenn ich dich richtig verstanden habe, dann moechtest du mehrere Beitraege in Gruppen 100, 200, 300, 400, ..., 2000 aufteilen.</p>
<p>Das kann man doch viel schoener so machen:</p>
<pre><code class="language-cpp">int main() 
{ 
	vector&lt;int&gt; money(100); // Enthaelt Werte zwischen 0 und 2000
	vector&lt;int&gt; groups(20);

	// Initialisieren etc.

	for ( size_t i = 0; i &lt; money.size(); ++i )
	{
		size_t group_index = (money[i] - money[i] % 100) / 100 - 1; // Liefert zum Beispiel fuer money[i] = 1750 den Wert 16
		++groups[group_index]; // Zaehle in der entsprechenden Gruppe eins hoch
	}
}
</code></pre>
<p>Der Code ist so noch nicht ganz richtig, du musst die vielleicht noch ein par Details ueberlegen. Zum Beispiel wenn money[i] == 0 bekommst du ein Problem.</p>
<p>*Edit<br />
Zeile 10 kann man auch einfacher schreiben, da ja bei Integer-Division die Nachkomastellen abgeschnitten werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224356</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224356</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Sun, 17 Jun 2012 21:35:46 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;int&amp;gt;  statistisch auswerten [Gelöst] on Sun, 17 Jun 2012 21:33:25 GMT]]></title><description><![CDATA[<p>redrew99 schrieb:</p>
<blockquote>
<p>In dem Vektor sind Kontenstände gespeichert im Bereich von 0,- bis 2000,- Euro.<br />
Nun soll eine statistische Verteilung in 100 Euro Schritten ermittelt werden, wären also insgesamt 20 Gruppen.</p>
</blockquote>
<p>So wie ich das verstehe sind es 21 Gruppen (0-99, 100-199, .. 1900-1999, 2000).</p>
<p>redrew99 schrieb:</p>
<blockquote>
<p>Normalerweise würde ich dazu eine switch/case Anweisung benutzen.</p>
</blockquote>
<p>Wie soll das funktionieren?</p>
<p>Wie wäre es also einfach damit:</p>
<pre><code class="language-cpp">vector&lt;unsigned&gt; distribution(21, 0);

//für jeden Stand
unsigned amount = ..;
++distribution[ amount / 100 ];
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2224357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224357</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Sun, 17 Jun 2012 21:33:25 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;int&amp;gt;  statistisch auswerten [Gelöst] on Sun, 17 Jun 2012 21:49:45 GMT]]></title><description><![CDATA[<p>Ja, Bereiche von Werten in der case-Anweisung anzugeben, scheint nicht möglich zu sein.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/22908">@icarus2</a>, <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/22298">@TyRoXx</a> :<br />
Danke für die Tips, das schaue ich mir mal an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224360</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224360</guid><dc:creator><![CDATA[redrew99]]></dc:creator><pubDate>Sun, 17 Jun 2012 21:49:45 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;int&amp;gt;  statistisch auswerten [Gelöst] on Sun, 17 Jun 2012 21:53:33 GMT]]></title><description><![CDATA[<p>redrew99 schrieb:</p>
<blockquote>
<p>Ja, Bereiche von Werten in der case-Anweisung anzugeben, scheint nicht möglich zu sein.</p>
</blockquote>
<p>Doch, das geht schon. Folgendes zum Beispiel funktioniert einwandfrei:</p>
<pre><code class="language-cpp">vector&lt;int&gt; my_vector(10, 0);
	size_t i = 0;

	switch ( my_vector[i] )
	{
	case 0:
		cout &lt;&lt; 0 &lt;&lt; endl;
		break;
	case 1:
		cout &lt;&lt; 1 &lt;&lt; endl;
		break;
	default:
		cout &lt;&lt; &quot;Default&quot; &lt;&lt; endl;
		break;
	}
</code></pre>
<p>Das Problem in deinem Code war das</p>
<pre><code class="language-cpp">case (myvector[i]&lt;100): // ...
</code></pre>
<p>Das geht so nicht. Der Compiler braucht da nicht einen boolschen Ausdruck sondern in dem Fall einen Integer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224362</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224362</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Sun, 17 Jun 2012 21:53:33 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;int&amp;gt;  statistisch auswerten [Gelöst] on Sun, 17 Jun 2012 22:09:20 GMT]]></title><description><![CDATA[<p>icarus2 schrieb:</p>
<blockquote>
<p>redrew99 schrieb:</p>
<blockquote>
<p>Ja, Bereiche von Werten in der case-Anweisung anzugeben, scheint nicht möglich zu sein.</p>
</blockquote>
<p>Doch, das geht schon. Folgendes zum Beispiel funktioniert einwandfrei:</p>
<pre><code class="language-cpp">vector&lt;int&gt; my_vector(10, 0);
	size_t i = 0;

	switch ( my_vector[i] )
	{
	case 0:
		cout &lt;&lt; 0 &lt;&lt; endl;
		break;
	case 1:
		cout &lt;&lt; 1 &lt;&lt; endl;
		break;
	default:
		cout &lt;&lt; &quot;Default&quot; &lt;&lt; endl;
		break;
	}
</code></pre>
</blockquote>
<p>In dem Code wird aber auch kein Bereich angegeben, sondern nur ein Wert.<br />
Man könnte theoretisch natürlich 2000 case-Anweisungen setzen, das würde gehen, ja.</p>
<p>icarus2 schrieb:</p>
<blockquote>
<p>Das Problem in deinem Code war das</p>
<pre><code class="language-cpp">case (myvector[i]&lt;100): // ...
</code></pre>
<p>Das geht so nicht. Der Compiler braucht da nicht einen boolschen Ausdruck sondern in dem Fall einen Integer.</p>
</blockquote>
<p>Ja, das war natürlich Murks. Problem ist halt, daß an der Stelle ein boolscher Ausdruck nicht zulässig ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224367</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224367</guid><dc:creator><![CDATA[redrew99]]></dc:creator><pubDate>Sun, 17 Jun 2012 22:09:20 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;int&amp;gt;  statistisch auswerten [Gelöst] on Sun, 17 Jun 2012 22:23:45 GMT]]></title><description><![CDATA[<p>Mir fällt gerade ein, wenn ein boolscher Ausdruck an der Stelle nicht zulässig ist, könnte man den doch auch im Vorfeld ermitteln und der case-anweisung dann<br />
das Ergebnis(als integerwert) des boolschen Ausdrucks übergeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224374</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224374</guid><dc:creator><![CDATA[redrew99]]></dc:creator><pubDate>Sun, 17 Jun 2012 22:23:45 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;int&amp;gt;  statistisch auswerten [Gelöst] on Sun, 17 Jun 2012 22:37:44 GMT]]></title><description><![CDATA[<p>redrew99 schrieb:</p>
<blockquote>
<p>Mir fällt gerade ein, wenn ein boolscher Ausdruck an der Stelle nicht zulässig ist, könnte man den doch auch im Vorfeld ermitteln und der case-anweisung dann<br />
das Ergebnis(als integerwert) des boolschen Ausdrucks übergeben.</p>
</blockquote>
<p>Ein Boolean hat nur zwei Werte, true oder false. Du brauchst fuer dein Switch-Statement allerdings 21 verschiedene Werte. Dein Vorhaben klappt daher nicht.</p>
<p>Aber wie gesagt. Ein Switch-Statement ist hier unagebracht. Stell dir vor, du moechtest auf einmal die Verteilung von 100er auf 10er aendern. Mehr als 200 cases? Das ist nicht so toll.</p>
<p>Mach es so wie es von mir und TyRoXx vorgeschlagen wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224381</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224381</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Sun, 17 Jun 2012 22:37:44 GMT</pubDate></item></channel></rss>