Losowanie liczb z zadanych przedziałów

0

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>?

2
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>.

0

czyli np dać -100+rand()%100 ?i dostane wtedy przedział <-100;100>?

0

Nie, uzyskasz liczbę z przedziału <-100, -1>.
Rozpisz sobie na kartce maksymalne wartości tego Twojego wyrażenia, a zrozumiesz dlaczego.

2

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>
0

a=((rand()%200)-100); ?

2

Nadal nie trybisz… % 200 da liczbę z przedziału <0;199>, jak odejmiesz 100 to otrzymasz <-100;99>.

3

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 .

1 użytkowników online, w tym zalogowanych: 0, gości: 1