Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Liczby losowe w C++: jak to zrobić?

23 Cze 2006 19:52 3233 7
  • Poziom 9  
    Mam problem z liczbami losowymi w c++. Mam pętlę, ktora powinna losowo dodawac po 1 do jednej z trzech danych liczb <mam uzyskac trzy losowe liczby, ktorych suma będzie równa 10>

    Code:



      for(i=0;i<10;i++)
         {
               srand( time(0) );
               a=rand()%3;
             switch(a)
            {
           case 0 : a++; break;
           case 1 : b++; break;
           case 2 : c++; break;
            }
         }



    za każdym razem zwiększ się tylko jedna z tych liczb (o 10). ja sobie z tym poradzic??

    Dodano po 2 [minuty]:

    poprawka do kodu w poprzednim poście: powinno byc:

    n=rand()%3 zamiast a=rand()%3
    oraz
    switch(n) zamiast switch(a)
  • Poziom 13  
    Za wiele z c++ nie pamiętam ale używałem kiedyś takich instrukcji:

    {
    Randomize();
    int random(int num);
    }

    komenda losuje liczby w zakresie od 0 do num-1
  • Poziom 29  
    rand() zwraca liczbę z przedziału [0..1>
    (int)(rand()*3) da liczbę całkowitą [0..2]
    -- Poprawka -------------------------------------------------
    Tu chyba napisałem źle, rand() zadeklarowane w "stdio.h" zwraca liczbę z przedizłu [0..0x7FFF].
  • Poziom 34  
    Piszesz:
    Mam problem z liczbami losowymi w c++. Mam pętlę, ktora powinna losowo dodawac po 1 do jednej z trzech danych liczb <mam uzyskac trzy losowe liczby, ktorych suma będzie równa 10>

    Prawdę mówiąc nic z tego nie rozumiem.Suma ma być większa od 10? Co to znaczy "jednej z trzech danych liczb? Są dane czy je losujesz?Napisz dokładnie o co tu chodzi bo wydaje mi się że tylko Ty to rozumiesz.
    Co to znaczy losowo dodawać po 1?
  • Poziom 9  
    generalnie chodzi o to że za każdym przebiegiem pętli dostaję tą samą liczbę a ja chcę różne<w końcu mają byc losowe>
  • Poziom 34  
    Musisz zastosować srand().Oto przykład:
    #include <iostream>
    #include <time.h>
    #include <conio.h>
    using namespace std;
    main()
    {
    int liczba;
    int max=100;
    time_t t;
    srand((unsigned) time(&t));
    {liczba=rand() % max;
    }
    cout<<"liczba "<<liczba;

    getch();
    }
  • Poziom 9  
    wyskakują mi takie błędy podczas kompilowania:
    /linia 10/
    implicit declaration of function `int srand(...)'
    /linia 11/
    implicit declaration of function `int rand(...)'
    /linia15/
    implicit declaration of function `int getchar(...)'

    Dodano po 2 [minuty]:

    Jeszcze jedno pytanie:

    srand((unsigned) time(&t));

    Czy ta funkcja bierze aktualny czas jako poprzednią liczbę losową czy to nie tak działa?(mogłem coś pomylic)
  • Pomocny post
    Poziom 29  
    Code:
    for (i= 0; i < 10; i++) { 
    
            //srand(time(0));               <== wywal to!!!!!!
            a=rand()%3;
            switch(a)  {
                   case 0 : a++; break;   <==  ale w zmiennej „a” miałeś wynik losowania!!!!!!
                   case 1 : b++; break;
                   case 2 : c++; break;
            }
    }
    Funkcji „srand()” użyj tylko raz!!!!. Np.: srand(clock()); gdzieś na początku programu.
    Popraw sprawę ze zmienną „a”.
    Jeżeli zawołasz srand() z parametrem będącym stałą (lub nie zawołasz go wcale), przy każdym uruchomieniu programu uzyskasz ten sam ciąg generowany przez rand(). To może być korzystne np. przy testowaniu.
    Zawołanie srand(&time), spowoduje, że z każdym uruchomieniem uzyskasz inny ciąg.
    Dla rand() dodaj #include <stdlib.h>
    Dla time() dodaj #include <time.h>