KWALIFIKACJA INF2 + INF3 - CZERWIEC 2007

PYTANIE NR 45.
Algorytm przedstawiony na rysunku można zapisać w języku programowania C++ jako :
Ilustracja przedstawia schemat blokowy algorytmu, który jest używany w kontekście egzaminu zawodowego dla technika
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
W schemacie warunek to (a<>0) lub (a<0), więc w C++ zapisuje się go jako (a != 0) || (a < 0).
Gdy warunek jest prawdziwy (a ujemne lub dodatnie), wypisywane jest "a<>0", a tylko dla a=0 wykonywana jest gałąź else i drukowane "a=0".

Pełne wyjaśnienie:

Schemat blokowy ma w rombie warunek logiczny: (a<>0) lub (a<0). W zapisie algorytmicznym symbol <> oznacza nierówność, czyli "różne". W języku C++ odpowiednikiem jest operator !=. Słowo "lub" oznacza dysjunkcję logiczną, której odpowiednikiem w C++ jest operator ||.

Dlatego poprawny warunek w instrukcji if to: (a != 0) || (a < 0). Taki zapis oznacza, że blok po if wykona się, gdy spełniony jest przynajmniej jeden z warunków składowych:

  • a jest różne od zera (czyli a < 0 albo a > 0),
  • a jest mniejsze od zera (a < 0).

W praktyce dla każdej liczby ujemnej warunek będzie prawdziwy (oba człony), dla każdej dodatniej także będzie prawdziwy (pierwszy człon), a fałszywy będzie tylko dla a=0. To dokładnie odpowiada gałęziom schematu: przy "Tak" wypisywany jest tekst "a<>0", a przy "Nie" wypisywany jest "a=0".

Pozostałe propozycje są błędne z typowych powodów egzaminacyjnych:

  • Użycie && wymaga, by oba warunki były prawdziwe naraz, co zmienia sens (dla a>0 drugi człon a<0 jest fałszywy).
  • Zapisy Not i Or nie są standardową składnią operatorów logicznych w C++; poprawne są ! oraz ||.

Wskazówka do zadań tego typu: przepisz warunek "słowo po słowie" na operatory języka (np. <> → !=, "lub" → ||), a potem sprawdź trzy przypadki testowe: a<0, a=0, a>0.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Zapis a<>0 w pseudokodzie i schematach blokowych oznacza nierówność: "a jest różne od zera". W C++ nie używa się <> do nierówności, tylko operatora !=, czyli zapis to a != 0.
Słowo "lub" to dysjunkcja logiczna. W C++ zapisuje się ją operatorem ||. Warunek złożony ma postać: (warunek1) || (warunek2), a całość jest prawdziwa, gdy prawdziwy jest przynajmniej jeden składnik.
Operator && oznacza "i" (koniunkcję), więc wymaga spełnienia obu warunków jednocześnie. Dla liczby dodatniej a>0 warunek a<0 jest fałszywy, więc całość z && byłaby fałszywa. To zmienia logikę względem schematu z "lub".
W standardowej składni C++ nie zapisuje się operatorów logicznych słowami "Not" i "Or". Stosuje się symbole: ! (negacja), || (lub) i && (i). Jeśli w odpowiedzi występują "Not/Or", to zwykle jest to pułapka egzaminacyjna.
Romb w schemacie odpowiada warunkowi w if. Gdy warunek jest prawdziwy, wykonywana jest gałąź "Tak" (blok po if). Gdy jest fałszywy, wykonywana jest gałąź "Nie" (blok po else). To bezpośrednia translacja decyzji z diagramu na kod.
Najprościej podstawić 3 wartości testowe: a=-1, a=0, a=1. Dla -1 warunek jest prawdziwy, dla 0 fałszywy, dla 1 prawdziwy. Jeśli schemat ma wypisać "a=0" tylko dla zera, a w pozostałych przypadkach "a<>0", to taki test potwierdza poprawną logikę.
Dla a=0 mamy: (a != 0) jest fałszywe oraz (a < 0) jest fałszywe, więc całe (… || …) jest fałszywe. Wykona się więc gałąź else i zostanie wypisany tekst "a=0", zgodnie z gałęzią "Nie" na schemacie.
To ta sama idea (nierówność), ale inna notacja. W schematach blokowych i pseudokodzie często spotyka się <>. W C/C++ obowiązuje zapis !=. Na egzaminie trzeba umieć przetłumaczyć zapis z algorytmiki na właściwą składnię języka.
Nawiasy są zalecane, gdy łączysz kilka porównań operatorami logicznymi, bo poprawiają czytelność i zmniejszają ryzyko błędnej interpretacji. Typowy wzorzec to: if ((x != 0) || (x < 0)). Nawet jeśli priorytety operatorów na to pozwalają, nawiasy ułatwiają ocenę na egzaminie.
Najczęstsze pomyłki to: zamiana || na &&, użycie <> zamiast !=, stosowanie słów "Or/Not" zamiast operatorów, oraz brak sprawdzenia przypadków brzegowych (np. a=0). Pomaga test 3 wartości: ujemna, zero, dodatnia.
info

Statystycznie 57% uczniów zna prawidłową odpowiedź. średnie

Źródła:

  • cppreference.com: C++ logical operators (||, &&, !) — https://en.cppreference.com/w/cpp/language/operator_logical — accessed 2026-03-02
  • cppreference.com: C++ relational and equality operators (==, !=, &lt;, &gt;) — https://en.cppreference.com/w/cpp/language/operator_comparison — accessed 2026-03-02
  • cppreference.com: std::printf (nagłówek &lt;cstdio&gt;) — https://en.cppreference.com/w/cpp/io/c/fprintf — accessed 2026-03-02

Materiały:

  • Dokumentacja operatorów logicznych i porównań w C++ (np. materiały referencyjne)
  • Ćwiczenia: zamiana prostych schematów blokowych na if-else w C/C++
  • Zadania z tablicą prawdy dla || oraz &&

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego