Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Pseudolosowe liczby z zakresu + losowanie za każdym razem innej liczby


Rekomendowane odpowiedzi

Opublikowano

Cześć,

postanowiłem się nauczyć podstaw programowania, i myślę, że idzie mi nie najgorzej, lecz nie potrafię zrozumieć dwóch rzeczy, a mianowicie

a) losowania pseudolosowych liczb z danego zakresu

B) losowania za każdym razem innej liczby w pętli

 

Tutaj kod

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int losowanie()
{
	srand( time( NULL ) );
	int los;
	los = ((rand() % 60) + 10);
	return los;
}
int main()
{

	cout <<"Wylosuje dziesiec liczb "<<endl;
	int i = 1;
    do
    {
    	
    	cout <<"Losuj liczbe numer " << i <<" ta liczba to " <<losowanie()<<endl;
    	i++;
    }while( i != 11);

    return 0;
}

I pytania. Dlaczego za każdym razem wylosowana liczba jest identyczna? Jak to zmienić?

W jaki sposób mam ustawić zakres losowania liczb od 50 do 60, bo właśnie z tym mam problem :/

Z góry dzięki za odpowiedzi.

Kod oczywiście w C++.

Bot do gry NosTale:


[bOT] NosBota 1.3v

Opublikowano

Losuje za każdym razem takie same liczby, bo

srand( time( NULL ) );

jest wywoływane w na tyle małych odstępach czasu, ze time(NULL) zwraca identyczne wartości.

Liczby pseudolosowe są generowane z ziarna, które w twoim przypadku jest tym co zwraca time(NULL).

Przeważnie nie ma sensu wywoływać srand() więcej niż raz (np na początku programu).

 

Żeby losować liczby z jakiegoś zakresu musisz najpierw określić ile wartości może być w tym zakresie. W twoim przypadku jest to 60-50+1 czyli 11. Losujesz więc liczbę z zakresu <0,10> (jest ich 11) i dodajesz liczbę będącą początkiem zakresu.

Czyli

rand() % 11 + 50

Możesz się zainteresować biblioteką random http://www.cplusplus.com/reference/random/

Opublikowano

Ok, jeden problem się wyjaśnił. Ten drugi nie do końca ( przynajmniej dla mnie ). Skoro ta funkcja jest tak skomplikowana, to dałoby się w łatwy sposób napisać program, który losowałby liczby z zakresu podanego przez użytkownika programu?

Bot do gry NosTale:


[bOT] NosBota 1.3v

Opublikowano
Opublikowano


#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;


int a;
int b;
int losowanie()
{


int los;
los = (rand() %( b- a + 1 ) + a);
return los;
}
int main()
{
srand( time( NULL ) );
cout <<"Wpisz liczbe poczatkowa: "<<endl;
cin>>a;
cout << "Wpisz liczbe koncowa: " <<endl;
cin>>b;
int i = 1;
    do
    {


    cout <<"Losuj liczbe numer " << i <<" ta liczba to " <<losowanie()<<endl;
    i++;


    }while( i != 11);


    return 0;
}

Opublikowano

Chodzi mi bardziej o to, że program zapytałby "Jakie liczby mam wylosować od A do B " chodzi o coś takiego

int a,b; cin >>a; cin >>b; rand() % a + b
i zalozmy że użytkownik poda przykładowo 50, 60 odpowiednio dla zmiennej a i b, to w reczywistości będzie to wyglądało tak:
rand() % 50 + 60
a nie
rand() % 11 + 50

@Edit ok, nie widziałem podanego wyżej posta :P ( zapomniałem o F5 strony )

Dzięki :)

Bot do gry NosTale:


[bOT] NosBota 1.3v

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...