Zufallszahl zufälliger Länge



  • Hallo,
    wie lässt sich eine Zufallzahl deren Länge von 1 bis 10 Ziffern variren soll realisieren? Programmiersprache C

    Mein Ansatz war folgender:

    Code:

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

    main()
    {
    int i, laenge,zufall;
    srand(time(NULL));
    for (i=0; i<10 ;i++)
    { laenge= (rand()%1000+4);
    zufall= (rand()%laenge);
    printf("%d", &laenge);

    }
    getchar();
    }

    Mein Problem ist das immer die selbe Zahl der selben Länge wiedergegeben wird.

    Gruß Horst


  • Mod

    Äham:

    printf("%d", &laenge);
    

    Warnt dich der Compiler da nicht? Falls nein, stell ihn mal strenger ein. Und um dein Problem zu lösen, guck dir nochmal printf an.

    Aber auch dann passt dein Ansatz so wie ich das sehe nicht, aber das bekommst du mathematisch sicherlich noch selber gelöst. Falls nicht, dann frag nochmal nach. Und ganz dumme Frage: Du meinst schon, dass die Auftrittswahrscheinlichkeit von Zahlen mit 1 Ziffer genau so groß sein soll wie für Zahlen mit 10 Ziffern, oder?



  • Wie speicherst du eine Zahl mit 10 Ziffern ab?



  • LOL Crosspost: Zufallszahl zufälliger Länge (gelöscht)



  • Was bezweckst du mit

    laenge= (rand()%1000+4);
    zufall= (rand()%laenge);
    

    laenge ist eine Zahl zwischen 4 und 1003
    zufall ist eine Zahl zwischen 3 und 1002

    Meinst du durch zweimal rand() wird deine Zahl zufälliger?



  • Nein eigl soll das Programm Zufallszahlen von 1-9 mit einer zufälligen Ziffernzahl von 1-10 erzeugen.Sorry hab den Code hoch geladen in dem ich durch probieren versucht habe es an laufen zu bekommen.

    Gruß Horst


  • Mod

    DirkB schrieb:

    Meinst du durch zweimal rand() wird deine Zahl zufälliger?

    Nein, ich vermute er möchte zuerst ziehen wieviele Stellen die Zahl haben soll und dann zieht er eine solche Zahl. Er hat's nur mathematisch völlig falsch. Aber bevor ich dazu konkreter werde, hätte ich gerne etwas Feedback, insbesondere über die gewünschte Verteilung. Vielleicht wollte der TE nur den Fehler mit dem printf behoben haben und dann selber weiter tüfteln.

    Ganz anderes Problem: RAND_MAX wird in aller Regel viel kleiner als 10^10 sein. Vielleicht führt dies den Threadersteller ja zu der (hoffentlich besseren) Lösung die ich im Hinterkopf habe.



  • Wenn sizeof(int) = 4 ist, sollte RAND_MAX = 2147483647 sein.

    Sind 10 Ziffern. 🙂

    Nicht portabel, evtl. reicht es für den Anfang.



  • Bei mir ist RAND_MAX 32767. sizeof(int) ist bei mir auch 4.



  • Was soll überhaupt das ganze Zeug von wegen zufälliger Länge? Wenn ich eine Zahl von 1 bis 9999999999 ausgeben würde, dann hätte die doch sowieso schon eine "zufällige" Länge:

    Beispiel:
    Erster Funktionsaufruf: 542987 (sechs Ziffern)
    Zweiter Funktionsaufruf: 72 (zwei Ziffern)
    Dritter Funktionsaufruf: 32977438 (acht Ziffern)
    etc.


  • Mod

    WTFFF schrieb:

    Was soll überhaupt das ganze Zeug von wegen zufälliger Länge? Wenn ich eine Zahl von 1 bis 9999999999 ausgeben würde, dann hätte die doch sowieso schon eine "zufällige" Länge:

    Beispiel:
    Erster Funktionsaufruf: 542987 (sechs Ziffern)
    Zweiter Funktionsaufruf: 72 (zwei Ziffern)
    Dritter Funktionsaufruf: 32977438 (acht Ziffern)
    etc.

    Aber es gibt ca. 9 mal so viele Zahlen mit n Ziffern wie mit n-1 Ziffern. Vermutlich (oder eher hoffentlich, denn wenn du recht hast, dann wäre die Frage nämlich wirklich ziemlich dumm) will der Threadersteller, dass alle n gleichwahrscheinlich sind. Bevor er sich aber dazu nicht äußert, ist mir die Zeit zu schade, auf gut Glück ein Beispielprogramm für diesen Fall zu schreiben.


Anmelden zum Antworten