<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>iTeamWork &#187; C++</title>
	<atom:link href="http://iteamwork.de/tag/c/feed" rel="self" type="application/rss+xml" />
	<link>http://iteamwork.de</link>
	<description>Coding Tipps</description>
	<lastBuildDate>Thu, 06 Oct 2011 17:38:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<item>
		<title>[C/C++] Array mit von einander verschiedenen Zahlen anlegen</title>
		<link>http://iteamwork.de/array-mit-von-einander-verschiedenen-zahlen.html</link>
		<comments>http://iteamwork.de/array-mit-von-einander-verschiedenen-zahlen.html#comments</comments>
		<pubDate>Wed, 16 Jul 2008 00:51:28 +0000</pubDate>
		<dc:creator>D. Martens</dc:creator>
				<category><![CDATA[C / C++]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[array_rand()]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Zufallszahlen]]></category>
		<category><![CDATA[Zufallszahlen Array]]></category>

		<guid isPermaLink="false">http://iteamwork.de/?p=16</guid>
		<description><![CDATA[Sei es für eine Bildergalerie in der eure Bilder in zufälliger Reihenfolge angezeigt werden sollen oder zufällig ausgewählte User eures neuen, schicken &#8220;Web 2.0 Portals&#8221; sein, ein Array gefüllt mit sich nicht wiederholenden Zufallszahlen ist euer Freund. (-; Diese Methode hier hat eine schnieke Laufzeit und leistet mir in meinen Anwendungen gute Dienste. Ich habe [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fiteamwork.de%2Farray-mit-von-einander-verschiedenen-zahlen.html"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fiteamwork.de%2Farray-mit-von-einander-verschiedenen-zahlen.html&amp;source=okriz&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Sei es für eine Bildergalerie in der eure Bilder in zufälliger Reihenfolge angezeigt werden sollen oder zufällig ausgewählte User eures neuen, schicken &#8220;Web 2.0 Portals&#8221; sein, ein Array gefüllt mit sich nicht wiederholenden Zufallszahlen ist euer Freund. (-;</p>
<p>Diese Methode hier hat eine schnieke Laufzeit und leistet mir in meinen Anwendungen gute Dienste.</p>
<p>Ich habe hier im Beispiel simplen C++ Code verwandt.</p>
<p><span id="more-16"></span></p>
<p>In PHP könnt ihr dies mit den Array Funktionen &#8220;array_pop($arr);&#8221; und &#8220;array_rand($arr)&#8221; deutlich einfacher umsetzen.</p>
<p><strong>Die Idee:</strong></p>
<p>Wir erstellen ein Array gefüllt mit Zahlen von 0 bis MAX, die wir dann in &#8220;Unordnung&#8221; bringen.</p>
<p>Dabei speichern wir einen zufällig gewählten Wert an das Ende des Arrays weg und beachten im nächsten Schleifendurchlauf nur noch die übrigen Indizes.</p>
<p>Natürlich funktioniert das auch mit anderen &#8220;Wunschkandidaten&#8221; wie ID&#8217;s, Namen, Farben, Trollen etc. &#8230;</p>
<p><strong>Der Code:</strong></p>
<blockquote><p>// Denkt daran time.h zu inkludieren<br />
#include &lt;iostream&gt;<br />
#include &lt;time.h&gt;<br />
#include &lt;cstdlib&gt;</p>
<p>// Länge des Array&#8217;s m. d. Zufallszahlen; von 0 bis MAX-1<br />
#define MAX 18</p>
<p>void main(void){<br />
int i, zufall;</p>
<p>// Array erstellen und befüllen 0 bis MAX<br />
int rand_arr[MAX];<br />
for (i = 0; i &lt; MAX; i++)<br />
rand_arr [i] = i;</p>
<p>int grenze = MAX &#8211; 1;</p>
<p>// Seed für Zufallszahl setzen, hierfür wird &gt;&gt;time.h&lt;&lt; benötigt<br />
srand( (unsigned)time(NULL));<br />
int puffer = -1;</p>
<p>while(grenze &gt; 0){</p>
<p>zufall = rand()%grenze+1;</p>
<p>// SWAP zwischen Grenze (Ende des Array&#8217;s) und der Zufallszahl<br />
puffer = rand_arr[grenze];<br />
rand_arr[grenze] = rand_arr[zufall];<br />
rand_arr[zufall] = puffer;</p>
<p>//Grenze dekrementieren<br />
grenze&#8211;;<br />
puffer = -1;<br />
}</p>
<p>// ### Anzeigen des Arrays<br />
for(i=0; i &lt;= (MAX &#8211; 1); i++)<br />
printf(&#8220;%d: %d\n&#8221;,i+1,rand_arr[i]);</p>
<p>}</p></blockquote>
<p>Das war es schon!</p>
<p>Eine elegantere und deutlich kürzere Lösung ist unter Verwendung  des  &#8220;algorithm&#8221; Headers möglich. Vielen Dank Herrn Grafe an dieser Stelle (-;</p>
<p><strong>Der Code:</strong></p>
<blockquote><p>#include &lt;algorithm&gt;<br />
#include &lt;time.h&gt;</p>
<p>using namespace std;</p>
<p>// Länge des Array&#8217;s m. d. Zufallszahlen; von 0 bis MAX-1<br />
#define MAX 18</p>
<p>void main(void){<br />
int i;</p>
<p>// Array erstellen<br />
int rand_arr[MAX];</p>
<p>// Seed setzen um immer-gleiche Zahlenfolgen zu verhindern<br />
srand( (unsigned)time(NULL));</p>
<p>// Array befüllen<br />
for (i = 0; i &lt; MAX; i++)<br />
rand_arr [i] = i;</p>
<p>// Zufälliges Verstauschen der Elemente im Array<br />
random_shuffle(rand_arr,rand_arr+MAX);</p>
<p>// Anzeigen des Arrays<br />
for(i=0; i &lt;= (MAX &#8211; 1); i++){<br />
printf(&#8220;%d: %d\n&#8221;,i+1,rand_arr[i]);<br />
}<br />
}</p></blockquote>
<p>Weitere nützliche Members von &#8220;algrorithm&#8221; findet ihr <a href="http://msdn.microsoft.com/en-us/library/chzkfc23(VS.80).aspx" target="_blank">hier</a>.<br />
Solltet ihr Fragen oder Anregungen haben -&gt; Kommentar (-:</p>
<p>Gruß Dimitri</p>
]]></content:encoded>
			<wfw:commentRss>http://iteamwork.de/array-mit-von-einander-verschiedenen-zahlen.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

