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);
}}
-
-
@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