Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

#include <vcl.h>


#include <iostream.h>



using namespace std;



int main()


{              /* Berreich 1


                           */

int array[10];

int i;




     for (i=0;i<10 ;i=i+1)

     {

             array[i]=random(20)      ;

     }



   /* Berreich 2



    for (i=0;i<10 ;i=i+1)

     {

             cout<<array[i]<<"\n";

     }

     cin.get();

}

Das funktioniert soweit, der nächste schritt wäre das ich keine Doppelten Zahlen mehr bekomme

wie fang ich an?

Auch mit einem std::set kommst Du nicht drum herum zu prüfen, dass wenn random(x) eine Zahl liefert, die bereits im set enthalten ist, nochmal auszurühren.

Wenn man LOTTO nachspielen wöllte, müsste man konsequenter weise ein SET mit allen "Zahlkugeln" abbilden und dann ein random(Anzahl-Runde) machen, so dass nach jeder Runde eine Kugel weniger per Zufall entschieden wird.


#include <stdio.h>
#include <stdlib.h>

int main(void) {
int lotto[10] = { 0 };
int i, j;

for (i=0; i<10; i++) {
lotto[i] = random(11) + 1;

for (j=0; j<i; j++) {
if (lotto[i] == lotto[j]) {
printf("double found lotto[%d] %d == lott[%d] %d\n",
i, lotto[i], j, lotto[j]);
lotto[i] = random(11) + 1;
// Nochmal alle pruefen
// j wird durch j++ in for(..) wieder zu 0
j=-1;
}
}
}

for (i=0; i<sizeof(lotto) / sizeof(int); i++)
printf("lotto[%d]: %d\n", i, lotto[i]);
return 0;
[/PHP]

Gruß,

Daniel

was hast du da nun genau gemacht?

Hinzugefügt:

#include <stdlib.h> = einfügen Libary

int i, j; 2 variablien dazu

-------------------------------------------

kann das mal jmd genaue erklären was da genau abgeht?

Auch mit einem std::set kommst Du nicht drum herum zu prüfen, dass wenn random(x) eine Zahl liefert, die bereits im set enthalten ist, nochmal auszurühren.

Natürlich muss man das prüfen, aber das set macht das wesentlich einfacher


for (i=0;i<10 ;++i)
{
if (!set.insert(random(20)))
--i;
}
[/PHP]

Wobei Klotzkopps Lösung die Schönere ist....

Wobei Klotzkopps Lösung die Schönere ist....
Danke für die Blumen :D

Jedenfalls ist sie flexibler, z.B. wenn man kein Laplace-Experiment hat, also die Elementarereignisse nicht alle gleich wahrscheinlich sind.

Außerdem ist das Laufzeitverhalten besser berechenbar. Das wiederholte Ziehen mit Zurücklegen mit anschließender Prüfung, ob man die Zahl schon mal hatte, terminiert zwar sicher irgendwann, kann aber beliebig lange dauern.

was hast du da nun genau gemacht?

Hinzugefügt:

#include <stdlib.h> = einfügen Libary

int i, j; 2 variablien dazu

-------------------------------------------

kann das mal jmd genaue erklären was da genau abgeht?

Also:


#include <stdio.h>
#include <stdlib.h> // stdlib.h wird von 'random()' gebraucht

int main(void) {
int lotto[10] = { 0 }; // Alle Elemente in Lotto werden auf 0 gesetzt
int i, j; // Die beiden "Schleifensteuerenden" Variablen

/* Erste for Schleife, in der jedem Element in
* 'lotto' ein zufälliger Wert zugewisen wird
*/
for (i=0; i<10; i++) {
lotto[i] = random(11) + 1;

/* Zweite for Schleife
* Hier überprüïfen wir ob unsere gezogenen Zahl
* schon in 'lotto' vorhanden ist:
* Wir gehen also von lotto[0] bis ein Element vor 'lotto[i]'
* durch
*/
for (j=0; j<i; j++) {
if (lotto[i] == lotto[j]) {
/* Wenn wir eine doppelte Zahl gefunden
* haben, ziehen wir für 'lotto[i]' nochmal eine
* Zahl. Dann setzten wir 'j' auf -1, damit diese
* Zweite for Schleife nochmal durch gelaufen wird.
*/
lotto[i] = random(11) + 1;
// j wird durch j++ in for(..) wieder zu 0
j=-1;
}
}
}

// Hier wird einfach der Array ausgegeben
for (i=0; i<sizeof(lotto) / sizeof(int); i++)
printf("lotto[%d]: %d\n", i, lotto[i]);
return 0;
[/PHP]

Nehmen wir an [i]i[/i] ist 3 und [i]lotto[/i] sieht wie folgt aus:

lotto[0] = 1

lotto[1] = 4

lotto[2] = 3

lotto[3] = 3

Wir kommen jetzt in die 2. for Schleife und überprüfen [i]lotto[3][/i] mit l[i]otto[0][/i] bis [i]lotto[2][/i].

Da der Inhalt von [i]lotto[3][/i] gleich dem Inhalt [i]lotto[2][/i] ist, ziehen wir für [i]lotto[3] [/i]nochmal eine neue Zufallszahl und gehen die 2. for Schleife wieder von neuem durch, es kann ja sein das [i]lotto[3][/i] durch die "neuziehung" 4 ist, dann haben wir eine doppelte Zahl bei [i]lotto[1][/i]

Hoffe das war verständlich?

Gruß

das werde ich merken ob ich es am Montag auswendig auf die reihe bekomme..:confused:

ansonsten ruf ich laut DANIIIEEELLL :D

:confused::confused::confused:das programm öffnet und schließt sich direkt ...

wie hau ich da ne pause rein ????

getchar() ...

bei mir funzt es nun

danköö

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.