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

Losowa liczba w C++, czemu 5-cyfrowa?

02 Lis 2008 12:00 2556 12
  • Użytkownik usunął konto  
  • Poziom 18  
    Funkcja rand() zwraca dużą liczbę całkowitą typu long. Jeżeli chcesz uzyskać liczbę z jakiegoś przedziału to musisz skorzystać z dzielenia modulo, np. jak chcesz liczbę od 0 do 9 to robisz

    int losowa = rand() % 10;

    jak chcesz od 1 do 100

    int losowa = 1 + rand() % 100;

    pozdrawiam
  • VIP Zasłużony dla elektroda
    Ocena niedostateczna za brak umiejętności korzystania z google :]

    Cytat:

    DESCRIPTION
    The rand() function returns a pseudo-random integer between 0 and RAND_MAX.


    Pozdrawiam,
    Dr.Vee
  • Użytkownik usunął konto  
  • VIP Zasłużony dla elektroda
    No tak... za mało wkleiłem. Już się poprawiam :]

    Cytat:
    DESCRIPTION
    The rand() function returns a pseudo-random integer between 0 and RAND_MAX.

    The srand() function sets its argument as the seed for a new sequence of pseudo-random integers to be
    returned by rand(). These sequences are repeatable by calling srand() with the same seed value.

    If no seed value is provided, the rand() function is automatically seeded with a value of 1.

    Czy to wszystko wyjaśnia?

    Pozdrawiam,
    Dr.Vee
  • Poziom 20  
    Oj napiszcie mu dopiero się uczy :)
    Masz gotowe:
    Code:
    srand (static_cast<unsigned int>(time(NULL)));

    "Wywołuje ona funkcję srand(), podając jej ziarno uzyskane poprzez time(). Ze względu na to, iż time() zwraca wartość należącą do specjalnego typu time_t, potrzebne jest rzutowanie jej na typ unsigned int.
    Wyjaśnienia wymaga jeszcze parametr funkcji time(). NULL to tak zwany wskaźnik zerowy, niereprezentujący żadnej przydatnej wartości. Używamy go tutaj, gdyż nie mamy nic konkretnego do przekazania dla funkcji, zaś ona sama niczego takiego od nas nie wymaga "
  • Użytkownik usunął konto  
  • Poziom 31  
    Nie czytasz tego, co ludzie Ci odpowiadają. Masz odpowiedź na swoje pytanie już w drugim poście tego tematu.
  • Użytkownik usunął konto  
  • Poziom 20  
    Wytłumacz mi parę rzeczy.
    Pierwszą podstawową po co korzystasz z printf()? Nie utrudniaj sobie życia jeśli już w c++ piszesz.
    Następnie po co w klamrach to wyświetlanie oraz po co tyle tych bibliotek.
    Poprawiam ci tą wersję myślę na to co oczekujesz:
    Code:
    #include <iostream>
    
    #include <conio.h>
    using namespace std ;
    int main()
    {
        const int ZAKRES=50; // losowanie sposrod 0-x
       
        srand (static_cast<unsigned int>(time(NULL)));

        cout<<"Losowo wybrana liczba to "<<rand()%ZAKRES<<endl;
        cout<<"Losowo wybrana liczba to "<<rand()%ZAKRES<<endl;
        cout<<"Losowo wybrana liczba to "<<rand()%ZAKRES<<endl;
       getch();
     return 0;
    }
  • Użytkownik usunął konto  
  • VIP Zasłużony dla elektroda
    SapyDM napisał:
    mam jeszcze taki problem: Jeśli komputer wylosuje liczbę 0 chciałbym by zmieniło ją na jeden. Próbowałem na różne sposoby z funkcją IF lecz nie udało mi się.


    No tak, teraz już wiadomo dlaczego poprzednie podpowiedzi nic nie dały... :D

    Pozdrawiam,
    Dr.Vee
  • Poziom 20  
    No to jeśli chcesz z 3 wyświetleniami to trochę trzeba bardziej skomplikować (jeśli chodzi o najkrótszy możliwy kod a tak programista powinien pisać) więc oczywiście zastosujemy funkcje w tym celu:
    Btw to wyświetlanie też bym skrócił
    Code:
    #include <iostream>
    
    #include <conio.h>
    using namespace std;

    const int ZAKRES=100, ILOSC_WYSWIETLEN=3; // losowanie sposrod 0-x, ile razy ma wyswietlic

    int random()
    {
    int liczba=rand()%ZAKRES;
    if(liczba==0)
    return 1;
    return liczba;
    }

    int main()
    {   
        srand (static_cast<unsigned int>(time(NULL)));
     
        for(int i=0; i<ILOSC_WYSWIETLEN; i++)
        cout<<"Losowo wybrana liczba to "<<random()<<endl;
       getch();
     return 0;
    }