KWALIFIKACJA INF2 + INF3 - STYCZEŃ 2009

PYTANIE NR 2.
Ile gwiazdek wydrukuje się po użyciu następującej sekwencji instrukcji w języku Turbo Pascal


k:=25;
for i:=1 to (k mod 7) do write ('*');



A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Wyrażenie k mod 7 to reszta z dzielenia 25 przez 7. Ponieważ 7·3=21, reszta wynosi 4. Pętla for i:=1 to 4 wykona się 4 razy, a każdorazowo write('*') wypisze jedną gwiazdkę, więc łącznie pojawią się 4 gwiazdki.

Pełne wyjaśnienie:

W kodzie najpierw ustawiana jest wartość zmiennej k na 25. Następnie wykonywana jest pętla:

for i:=1 to (k mod 7) do write('*');

Kluczowe są dwie rzeczy:

  • Operator mod zwraca resztę z dzielenia całkowitego. Obliczamy więc 25 mod 7.
  • Pętla for w Pascalu wykona się dla kolejnych wartości licznika od wartości początkowej do końcowej (włącznie), o ile granica końcowa jest nie mniejsza od początkowej.

Krok 1: obliczenie 25 mod 7
25 : 7 = 3 i reszta, bo 7·3=21, a 25−21=4. Zatem k mod 7 = 4.

Krok 2: liczba iteracji pętli
Pętla ma postać for i:=1 to 4, więc licznik przyjmie wartości 1, 2, 3, 4. To oznacza 4 iteracje.

Krok 3: efekt instrukcji write
Instrukcja write('*') wypisuje jeden znak bez automatycznego przejścia do nowej linii (w odróżnieniu od typowego writeln). Skoro pętla wykonuje się 4 razy, to wypisze 4 znaki '*'.

Dlaczego pozostałe odpowiedzi są błędne?

  • "1" wynika zwykle z błędnego założenia, że pętla wykona się tylko raz albo z pomylenia działania pętli z pojedynczym wywołaniem write.
  • "7" to typowy skutek mylenia mod z wartością dzielnika lub myślenia "mod 7" jako "związane z 7". Operator nie zwraca 7, tylko resztę.
  • "25" to efekt zakotwiczenia na wartości k i błędnego przekonania, że pętla wykona się k razy (tu granicą nie jest k, tylko k mod 7).

Wskazówka egzaminacyjna: zawsze najpierw policz wyrażenie w granicy pętli (tu: k mod 7), dopiero potem ustal liczbę powtórzeń i wynik wypisywania.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
mod oznacza resztę z dzielenia całkowitego. Dla a mod b wynikiem jest liczba r, taka że a = b·q + r i 0 ≤ r < b. Przykład: 25 mod 7 = 4, bo 7·3=21 i zostaje 4.
Znajdź największą wielokrotność 7 nieprzekraczającą 25: 7·3=21. Odejmij: 25−21=4. To właśnie reszta, czyli 25 mod 7 = 4. Reszta zawsze jest mniejsza od dzielnika (tu mniejsza od 7).
Pętla for i:=1 to N wykona ciało pętli dla kolejnych wartości i: 1, 2, ..., N (włącznie). Liczba iteracji wynosi N, jeśli N ≥ 1. Gdy N < 1, pętla nie wykona się ani razu.
Granica pętli to (k mod 7). Dla k=25 mamy 25 mod 7 = 4, więc pętla to for i:=1 to 4, czyli 4 iteracje. W każdej iteracji jest write('*'), które wypisuje jedną gwiazdkę, razem 4.
Nie. write wypisuje dane na wyjście bez automatycznego przejścia do nowej linii. Zwykle dopiero writeln kończy linię (dodaje znak końca linii). W tym zadaniu ma to znaczenie dla wyglądu, ale nie dla liczby wypisanych '*'.
Gdy wartość końcowa jest mniejsza niż początkowa. Dla for i:=1 to N pętla nie ruszy, jeśli N < 1. To często pojawia się w zadaniach z mod, bo gdy reszta wynosi 0, dostajemy zakres 1..0.
Wtedy pętla miałaby postać for i:=1 to 0, czyli granica końcowa jest mniejsza od początkowej. Skutek: pętla nie wykona się ani razu i nie zostanie wypisany żaden znak. To typowy "haczyk" w zadaniach.
Najczęściej: (1) mylenie mod z dzieleniem lub zaokrąglaniem, (2) branie dzielnika (tu 7) jako wyniku, (3) zakładanie, że pętla wykona się k razy, a nie k mod 7, (4) pomijanie przypadku reszty 0.
Tak, bo sprawdzają podstawy myślenia algorytmicznego: liczbę iteracji, operacje całkowite i interpretację kodu. Nawet jeśli używany język jest historyczny, sama umiejętność analizy pętli i operatora reszty jest uniwersalna i przydaje się także w innych językach.
Stosuj schemat: 1) oblicz wyrażenia w granicach pętli, 2) policz liczbę iteracji (czy zakres jest rosnący i czy jest włącznie), 3) sprawdź, co robi ciało pętli w jednej iteracji (ile znaków/operacji).
info

To pytanie poprawnie rozwiązuje 59% zdających egzamin. średnie

Według specjalistów z branży: "Wyrażenie k mod 7 to reszta z dzielenia 25 przez 7."

Źródła:

  • Borland Turbo Pascal 7.0, "Turbo Pascal Language Guide" (opis pętli for, operatorów arytmetycznych oraz procedur write/writeln)
  • Niklaus Wirth, "Pascal User Manual and Report" (podstawowe definicje języka Pascal, operatory i instrukcje sterujące)
  • ISO/IEC 10206:1990, Extended Pascal (definicje składni i semantyki konstrukcji języka, w tym pętli i działań arytmetycznych)

Materiały:

  • Podręcznik do podstaw programowania strukturalnego (pętle, instrukcje wyjścia, typy całkowite)
  • Dokumentacja składni Pascala (pętla for, write/writeln, operatory arytmetyczne)
  • Zbiór zadań z programowania: działania modulo i pętle

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego