Witam
czy istnieje możliwość losowania liczb ujemnych np z przedziału <-100 ; 100>.
I czy dobrze rozumiem zasadę losowania,że daje 1+rand()%100 to wylosuje mi liczbe z przedzialu od <1;99>?
hawx1920 napisał(a):
czy istnieje możliwość losowania liczb ujemnych np z przedziału <-100 ; 100>.
Istnieje. Użyj % 201
, co da liczbę z przedziału <0;200>
, następnie odejmij 100
i dostaniesz <-100;100>
.
I czy dobrze rozumiem zasadę losowania,że daje 1+rand()%100 to wylosuje mi liczbe z przedzialu od <1;99>?
Nie – rand() % 100
da liczbę z przedziału <0;99>
, więc jak dodasz 1
to otrzymasz <1;100>
.
czyli np dać -100+rand()%100 ?i dostane wtedy przedział <-100;100>?
Nie, uzyskasz liczbę z przedziału <-100, -1>
.
Rozpisz sobie na kartce maksymalne wartości tego Twojego wyrażenia, a zrozumiesz dlaczego.
Przeczytaj jeszcze raz to co napisałem w swoim poprzednim poście.
-
(rand() % 99) + 1
– otrzymasz liczbę z przedziału<1;99>
-
(rand() % 201) - 100
– dostaniesz liczbę z przedziału<-100;100>
a=((rand()%200)-100); ?
Nadal nie trybisz… % 200
da liczbę z przedziału <0;199>
, jak odejmiesz 100
to otrzymasz <-100;99>
.
Zawsze można sobie napisać funkcję losującą liczbę z zadanego zakresu i używać jej ile się chce.
#include <stdlib.h>
#include <time.h>
int randFrom(int number)
{
return rand() % ++number;
}
int randFromRange(int min, int max)
{
return randFrom(abs(min - max)) + (min < max ? min : max);
}
Teraz wystarczy zainicjować generator:
srand(time(NULL));
i skorzystać z funkcji losującej:
printf("number: %d\n", randFromRange(-100, 100));
Funkcja wylosuje liczbę z zakresu <-100;100>
– żadnego babrania się z dodawaniem, odejmowaniem, indeksami, braknie 1
czy nie braknie itd. Aplikacja testowa tutaj – http://tpcg.io/A4wOKc .