<?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>Tue, 08 May 2012 21:11:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</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;hashtags=array_rand%28%29,C%2B%2B,Zufallszahlen,Zufallszahlen+Array&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>
<div class="codesnip-container" >
<div class="c codesnip" style="font-family:monospace;">
<ol>
<li class="li1">
<div class="de1"><span class="co1">// Denkt daran time.h zu inkludieren</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">#include &lt;iostream&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">#include &lt;time.h&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">#include &lt;cstdlib&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// Länge des Array&#8217;s m. d. Zufallszahlen; von 0 bis MAX-1</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">#define MAX 18</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">void</span> main<span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">int</span> i<span class="sy0">,</span> zufall<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// Array erstellen und befüllen 0 bis MAX</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">int</span> rand_arr<span class="br0">&#91;</span>MAX<span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span>i <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> i <span class="sy0">&lt;</span> MAX<span class="sy0">;</span> i<span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; rand_arr <span class="br0">&#91;</span>i<span class="br0">&#93;</span> <span class="sy0">=</span> i<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">int</span> grenze <span class="sy0">=</span> MAX <span class="sy0">-</span> <span class="nu0">1</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// Seed für Zufallszahl setzen, hierfür wird &gt;&gt;time.h&lt;&lt; benötigt</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; srand<span class="br0">&#40;</span> <span class="br0">&#40;</span><span class="kw4">unsigned</span><span class="br0">&#41;</span>time<span class="br0">&#40;</span>NULL<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">int</span> puffer <span class="sy0">=</span> <span class="sy0">-</span><span class="nu0">1</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">while</span><span class="br0">&#40;</span>grenze <span class="sy0">&gt;</span> 0<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; zufall <span class="sy0">=</span> rand<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">%</span>grenze<span class="sy0">+</span><span class="nu0">1</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// SWAP zwischen Grenze (Ende des Array&#8217;s) und der Zufallszahl</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; puffer <span class="sy0">=</span> rand_arr<span class="br0">&#91;</span>grenze<span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; rand_arr<span class="br0">&#91;</span>grenze<span class="br0">&#93;</span> <span class="sy0">=</span> rand_arr<span class="br0">&#91;</span>zufall<span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; rand_arr<span class="br0">&#91;</span>zufall<span class="br0">&#93;</span> <span class="sy0">=</span> puffer<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Grenze dekrementieren</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; grenze<span class="sy0">&#8211;;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; puffer <span class="sy0">=</span> <span class="sy0">-</span><span class="nu0">1</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// ### Anzeigen des Arrays</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">for</span><span class="br0">&#40;</span>i<span class="sy0">=</span><span class="nu0">0</span><span class="sy0">;</span> i <span class="sy0">&lt;=</span> <span class="br0">&#40;</span>MAX <span class="sy0">-</span> 1<span class="br0">&#41;</span><span class="sy0">;</span> i<span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;%d: %d<span class="es1">\n</span>&quot;</span><span class="sy0">,</span>i<span class="sy0">+</span>1<span class="sy0">,</span>rand_arr<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
</div>
<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>
<div class="codesnip-container" >
<div class="c codesnip" style="font-family:monospace;">
<ol>
<li class="li1">
<div class="de1"><span class="co2">#include &lt;algorithm&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">#include &lt;time.h&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">using namespace std<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// Länge des Array&#8217;s m. d. Zufallszahlen; von 0 bis MAX-1</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co2">#define MAX 18</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw4">void</span> main<span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">int</span> i<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// Array erstellen</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">int</span> rand_arr<span class="br0">&#91;</span>MAX<span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// Seed setzen um immer-gleiche Zahlenfolgen zu verhindern</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; srand<span class="br0">&#40;</span> <span class="br0">&#40;</span><span class="kw4">unsigned</span><span class="br0">&#41;</span>time<span class="br0">&#40;</span>NULL<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// Array befüllen</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span>i <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> i <span class="sy0">&lt;</span> MAX<span class="sy0">;</span> i<span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; rand_arr <span class="br0">&#91;</span>i<span class="br0">&#93;</span> <span class="sy0">=</span> i<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// Zufälliges Verstauschen der Elemente im Array</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; random_shuffle<span class="br0">&#40;</span>rand_arr<span class="sy0">,</span>rand_arr<span class="sy0">+</span>MAX<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// Anzeigen des Arrays</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">for</span><span class="br0">&#40;</span>i<span class="sy0">=</span><span class="nu0">0</span><span class="sy0">;</span> i <span class="sy0">&lt;=</span> <span class="br0">&#40;</span>MAX <span class="sy0">-</span> 1<span class="br0">&#41;</span><span class="sy0">;</span> i<span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;%d: %d<span class="es1">\n</span>&quot;</span><span class="sy0">,</span>i<span class="sy0">+</span>1<span class="sy0">,</span>rand_arr<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
</div>
<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>4</slash:comments>
		</item>
	</channel>
</rss>

