PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++ Warum diese Abfrage?



Elektrikser
31.03.2004, 11:50
Ich versuche mir C++ beizubringen. Habe mich bis zu den ein- und zweidimensionalen Feldern herangetastet. Dieser Teil einer Übung verstehe ich nicht ganz. Es geht dabei nur um die Erzeugung von Lottozahlen:

srand (5);
l[0]=rand()%49+1;
for (i=1;i<6;i++)
{
do
{
s=0;
z=rand()%49+1;
for (k=0;k<i;k++) if (z==l[k])s=1;
}
while (s==1);
l[i]=z;
}

Was mich daran stört ist diese Abfrage von z in der 9. Zeile. Beim ersten Mal vergleicht er ja z mit l[0]. Ich verstehe den Sinn darin nicht ganz.
Ist das eine Abfrage, dass er nicht zweimal die gleiche Zahl in das Feld l schreibt?

Wäre ich nur bei Assembler geblieben. :-)
Gruß Gerd G.
(Elektrikser)

flaviocu
31.03.2004, 15:04
Dein Code hats nicht richtig gepostet! Hab ihn nochmals reingepasted, einfach mit
&lt;pre&gt; Tags drumherum...

<PRE>
srand (5);
l[0]=rand()%49+1;
for (i=1;i&gt;6;i++) {
do {
s=0;
z=rand()%49+1;
for (k=0;k&lt;i;k++) if (z==l[k])s=1;
} while (s==1);
l[i]=z;
}
</PRE>
Du siehst das richtig, diese Abfrage testet ob diese Zahl z, die mit rand erzeugt wurde nicht schon im Feld vorkommt.
Dazu vergleicht er z mit jeder zahl im Feld. Findet er die Zahl, setzt er s=1, damit ist die Bedingung
do {} while (s==1) wieder wahr, und er macht diesen Block nochmals. s wird erst 0 bleiben wenn die Zahl z nicht mehr im Array
vorkommt. Die for Schleife ist ein wenig abgekürzt. Übersichtlicher wäre es wenn es so geschrieben wuerde:
<pre>
for (k=0;k&lt;i;k++) {
if (z==l[k]) {
s=1;
}
}
</pre>
Wobei das nur meine Meinung ist ;)

Hope it helps
</pre>

Elektrikser
31.03.2004, 17:17
Danke!!!
Du hast mir damit sehr geholfen.:D

Gruß Gerd G.
(Elektrikser)

Unregistriert
01.04.2004, 09:00
ähm
for (i=1;i>6;i++) {

soll doch sicher so aussehen
for (i=1;i<6;i++) {

Elektrikser
01.04.2004, 09:19
ja mei, so genau nimm ich es nicht. Ich weiß ja, was gemeint war

Gruß Gerd G.
(Elektrikser)