Wszystko zostało napisane powyżej. Mylisz się. Nie wiesz jak działa operator modulo? Jakaś wartość nieujemna modulo N daje wartości z przedziału 0 … N-1. Jeśli dodasz do takiej wartości jakąś stałą C to przedział zmieni się na 0 + C … N - 1 + C.
Ponadto, jeśli masz tablicę M-elementową, to poprawne indeksy są z zakresu 0 … M - 1.
Nie jasne jest dla mnie dlaczego przy tablicach nie może być zakres 13 jakim cudem może wykroczyć po za zakres skoro zawsze jest 0+1 … (max-1) +1 to daje zawsze max.
Pomyśl i przeanalizuj opis kolegów odnośnie działania operatora modulo (%).
Przemyśl operacje na tablicach i ich indeksowanie.
Zastanów się z jakiego zakresu potrzebne są Ci wartości?
Po przerobieniu ze zrozumieniem tych kroków powinieneś bez problemu ogarnąć wiedzę i zdobyć umiejętności na rozwiązanie swojego problemu. Takie strzelanie na oślep jest mniej skuteczne niż zrozumienie.
Dodam jeszcze, że ogólnie wybieranie przedziałów można zapisać w następujący (ogólny sposób) dla liczb całkowitych.
Powiedzmy, że chcemy przedział np. <3;11> (drugi kraniec wchodzi do przedziału) to:
obliczamy szerokość przedziału s = b-a+1 (czyli w tym przykładzie s = 11-3+1 = 9), bo 3,4,5,6,7,8,9,10,11 w sumie 9 liczb.
oczekiwana minimalna wartość to a (w tym przykładzie 3) więc cały wynik losowania modulo trzeba przesunąć o tą wartość.
jaka powinna być wartość modulo? Ano dokładnie taka ile wynosi szerokość przedziału obliczona w kroku 1, czyli s (dla tego przykładu s=9). Modulo zwróci nam wartości od 0 do s-1 (czyli dla tego przykładu od 0 do 8 ). Po przesunięciu o wartość minimalną a (czyli 3 dla tego przykładu) otrzymamy dokładnie to o co nam chodziło:
(dla tego przykładu <3; 9-1+3> => <3;11>)
Całkowity zapis wyglądałby tak:
rand() % s + a
czyli dla tego przykładu:
rand()%9 + 3
Sądzę, że jest to jedno z najjaśniejszych wyjaśnień (teoria + przykład) i że pomoże to innym adeptom losowania wartości.
Dzień dobry. Czy dobrze rozumiem z waszego wyjaśnienia, że jeżeli np. chcemy otrzymać losową liczbę z przedziału <122; 367> to trzeba wpisać funkcję rand tak: rand() % 246 + 122;
ponieważ rand() % s + a // s = 367 - 122 + 1 = 246; a = 122
Mam nadzieję, że dobrze rozumiem. Dziękuję wcześniej za odpowiedź!