KWALIFIKACJA INF2 + INF3 - STYCZEŃ 2012

PYTANIE NR 28.
Jakie wartości może przyjąć zmienna b po wykonaniu instrukcji b := random(7) + 3; w języku Pascal?
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
random(7) w Pascalu zwraca liczby całkowite od 0 do 6 (górna granica jest wyłączna). Dodanie 3 przesuwa cały zakres o 3 w górę: minimum to 0+3=3, a maksimum 6+3=9. Dlatego b może przyjąć wartości z przedziału [3;9].

Pełne wyjaśnienie:

W Pascalu funkcja random(n) (dla argumentu całkowitego) generuje liczbę całkowitą z zakresu od 0 do n-1. Kluczowe jest to, że podana wartość n stanowi górną granicę wyłączną, więc nie może się pojawić w wyniku.

Dla instrukcji b := random(7) + 3; najpierw analizujemy część random(7):

  • możliwe wyniki to: 0, 1, 2, 3, 4, 5, 6,
  • czyli minimum = 0, maksimum = 6.

Następnie dodanie stałej + 3 przesuwa każdy możliwy wynik o 3:

  • minimum: 0 + 3 = 3,
  • maksimum: 6 + 3 = 9,
  • zatem b może przyjąć: 3, 4, 5, 6, 7, 8, 9.

Poprawny zapis przedziału to [3;9].

Dlaczego pozostałe odpowiedzi są błędne? Przedział [0;6] ignoruje przesunięcie o 3, czyli odpowiadałby samej funkcji random(7) bez dodawania. Przedział [3;10] wynika z częstego błędu myślowego, że random(7) może zwrócić także 7 (czyli 0..7), co w Pascalu nie jest zgodne z definicją dla argumentu całkowitego. Przedział [1;7] nie pasuje ani do poprawnego zakresu random(7), ani do przesunięcia o 3.

W praktyce warto pamiętać, że do uzyskania zakresu a..b często stosuje się schemat random(b-a+1) + a. Funkcja randomize służy natomiast do zainicjowania generatora (żeby sekwencje nie powtarzały się między uruchomieniami), ale nie zmienia samej definicji zakresu wartości zwracanych przez random(n).

Dodatkowe pytania

Dodatkowe pytania (FAQ):

random(n) (dla całkowitego n) zwraca liczbę całkowitą z zakresu 0 do n-1.

To znaczy, że górna granica jest wyłączna, więc np. random(7) daje 0..6, a nie 0..7.

W standardowym zachowaniu Pascala parametr n oznacza liczbę możliwych wyników, a nie największą wartość.

Dlatego random(7) ma 7 wyników: 0,1,2,3,4,5,6. Wartość 7 byłaby ósmą możliwością, więc nie występuje.

Najpierw ustal zakres random(7): 0..6. Następnie dodanie + 3 przesuwa cały przedział o 3.

Minimum: 0+3=3, maksimum: 6+3=9, więc wynikowy zakres to [3;9].

Nie. randomize służy do zainicjowania generatora liczb pseudolosowych, aby kolejne uruchomienia programu nie dawały tej samej sekwencji.

Zakres dla random(n) pozostaje taki sam: 0..n-1, niezależnie od użycia randomize.

Stosuje się przesunięcie i dobranie szerokości zakresu: random(7) + 3.

Szerokość przedziału 3..9 to 7 wartości (3,4,5,6,7,8,9), więc losujesz 0..6 i dodajesz 3.

Typowy wzór to: random(b - a + 1) + a.

Wyrażenie b-a+1 daje liczbę możliwych wyników, a dodanie +a przesuwa zakres na właściwy start. To działa dla liczb całkowitych.

Najczęstsze pomyłki to: (1) założenie, że random(n) zwraca 0..n, (2) pominięcie przesunięcia po dodaniu stałej, (3) mylenie random z randomize.

Warto zawsze policzyć minimum i maksimum.

W większości popularnych implementacji (np. Turbo Pascal, Free Pascal, Delphi/Pascal) zasada dla argumentu całkowitego jest taka sama: wynik całkowity mieści się w 0..n-1.

Różnice mogą dotyczyć szczegółów generatora, ale nie tej podstawowej definicji zakresu.

Najprościej wypisać wyniki w pętli i obserwować minimum/maksimum, np. losować wiele razy i notować skrajne wartości.

Jeśli widzisz tylko 0..6, to potwierdza, że 7 nie występuje. Dla random(7)+3 zobaczysz 3..9.

Stosuj schemat: (1) ustal zakres random(n) jako 0..n-1, (2) wykonaj przesunięcie i skalowanie zgodnie z działaniami w wyrażeniu, (3) policz minimum i maksimum.

To ogranicza błędy intuicyjne i działa w większości zadań egzaminacyjnych.

info

Około 69% zdających odpowiada poprawnie na to pytanie. średnie

Specjaliści zwracają uwagę: "random(7) w Pascalu zwraca liczby całkowite od 0 do 6 (górna granica jest wyłączna)."

Źródła:

  • Free Pascal Reference Guide: "Random" (System unit) – opis zakresu 0..n-1, https://www.freepascal.org/docs-html/rtl/system/random.html (dostęp: 2026-02-27)
  • Free Pascal Wiki: "Random" i "Randomize" – omówienie działania i typowych zastosowań, https://wiki.freepascal.org/Random oraz https://wiki.freepascal.org/Randomize (dostęp: 2026-02-27)
  • Embarcadero Delphi DocWiki: "Random" (różne przeciążenia, w tym zwracanie liczb całkowitych z zakresu 0..Range-1), https://docwiki.embarcadero.com/RADStudio/en/Random (dostęp: 2026-02-27)

Materiały:

  • Dokumentacja Free Pascal: dział o funkcjach losowych (Random, Randomize)
  • Podręcznik/kompendium Turbo Pascala: opis Random i Randomize
  • Zadania treningowe: wyznaczanie zakresów wyrażeń z random(n) i działaniami arytmetycznymi

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego