• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Losowanie liczb z przedziału

VPS Starter Arubacloud
0 głosów
300 wizyt
pytanie zadane 2 października 2022 w C i C++ przez Mateusz12345 Nowicjusz (170 p.)
rand()%10+2

Prawidłowa odpowiedź będzie 2..11( odpowiedź z quizu)

Czemu nie np. 2..10

Dlaczego akurat z przedziału 2..11? Będę wdzięczny jak mi ktoś pomoże, oglądałem nagranie, ale nie kumam.

1 odpowiedź

+5 głosów
odpowiedź 2 października 2022 przez Apled Dyskutant (9,520 p.)
wybrane 3 października 2022 przez Arkadiusz Waluk
 
Najlepsza

Dlatego, że rand() zaczyna od 0, a podając wartość po %, wskazujesz na górny przedział jako n - 1, więc masz przedział [0; n) - w tym przypadku od 0 do 9, dalej podając + 2 przesuwasz przedział obustronnie o 2 - więc otrzymujesz przedział [2; 11).

komentarz 2 października 2022 przez Mateusz12345 Nowicjusz (170 p.)

@Apled, 1 rand() % 100;         // v1 in the range 0 to 99

2 = rand() % 100 + 1;     // v2 in the range 1 to 100

3 = rand() % 30 + 1985;   // v3 in the range 1985-2014 

Wyjaśnisz mi tutaj dlaczego tak jest np. czemu od 0 do 99, czemu od 1 do 100 a nie np do 101 i w 3 czemu nie do 2015 

1
komentarz 2 października 2022 przez Apled Dyskutant (9,520 p.)

Dlatego, że górna granica jest równa n - 1, a zaczyna zawsze od 0, gdzie 0 jest wartością samą w sobie, więc np. rand()%3 oznaczałby: trzy pierwsze wartości od zera włącznie. Zatem masz 0, 1, 2 - trzy wartości. Tak samo dla 100: n=100, więc n - 1 = 99, zatem wartości są od 0 do 99.

A wartość którą podajesz po znaki procenta wpływa na wartość startową, czyli 0. Dodawanie przesuwa przedział w prawo (czyli dalej na +), a odejmowanie w lewo (na minus), o podana wartość. Zatem rand()%5 + 5 dalej ci przedzial od 0 do 4, a następnie dodaje do obu wartości 5, więc masz przedział od 5 do 9 (przykład to tylko zobrazowanie). 

1
komentarz 2 października 2022 przez Mateusz12345 Nowicjusz (170 p.)

Dzięki naprawdę mi pomogłeś yes

Podobne pytania

0 głosów
4 odpowiedzi 2,514 wizyt
pytanie zadane 16 lutego 2016 w C i C++ przez Bobek Nowicjusz (150 p.)
0 głosów
1 odpowiedź 2,251 wizyt
0 głosów
4 odpowiedzi 10,377 wizyt
pytanie zadane 8 listopada 2015 w C i C++ przez Kestrel Początkujący (300 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...