Random



  • Hallo Leute!

    Wie schaffe ich es, dass alle meine Randomzahlen positiv sind??

    Vielen Dank



  • Wenn du rand() aus stdlib.h meinst: Die sind immer positiv.

    The rand function computes a sequence of pseudo-random integers in the range 0 to RAND_MAX.



  • hmm das dachte ich mir auch nur irgendwie krieg ich negative Zahlen



  • bzw ne Mischung



  • Zeig doch mal deinen Code.



  • K ich werd ihn gleich posten, will mich nur noch mal versichern, dass ich ja nix übersehen hab



  • Ok, das Problem tritt erst auf wenn ich ein Array-Element mit der Random-Zahl multipliziere (Array-Element ist aber 5, sprich positiv)



  • Zeig doch einfach mal dein code



  • Die Kommentare sind für mich, die braucht ihr nicht zu beachten.

    #include <stdio.h>	
    #include <stdlib.h>
    #include <conio.h>
    #include <time.h>
    #include <string.h>
    
    int main ()
    
    {
    
    int  i=-1,v=0, y=-3, x=0,z=1, int_array[60],int_array_2[60], Zähler[10];
    
    char array[30],array_2[30], array_3[70];
    
    memset (array,0,sizeof(array));
    memset (array_2,0,sizeof(array_2));
    memset (array_3,0,sizeof(array_3));
    memset (int_array,0,sizeof(int_array));
    memset (int_array_2,0,sizeof(int_array_2));
    
    scanf ("%s", &array);
    
    //Sicherung:Phase1->Substitution
    
    x=y;
    for (;z<=3;z++,x++)
    
    {
    y=x;
               do
    
               {
                    i++;  	          //1.Routine =0
    
                    y=y+3;          //1.Routine =0
                   array_2[i]=array[y];
    
               } 
    
              while  (array[y+3]!=0);
    
    }
    
    i=0;
    y=0;
    
    //Sicherung2: ASCII-Codierung
    
    atoi(array_2);
    
    int k=0;
                                                                           //Array_2-Elemente werden in int-array gespeichert
                      for (;k<=strlen(array_2);i++,k++) 
    
                           {
                             int_array[i]=array_2[i]; //Ab diesem Zetpunkt wird array_2 nicht mehr benötigt!    
                           }
    
    i=0;
    //Test
                    /*   for (;i<strlen(array_2);i++) //Vegriss nicht:strlen(array_2) ist uach gleicheitig elementanzahl von int-array.
                           {
                             printf ("%i\n", int_array[i]);
                            }
                    */
    //Time-Struct wird gefüllt
    
    time_t Zeit;
    struct tm *a;
    Zeit= time(&Zeit);
    a=localtime(&Zeit);
    
    i=0;
    y=0;
    
                           for (;i<=10;i++,y=y+2) //Leerräume werden geschaffen
    
                           {
                                int_array_2[y]=int_array[i];
                           };
    
    i=0;
    y=0;
    
    //Test
    for (;i<20;i++) //Vegriss nicht:strlen(array_2) ist uach gleicheitig elementanzahl von int-array.
    {
    printf ("%i\n", int_array_2[i]);
    
    }
    
    i=0;
    y=0;
    
    int array_4[]={a->tm_min,a->tm_hour,a->tm_mday,a->tm_mon,a->tm_year};
    
    //Test
    
    i=0;
    
    int Zufall_1;
    int Zufall_2;
    
    a=localtime(&Zeit);
    
    srand(a->tm_sec); // Hier beachten, dass immer die selben rands kommen Lösungsansatz: Min+Sek oder so
    
    Zufall_1=rand();
    Zufall_2=rand();
    
    int test=0;
    int test_2=0;
    printf("%i\n", array_4[2]);
    printf("%i\n", Zufall_1);
    test_2=array_4[2]*(-Zufall_1);
    test=array_4[2]*Zufall_1;
    printf("%i\n", test);
    printf("%i\n", test_2);
    
    i=0;
    
    for (;i<=20;i=i+2)
    {
    int_array_2[i]=int_array_2[i]*Zufall_1;   //Elemente werden mit Zufallszahl multipliziert
    }
    
    i=0;
    
    i=0;
    
    Zähler[v]=i;
    
    i=0;
    y=0;
    
    for (;i<=Zähler[v];i++)
    {
    array_4[i]=array_4[i]*Zufall_2;
    }
    
    i=1;
    y=0;
    
    for (;i<=Zähler[v];i=i+2,y++)
    {
    int_array_2[i]=array_4[y];
    }
    
    //Das Coding nach diesem Comment ist zurzeit noch egal
    
    v++;
    Zähler[v]=i;
    
    int Zufall_3=0;
    Zufall_3=rand(); 
    
        if (array_3[i+1]==0)
             array_3[i+1]=Zufall_1;
    
                  else
                             array_3[i+2]=Zufall_1*Zufall_3;
    
    i=-1;
    
    do
    
    {
    i++;
    }
    
    while (array[i+1]!=0);
    
    array_3[i+1]=Zufall_2*Zufall_3;
    
    //Überprüfen ob Zufallszahl-Mechanismus an die richtigen Stellen gesetzt wird
    
    i=-1;
    y=0;
    
    int Checksumme=0;
    
    do
    {
    i++;
    Checksumme=Checksumme+array[i];
    }
    while(array_3[i+1]!=0);
    
    //Vielleicht solltest du doch nicht zusammenlegen (bei Datums-Sicherung) Fülle die restlichen leeren Stellen einfach mit Zufallszahlen
    
    return 0; }
    


  • Als erstes erstellst du erstmal ne neue Version von deinem Programm, wo du dich auf das Problem beschränkst. Keiner hier hat Lust, ellenlange Quelltexte durchzuforsten, bei dem vielleicht 5 Zeilen wichtig sind.



  • MO89 schrieb:

    Ok, das Problem tritt erst auf wenn ich ein Array-Element mit der Random-Zahl multipliziere (Array-Element ist aber 5, sprich positiv)

    Ich hab jetzt deinen Code (der grauenhaft formatiert ist) nicht angeschaut. Aber bei einer Multiplikation zweier Zahlen kann es zum Integer-Overflow kommen, genau dann wenn das Ergrbnis der Multiplikation größer wäre, als dass es in einen einfachen Integer passen würde. Ist das evtl. bei dir der Fall?



  • Ich glaub das ist es VIELEN DANK!



  • hmmm leider doch nicht, das Problen erstreckt sich von Zeile 134 bis 148.

    Wäre echt toll wenn mir da jmd helfen könnte.
    Inzwischen hab ich da die Typen ausgetauscht nnur nützt das nichts.



  • Dann mach mal das was feigling geschrieben hat. Dann können wir dir entsprechend helfen.



  • Ok ich glaub die Randoms sind einfach zu groß, kann mir jmd erklären wie ich die einschränke?

    thx



  • Mal die FAQ lesen? 😉

    Man sollte dabei erwähnen, dass die vorgeschlagene Variante nicht unbedingt perfekt für "möglichst guten Zufall" ist. Für dich zu diesem Zeitpunkt aber vollkommen ausreichend.


Anmelden zum Antworten