# Array mit Zufallszahlen



## avenger2099 (15. August 2007)

C++;
Programm: MS VS 6++;
Konsolenanwendung.

Ich bin gerade dabei eine Methode zuschreiben in der durch einen Zufallsgenerator 32 verschiedene Werte in einem Array abgespeichert werden sollen.

Mein Problem ist das teilweise doppelte werte auftreten und ich keine doppelte Werte haben möchte.


```
#include<iostream>
#include <ctime>
#include <conio.h>
#include<cstdlib>
#include<string>
#include<windows.h>
#include<string>
#include <stdio.h>

using namespace std;

int karten[32];

void karten_generieren() 
{

    for(int i=1;i<32;i++){	
	
		srand( (unsigned)time( NULL ) ); 
		karten[i] = rand() %32+1;
	
	}

		for(int j=0;j<32;j++)
		{
			for(int m=j+1;m<32;m++)
			{
				do
				{
					if(karten[m]==karten[j])
	
					karten[j] = rand() %32+1;
			
				}while(karten[m]==karten[j]);
			}	   
		}
	
	   	
}	   
	
	



void main()
{
	karten_generieren();
	for(int t=1;t<32;t++)
	{
		cout << karten[t] << endl;
	}
}
```

Könnt Ihr mir Helfen? was mache ich falsch

THX im vorraus


----------



## deepthroat (15. August 2007)

Hi.

Erstmal darfst du nicht "void main" schreiben. Siehe z.B. http://www.research.att.com/~bs/bs_faq2.html#void-main

Dann solltest du dringend darauf achten auch vernünftig einzurücken damit man den Code besser lesen kann. Befehle die die gleiche Schachtelungstiefe haben, sollten auch den gleichen Einzug haben.

Es ist unsinnig jedesmal srand(time(0)) aufzurufen. Es reicht aus (und ist auch besser) die Funktion einmal beim Programmstart aufzurufen.

Du solltest nie die Zufallszahlen in einem bestimmten Bereich mit dem Modulo Operator bestimmen. Siehe http://www.tutorials.de/forum/1174892-post9.html.

Anscheinend möchtest du ja nicht wirklich Zufallszahlen, sondern du möchtest die Zahlen in dem Array mischen. Dafür gibt es bereits fix und fertig die random_shuffle Funktion:
	
	
	



```
#include <iostream>
#include <algorithm>
#include <functional>
#include <iterator>

using namespace std;

int main() {
  int array[32];
  const int size = sizeof(array)/sizeof(*array);

  // seed random numbers:
  srand(time(0));
  
  // mit Zahlen von 1 bis size belegen:
  array[0] = 1;
  transform(array, array + size - 1, array + 1, bind1st(plus<int>(), 1));
  
  // Ausgabe:
  copy(array, array + size, ostream_iterator<int>(cout, " "));
  cout << endl;

  // Mischen:
  random_shuffle(array, array + size);

  // Ausgabe:
  copy(array, array + size, ostream_iterator<int>(cout, " "));  
  cout << endl;
}
```
Gruß


----------



## ethciF (17. August 2007)

ich glaub einen fehler hab ich gefunden ...

```
srand( (unsigned)time( NULL ) ); 
		karten[i] = rand() %32+1;
	
---->

		srand( (unsigned)time( NULL ) ); 
		karten[i] = (rand() %32)+1;
```
 
bin aber auch kein c++ pro


----------



## deepthroat (17. August 2007)

ethciF hat gesagt.:


> ich glaub einen fehler hab ich gefunden ...
> 
> 
> ```
> ...


Nein, die Zeilen bedeuten beide dasselbe. Der Modulo-Operator hat eine höhere Priorität als der + Operator, denn er zählt zu den Multiplikationsoperationen - und Punkt- geht vor Strichrechnung.

Gruß


----------

