<?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[Random Klasse]]></title><description><![CDATA[<p>Hallo Leute, kann mir bitte jemand erklären was in der while Schleife passiert, ich kann das nicht so ganz nachvollziehen...Außerdem so wie ich es verstehe aus diesem Code wird der Wert von r (-1) an max_range übergeben und anschließend mit RAND_MAX verglichen. Für mich sieht es so aus, dass es der else-Fall ausgeführt wird, da max_range nicht kleiner als RAND_MAX ist....habe ich es richtig verstanden?</p>
<p>Hoffe sehr auf Eure Ratschläge!!!! Danke im Voraus</p>
<pre><code class="language-cpp">Random::Random(int r = -1)
{
	max_range = r;
	fill_mask = 0;
	fill_bits = 0;
	/* determine no. of bits required */
	if (max_range &gt; RAND_MAX) {
		int req_padding = (max_range / RAND_MAX);
		//cout &lt;&lt; &quot;Required padding is: &quot; &lt;&lt; req_padding &lt;&lt; endl;
		int cur_padding = 1;
		while (cur_padding &lt; req_padding) {
			cur_padding = cur_padding &lt;&lt; 1;
			fill_mask = fill_mask &lt;&lt; 1;
			fill_mask += 1;
			fill_bits++;
		}
	}
	//cout &lt;&lt; &quot;No. of fill bits is: &quot; &lt;&lt; fill_bits &lt;&lt; endl;
	//cout &lt;&lt; &quot;Fill mask is: &quot; &lt;&lt; fill_mask &lt;&lt; endl;
	//srand(clock());
	srand (12);
}

Random::~Random()
{
}

int Random::give()
{
	int value = rand();
	int sec_value = rand();

	for (int i = 1; i &lt;= fill_bits; i++) {
		value = value &lt;&lt; 1;
	}	
	value += (sec_value &amp;&amp;  fill_mask);
	return (value % max_range);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/296041/random-klasse</link><generator>RSS for Node</generator><lastBuildDate>Sat, 15 Aug 2026 05:11:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/296041.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 26 Nov 2011 20:25:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Random Klasse on Sat, 26 Nov 2011 20:25:47 GMT]]></title><description><![CDATA[<p>Hallo Leute, kann mir bitte jemand erklären was in der while Schleife passiert, ich kann das nicht so ganz nachvollziehen...Außerdem so wie ich es verstehe aus diesem Code wird der Wert von r (-1) an max_range übergeben und anschließend mit RAND_MAX verglichen. Für mich sieht es so aus, dass es der else-Fall ausgeführt wird, da max_range nicht kleiner als RAND_MAX ist....habe ich es richtig verstanden?</p>
<p>Hoffe sehr auf Eure Ratschläge!!!! Danke im Voraus</p>
<pre><code class="language-cpp">Random::Random(int r = -1)
{
	max_range = r;
	fill_mask = 0;
	fill_bits = 0;
	/* determine no. of bits required */
	if (max_range &gt; RAND_MAX) {
		int req_padding = (max_range / RAND_MAX);
		//cout &lt;&lt; &quot;Required padding is: &quot; &lt;&lt; req_padding &lt;&lt; endl;
		int cur_padding = 1;
		while (cur_padding &lt; req_padding) {
			cur_padding = cur_padding &lt;&lt; 1;
			fill_mask = fill_mask &lt;&lt; 1;
			fill_mask += 1;
			fill_bits++;
		}
	}
	//cout &lt;&lt; &quot;No. of fill bits is: &quot; &lt;&lt; fill_bits &lt;&lt; endl;
	//cout &lt;&lt; &quot;Fill mask is: &quot; &lt;&lt; fill_mask &lt;&lt; endl;
	//srand(clock());
	srand (12);
}

Random::~Random()
{
}

int Random::give()
{
	int value = rand();
	int sec_value = rand();

	for (int i = 1; i &lt;= fill_bits; i++) {
		value = value &lt;&lt; 1;
	}	
	value += (sec_value &amp;&amp;  fill_mask);
	return (value % max_range);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2149351</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2149351</guid><dc:creator><![CDATA[julchatt]]></dc:creator><pubDate>Sat, 26 Nov 2011 20:25:47 GMT</pubDate></item><item><title><![CDATA[Reply to Random Klasse on Sat, 26 Nov 2011 21:45:58 GMT]]></title><description><![CDATA[<p>Wenn man eine Zahl um 1 nach links schiebt, ist das bloß eine andere Schreibweise für &quot;Zahl mal 2 nehmen&quot;, die ein paar Möchtegernoptimierer so schreiben (der leere Destruktor und ein paar weitere Kleinigkeiten deuteten ebenfalls da drauf hin, dass hier ein typischer Cargo-Cult-Programmierer am Werk war). Der Rest der Operationen sollte doch wohl klar sein, was die machen, oder?</p>
<blockquote>
<p>Außerdem so wie ich es verstehe aus diesem Code wird der Wert von r (-1) an max_range übergeben</p>
</blockquote>
<p>Defaultparameter sind dir bekannt? Das klingt ein bisschen so, als wäre dem nicht so.</p>
<blockquote>
<p>Für mich sieht es so aus, dass es der else-Fall ausgeführt wird, da max_range nicht kleiner als RAND_MAX ist</p>
</blockquote>
<p>Wieso sollte max_range nicht kleiner sein als RAND_MAX? RAND_MAX ist in der Regel ziemlich groß.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2149392</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2149392</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 26 Nov 2011 21:45:58 GMT</pubDate></item><item><title><![CDATA[Reply to Random Klasse on Sun, 27 Nov 2011 10:09:37 GMT]]></title><description><![CDATA[<p>ok, danke!!!! Wenn r ein Defaultparameter ist und in der Funktion dieser Defaultparameter dem max_range übergeben wird...dies verstehe ich nicht so ganz, wozu wird es gemacht? Ich bin ziemlich neu in C++, muss noch viel üben...</p>
<p>Freue mich auf deine Antwort!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2149459</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2149459</guid><dc:creator><![CDATA[julchatt]]></dc:creator><pubDate>Sun, 27 Nov 2011 10:09:37 GMT</pubDate></item><item><title><![CDATA[Reply to Random Klasse on Sun, 27 Nov 2011 10:24:35 GMT]]></title><description><![CDATA[<p>mh für mich macht der contruktor nicht viel sinn...</p>
<p>erstens: RAND_MAX ist eine recht grosse zahl, die zu übersteigen ist, naja, etwas ungewöhnlich wie ich finde</p>
<p>zweitens: wenn sie nicht überboten wird, apssiert ausser dem initialisieren von rand nix (srand(12) oO)</p>
<p>drittens: wenn doch, dann kann man sich die while schleife sparen, das wird zu:</p>
<pre><code class="language-cpp">Random::Random(int r = -1)
{
    max_range = r;
    fill_mask = 0;
    fill_bits = 0;
    /* determine no. of bits required */
    if (max_range &gt; RAND_MAX) {
        int req_padding = (max_range / RAND_MAX);
        int cur_padding = 1;
        cur_padding = cur_padding &lt;&lt; req_padding;
        fill_mask = fill_mask &lt;&lt; req_padding;
        fill_mask += req_padding;
        fill_bits = req_padding;
    }
    srand (12);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2149464</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2149464</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Sun, 27 Nov 2011 10:24:35 GMT</pubDate></item><item><title><![CDATA[Reply to Random Klasse on Sun, 27 Nov 2011 11:33:23 GMT]]></title><description><![CDATA[<p>julchatt schrieb:</p>
<blockquote>
<p>ok, danke!!!! Wenn r ein Defaultparameter ist und in der Funktion dieser Defaultparameter dem max_range übergeben wird...dies verstehe ich nicht so ganz, wozu wird es gemacht? Ich bin ziemlich neu in C++, muss noch viel üben...</p>
</blockquote>
<p>Wenn du dich fragst, wozu das guit ist: Sollte das nicht dabei gestanden haben, wo du den Code her hast?</p>
<p>Von dem was ich so sehe, soll hier wohl ein Wrapper um den Zufallsgenerator erstellt werden, der ganzzahlige Zufallszahlen in einem bestimmten Wertebereich zieht. Dies ist solange ziemlich einfach, solange der Wertebereich &lt; RAND_MAX ist (und man nicht auf einer perfekten Gleichverteilung besteht, sondern sich mit einer sehr sehr guten zufrieden gibt). Wenn der Wertebereich größer wird (es gibt durchaus noch Implementierungen mit RAND_MAX == 2 hoch 16), muss man mehrere Zahlen ziehen und diese zusammenfrickeln. Dein Programmierer hat sich hier ein, wie ich finde unnötig kompliziertes, Schema ausgedacht, bei dem die gezogenen Zahlen mittels ein bisschen Bitmanipulation auf die richtige Länge gestutzt und dann zusammengesetzt werden. Im Konstruktor berechnet er, wie die Bitmaske die er zum Zurechtschneiden benutzt genau aussehen muss. (Ich bin mir übrigens nicht ganz sicher, ob das wirklich richtig ist, was er da tut. Das ist so wirr programmiert.)</p>
<p>Den Code solltest du dir aber nicht als Vorbild nehmen. Wie schon von mehreren Leuten gesagt wurde, ist er ziemlich schlecht, der Programmierer hatte nicht viel Ahnung, weder von C++ noch allgemein. Es sieht sehr danach aus, als ob hier sehr viel &quot;premature optimization&quot; benutzt wurde, da der Programmierer wohl irgendwann mal gehört hat, dass Zufallszahlengeneratoren (auch) anhand ihrer Geschwindigkeit verglichen werden. Dadurch wurde der Code unnötig umständlich. Ich würde ganz stark da drauf tippen, dass das Resultat wesentlich langsamer ist, als eine naivere Implementierung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2149493</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2149493</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 27 Nov 2011 11:33:23 GMT</pubDate></item><item><title><![CDATA[Reply to Random Klasse on Sun, 27 Nov 2011 11:34:04 GMT]]></title><description><![CDATA[<p>)))) ja, kann sein...aber diesen Code habe ich von dem Professor...damit muss ich dann arbeiten)) ...Frage: wie erzeuge ich dann in main die Zufallszahlen? Hier meine Lösung halbwegs...</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;
#include&lt;fstream&gt;
#include&lt;ctime&gt;
#include&lt;string&gt;
#include&lt;time.h&gt;

#include &quot;Random.h&quot;

using namespace std;

int n1=100000, n2=1000000, n3=5000000;

int main(int argc, int *argv[])
{
    clock_t start,end;
    int ran;

    Random *zufallszahlen1 = new Random(n1);
    Random *zufallszahlen2 = new Random(n2);
    Random *zufallszahlen3 = new Random(n3);

          //zufallszahlen1.give();
          //zufallszahlen2.give();
          //zufallszahlen3.give();

     ifstream unsort_1, unsort_2, unsort_3;
     unsort_1.open(&quot;unsort_1.txt&quot;);
     unsort_2.open(&quot;unsort_2.txt&quot;);
     unsort_3.open(&quot;unsort_3.txt&quot;);

     	unsort_1.clear();
	unsort_2.clear();
	unsort_3.clear();

     ofstream sortiert_1, sortiert_2, sortiert_3;
     sortiert_1.open(&quot;sortiert_1.txt&quot;);
     sortiert_2.open(&quot;sortiert_2.txt&quot;);
     sortiert_3.open(&quot;sortiert_3.txt&quot;);

     	sortiert_1.clear();
	sortiert_2.clear();
	sortiert_3.clear();

     if(unsort_1.is_open()!=true || unsort_2.is_open()!=true || unsort_3.is_open()!=true){
          cerr&lt;&lt;&quot;Datei zum Schreiben von Random kann nicht geoeffnet werden!&quot;&lt;&lt;endl;
          return 1;
      }

      if(sortiert_1.is_open()!=true || sortiert_2.is_open()!=true || sortiert_3.is_open()!=true){
          cerr&lt;&lt;&quot;Datei zum Schreiben von sortierten Zahlen kann nicht geoeffnet werden&quot;&lt;&lt;endl;
          return 1;
      }

      while(!unsort_1.eof()){
        for(int i=0; i&lt;n1; i++){
           ran = n1.give();
           unsort_1 &lt;&lt; ran&lt;&lt;;
        }
      }

     return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2149494</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2149494</guid><dc:creator><![CDATA[julchatt]]></dc:creator><pubDate>Sun, 27 Nov 2011 11:34:04 GMT</pubDate></item><item><title><![CDATA[Reply to Random Klasse on Sun, 27 Nov 2011 11:36:14 GMT]]></title><description><![CDATA[<p>Der Code stand im Skript, aber erklärt was da garnichts. Und ich will ja verstehen was da abläuft.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2149496</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2149496</guid><dc:creator><![CDATA[julchatt]]></dc:creator><pubDate>Sun, 27 Nov 2011 11:36:14 GMT</pubDate></item><item><title><![CDATA[Reply to Random Klasse on Sun, 27 Nov 2011 11:42:34 GMT]]></title><description><![CDATA[<p>julchatt schrieb:</p>
<blockquote>
<p>Der Code stand im Skript, aber erklärt was da garnichts. Und ich will ja verstehen was da abläuft.</p>
</blockquote>
<p>Lauf weg. Schnell.</p>
<p>Dies ist ganz übles C++. Praktisch alles ist falsch gemacht, was man falsch machen kann. Es compiliert noch nicht einmal. Von diesem Mann kannst du nichts lernen, außer wie man es nicht macht. Wenn du den Kurs fortsetzt, wirst du dich auf Jahre hinaus selber schädigen.</p>
<p>Es gibt sicherlich auch noch andere Sachen, die du an deiner Hochschule alternativ machen kannst. Dies jedenfalls solltest du vermeiden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2149500</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2149500</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 27 Nov 2011 11:42:34 GMT</pubDate></item><item><title><![CDATA[Reply to Random Klasse on Sun, 27 Nov 2011 11:44:28 GMT]]></title><description><![CDATA[<p>naja, ich habe bei dem Prof Algorithmen...ist meine Code bzw. meine Main Funktion halbwegs richtig...das Programm mekert bei:</p>
<p>while(!unsort_1.eof()){<br />
for(int i=0; i&lt;n1; i++){<br />
ran = n1.give();<br />
unsort_1 &lt;&lt; ran&lt;&lt;;<br />
}<br />
}</p>
<p>irgendetwas mache ich falsch...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2149504</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2149504</guid><dc:creator><![CDATA[julchatt]]></dc:creator><pubDate>Sun, 27 Nov 2011 11:44:28 GMT</pubDate></item><item><title><![CDATA[Reply to Random Klasse on Sun, 27 Nov 2011 11:46:59 GMT]]></title><description><![CDATA[<p>julchatt schrieb:</p>
<blockquote>
<p>irgendetwas mache ich falsch...</p>
</blockquote>
<p>Ja. Definitiv. Du benutzt z.B. keine cpp-Tags. Außerdem ist &quot;das Programm mekert&quot; so ungenau wie es nur sein kann. Lies dir bitte mal den Link in meiner Signatur durch, besonders den Punkt zur präzisen Fragestellung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2149508</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2149508</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Sun, 27 Nov 2011 11:46:59 GMT</pubDate></item><item><title><![CDATA[Reply to Random Klasse on Sun, 27 Nov 2011 12:08:10 GMT]]></title><description><![CDATA[<p>Ok, ich mache Grammatikfehler...meine Frage bezieht sich auf die Random-Klasse.</p>
<p>Ich muss eine .txt Datei erzeugen und diese mit Zufallszahlen befüllen. Wie man sieht habe ich Schwierigkeiten mit der Umsetzung in der main()...deshalb bin ich ja auch in diesem Forum, um Euch, die Profis, für die es alles easy ist, zu fragen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2149521</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2149521</guid><dc:creator><![CDATA[julchatt]]></dc:creator><pubDate>Sun, 27 Nov 2011 12:08:10 GMT</pubDate></item><item><title><![CDATA[Reply to Random Klasse on Sun, 27 Nov 2011 12:35:46 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">Random rnd(10);

cout &lt;&lt; rnd.give();
</code></pre>
<p>War es das, was du wissen wolltest?</p>
<p>Der Rest der Schwierigkeiten, die du vermutlich hast, liegt, kurz gesagt, da dran, dass du nicht gut C++ kannst. Falls du die obige main geschrieben haben solltest, dann bezieht sich mein Kommentar über die Fähigkeiten deines Profs natürlich auf dich. Was auch ok ist, da du ja selber noch der Lernende bist und deinen Stil nicht lehren wirst.</p>
<p>Die Frage ist bloß, wo man anfangen soll. Du scheinst wirklich von Anfang an nicht aufgepasst zu haben. Schon die includes sind falsch. Dazu noch globale Variablen, die vermutlich Konstanten sein sollen. Dann geht's weiter mit total sinnlosen unbenutzten Variablen. Dann Variablen die ohne Grund mit new angelegt werden (früher mal Java gemacht?). Dann lauter Mystizismus im Umgang mit Streams, der zeigt, dass du mal ein paar Sachen mit der C++-Ein-/Ausgabe gesehen, aber nicht verstanden hast. Und noch ein paar Grammatikfehler (nicht Deutsch, sondern C++), die vermutlich zu deinem &quot;das Programm mekert&quot; führen.</p>
<p>Ich möchte dich nicht beleidigen (angeblich denken einige Leute, der Umgangston hier im Forum wäre zu hart), sondern das obige ist eine objektive Aufzählung des Ist-Zustandes. Die fehlen sowohl sprachliche Grundlagen als auch die nötige Sorgfalt. Im Internet Codebeispiele suchen, zusammenkopieren und ein bisschen zu verändern ist <strong>nicht</strong> Programmieren!<br />
Du müsstest noch einmal ganz zu den Grundlagen von C++ zurück. Guck mal hier:<br />
<a href="http://www.c-plusplus.net/forum/251551" rel="nofollow">http://www.c-plusplus.net/forum/251551</a><br />
Ob das zeitlich für dich in Frage kommt, musst du wissen. Jedenfalls liefe jede andere Beantwortung deiner Fragen zur main da drauf hinaus, dass dir jede Woche jemand deine Hausaufgaben komplett schreibt, was nicht in Frage kommt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2149534</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2149534</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 27 Nov 2011 12:35:46 GMT</pubDate></item><item><title><![CDATA[Reply to Random Klasse on Sun, 27 Nov 2011 12:47:05 GMT]]></title><description><![CDATA[<p>Ja, ich weiß, ich muss mir erst die Grundlagen aneignen...Trotzdem Danke für die Hilfe und die Info ... <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="🙂"
    /> <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/2149542</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2149542</guid><dc:creator><![CDATA[julchatt]]></dc:creator><pubDate>Sun, 27 Nov 2011 12:47:05 GMT</pubDate></item></channel></rss>