C - Zufallszahlen



  • hallo, da bin ich mal wieder
    mit einer Fage:

    ich habe mir ein programm geschrieben -- am anfang liefert mir rand() eine
    zufallszahl. ich will aber eine kürzere zufallszahl haben, zb.: vierstellig.
    das könnte ich lösen, indem ich rand()/1000000 (oder so) teile.
    diese zahl ist aber scheisse, da die erste stelle zu häufig unter vier ist.
    Also:
    ich schneide die ersten beiden ziffern ab und beginne bei der ausgabe erst mit
    der dritten stelle. Da sind die zahlen nämlich zufälliger!

    Aber nun:
    Mein Programm geht nicht -- habt ihr hier eine idee?
    -----------------------------------------------------------------------------------------------------------------

    #include<stdio.h>
    #include<math.h>

    main()
    {
            int i=1,anzahl,a,stellen,k,j;
            char zahlstrg[14], neu[14], neu2[14];
            srand(time(NULL));
            printf("\nWieviele Zufallszahlen? ");
            scanf("%i",&anzahl);
            printf("\nWieviele Stellen soll die Zahl besitzen? ");
            scanf("%i",&stellen);

    a=rand();
            sprintf(neu, "%i",a);
            j=0;
            for (k=3;k>=(k+stellen);k++)
            {
                    neu2[j]=neu[k];
                    j++;

    }
            printf("\n%s", neu2);

    while (i>=(anzahl-1))
            {
                    a=rand();
                    sprintf(neu, "%i",a);
                    j=0;
                    for (k=3;k>=(k+stellen);k++)
                            {

    neu2[j]=neu[k];
                            k++;
                            j++;
                                    }

    i++;
                    printf("\n%s",neu2);
            }

    }



  • Hi,

    schau doch mal in die FAQ:

    http://www.c-plusplus.net/forum/viewtopic.php?t=39344

    grüße Con@n



  • @Tomekx
    Warum erhöhst du k zweimal in der Schleife?? 😉

    Wegen der Stellen: Wie wärs mit Modulo (%)?



  • Na ich versuch es mal mit modulo, aber das iss glaube ich auch nicht das richtige, denn da habe ich auch mal als ausgabe eine 12 oder -70

    aber ich teste es nochmal und dann meld ich mich wieder!

    Danke TomekX 😉



  • rand() liefert doch eine Zahl zwischen 0 und RAND_MAX. Wenn du diese Zahl dann Modulo nimmst mit z. B. 10000, dann hast du doch deine 4 stellige Zahl.



  • #include<stdio.h>
    #include<math.h>
    
    int a;
    eins()
    {
    	do
    		{
    			a = rand()%10-1+1;
    		}
    		while (a<1);
    }
    
    zwei()
    {
    	do
    		{
    			a = rand()%100-10+1;
    		}
    		while (a<10);
    }
    
    drei()
    {
    	do
    		{
    			a = rand()%1000-100+1;
    		}
    		while (a<100);
    }
    
    vier()
    {
    	do
    	{
    		a = rand()%10000-1000+1;
    	}
    	while (a<1000);
    }
    
    fuenf()
    {
    	do
    		{
    			a = rand()%100000-10000+1;
    		}
    		while (a<10000);
    }
    
    sechs()
    {
    	do
    		{
    			a = rand()%1000000-100000+1;
    		}
    		while (a<100000);
    }
    main()
    {
    	int eingabe,stellen,i;
    	srand(time(NULL));
    	printf("\nAnzahl? : ");
    	scanf("%i",&eingabe);
    	printf("\nStellen? (1-6) : ");
    	scanf("%i",&stellen);
    
    	for (i=1;i<=eingabe;i++)
    	{
    		switch(stellen)
    		{
    			case 1: eins(); break;
    			case 2: zwei(); break;
    			case 3: drei(); break;
    			case 4: vier(); break;
    			case 5: fuenf();break;
    			case 6: sechs();break;
    			default:printf("\nNEIN!!!\n");break;
    		}
    		printf("%i\n",a);
     	}
    }
    


  • @Tomekx
    Schon mal was von Potenzieren gehört? Ich bin mir sicher, dass du das in der Schule durchgenommen hast.

    Wenn du dir deine Funktionen eins() bis sechs() mal genauer anschaust, dann fällt dir sicher was auf. Besonders nach dem %.



  • Ja klar du hast recht -- aber ich habe es dir veranschaulicht!! 😉

    Danke euch allen -- bis bald


Anmelden zum Antworten