Klasa 2 · rozdział 1
Pojęcia, algorytmy i sposoby zapisu
Zanim otworzysz Visual Studio i napiszesz pierwszy program w C++, musisz umieć opisać rozwiązanie: co jest daną, co wynikiem i w jakiej kolejności wykonujesz kroki. Pojęcia takie jak algorytm, program i schemat blokowy są też w słowniczku.
Po tym rozdziale powinieneś umieć
- rozróżnić algorytm, program, język programowania i kod źródłowy;
- wymienić cechy poprawnego algorytmu i podać przykład z życia codziennego;
- odczytać schemat blokowy sekwencji i jednego warunku;
- narysować prosty schemat z sekwencją, warunkiem albo pętlą;
- zapisać ten sam algorytm listą kroków i w pseudokodzie;
- rozróżnić algorytm liniowy, z rozgałęzieniami i iteracyjny;
- wskazać w schemacie typowy błąd logiczny (np. pętlę bez końca).
1. Podstawowe pojęcia
Zadanie programistyczne zaczyna się od problemu: „znajdź większą z dwóch liczb”, „policz sumę ocen”. Sposób dojścia do wyniku to algorytm. Gdy zapiszesz go w konkretnym języku (u nas C++), powstaje program. Tekst tego programu to kod źródłowy.
| Pojęcie | Co to jest | Przykład |
|---|---|---|
| Algorytm | Uporządkowany ciąg kroków prowadzący do rozwiązania | Porównaj dwie liczby, wybierz większą |
| Program | Algorytm zapisany w języku zrozumiałym dla komputera | Plik .cpp z funkcją main |
| Język programowania | Sztuczny język o ścisłej składni i znaczeniu zapisów | C++, Python, JavaScript |
| Kod źródłowy | Tekst programu, który edytujesz | To, co widzisz w edytorze Visual Studio |
C++ jest językiem kompilowanym: kod źródłowy tłumaczy
kompilator na plik wykonywalny
(np. .exe), a dopiero potem uruchamiasz program.
Przeciwieństwem jest język interpretowany (np. skrypt w przeglądarce):
silnik czyta kod i wykonuje go na bieżąco, bez osobnego pliku wynikowego.
Na tym przedmiocie piszesz aplikacje konsolowe: program pyta o dane w oknie tekstowym i wypisuje wynik tekstem. Nie budujesz tu okienek z przyciskami.
2. Cechy i rodzaje algorytmów
Nie każdy przepis jest algorytmem. Poprawny algorytm ma kilka cech, których komputer nie „domyśli się” za Ciebie.
- Skończoność — po skończonej liczbie kroków algorytm się zatrzymuje.
- Jednoznaczność — każdy krok jest jasny; nie ma „zrób jakoś rozsądnie”.
- Dane wejściowe — to, co podajesz (liczby, tekst, nic — też bywa daną).
- Dane wyjściowe — wynik: liczba, komunikat, tak/nie.
- Wykonalność — każdy krok da się wykonać (nie dziel przez zero „w ciemno”).
Przykłady z życia
Algorytmem jest przepis, który mówi: wsyp 200 g mąki, dodaj jajko, mieszaj 3 minuty. Nie jest nim rada „upiecz ciasto, aż będzie dobre” — brak jednoznaczności i kryterium stopu. Bankomat: włóż kartę, podaj PIN, wybierz kwotę, wypłać, oddaj kartę — to sekwencja z warunkami (zły PIN, brak środków).
Trzy podstawowe rodzaje
Liniowy
Kroki jeden po drugim, bez wyboru i bez powtórzeń. Przykład: wczytaj dwie liczby, dodaj, wypisz sumę.
Z rozgałęzieniami
W pewnym miejscu pytasz o warunek i idziesz jedną z dróg. Przykład: jeśli liczba jest parzysta, wypisz „parzysta”, w przeciwnym razie „nieparzysta”.
Iteracyjny
Fragment powtarza się, dopóki warunek jest spełniony (albo zadaną liczbę razy). Przykład: dodawaj kolejne liczby, aż wczytasz zero.
3. Lista kroków
Najprostszy zapis algorytmu to ponumerowana lista kroków. Każdy punkt to jedna czynność. Warunek zapisujesz wcięciem albo słowami „jeśli / w przeciwnym razie”. Pętlę — „powtarzaj, dopóki…”.
Większa z dwóch liczb
1. Wczytaj liczby a i b.
2. Jeśli a ≥ b, przyjmij max ← a.
W przeciwnym razie przyjmij max ← b.
3. Wypisz max.
Czy liczba jest parzysta
1. Wczytaj liczbę n.
2. Oblicz resztę z dzielenia n przez 2.
3. Jeśli reszta = 0, wypisz „parzysta”.
W przeciwnym razie wypisz „nieparzysta”.
max ← a („max przyjmuje wartość a”).
To nie jest porównanie. Porównanie to =, >, ≤.
W C++ przypisanie będzie =, a porównanie równości == — na razie trzymaj się strzałki.
4. Schematy blokowe
Schemat blokowy to rysunek algorytmu. Kształt bloku mówi, jaki rodzaj czynności wykonujesz. Strzałki pokazują kolejność. Na sprawdzianie i na egzaminie często proszą właśnie o schemat albo o odczytanie gotowego rysunku.
Symbole
| Blok | Kształt | Kiedy go używasz |
|---|---|---|
| Start, Stop | Owal | Początek i koniec. Dokładnie jeden start. Zwykle jeden stop. |
| Operacja | Prostokąt | Obliczenie, przypisanie, zmiana zmiennej: s ← s + x. |
| Wejście / wyjście | Równoległobok | Wczytaj dane albo wypisz wynik. Nie mieszaj z obliczeniem. |
| Warunek | Romb | Pytanie tak/nie. Z rombu wychodzą dwie strzałki, opisane „tak” i „nie”. |
Sekwencja i warunek
Algorytm liniowy: suma dwóch liczb.
Algorytm z rozgałęzieniem: większa z dwóch liczb.
Obie gałęzie muszą się zejść (albo każda skończyć się na Stop). Nie zostawiaj „luźnej” strzałki w powietrzu.
Pętla na schemacie
Pętla to romb (warunek) plus ciało i zmiana sterująca, która w końcu sprawi, że warunek przestanie być prawdziwy. Bez tej zmiany powstaje pętla nieskończona — algorytm traci skończoność.
Suma liczb od 1 do n:
- Jest Start i Stop.
- Wejście i wyjście są w równoległobokach, obliczenia w prostokątach.
- Z rombu wychodzą dwie podpisane drogi.
- W pętli widać, co się zmienia (licznik, wczytana wartość, flaga).
- Dla przykładowych danych (np. n = 3) potrafisz przejść schemat ołówkiem i dostać 6.
5. Pseudokod
Pseudokod wygląda jak program, ale nie jest C++. Wolno pisać po polsku, pomijać średniki i typy. Ma być jednoznaczny dla człowieka — i łatwy do przepisania później na prawdziwy język.
Umowa stosowana w tym podręczniku:
CZYTAJ— dane wejściowe,PISZ— wynik,←— przypisanie,JEŚLI … TO … W_PRZECIWNYM_RAZIE …,DOPÓKI … WYKONUJalboDLA i OD 1 DO n WYKONUJ.
Maksimum z dwóch — trzy zapisy
Lista kroków
1. Wczytaj a, b.
2. Jeśli a ≥ b, max ← a; inaczej max ← b.
3. Wypisz max.
Pseudokod
CZYTAJ a, b
JEŚLI a ≥ b TO
max ← a
W_PRZECIWNYM_RAZIE
max ← b
PISZ max
Schemat tego algorytmu jest w poprzednim podrozdziale.
C++ dopiszesz, gdy poznasz cin, cout i if.
Teraz liczy się to, że ten sam pomysł da się pokazać na trzy sposoby.
6. Przykłady zbiorcze
Parzystość
CZYTAJ n
JEŚLI n mod 2 = 0 TO
PISZ "parzysta"
W_PRZECIWNYM_RAZIE
PISZ "nieparzysta"
mod to reszta z dzielenia. Dla n = 7 reszta to 1, więc „nieparzysta”.
Suma liczb dodatnich spośród trzech
CZYTAJ a, b, c
s ← 0
JEŚLI a > 0 TO s ← s + a
JEŚLI b > 0 TO s ← s + b
JEŚLI c > 0 TO s ← s + c
PISZ s
Dla danych 3, −1, 5 wynik to 8. Zero nie jest dodatnie — nie wchodzi do sumy.
Minimum z n liczb
CZYTAJ n
CZYTAJ x
min ← x
i ← 2
DOPÓKI i ≤ n WYKONUJ
CZYTAJ x
JEŚLI x < min TO min ← x
i ← i + 1
PISZ min
Pierwszą wartość przyjmujesz jako prowizoryczne minimum, potem porównujesz resztę.
To ten sam pomysł, którego użyjesz później w pętli for w C++.
NWD — algorytm Euklidesa (odejmowanie)
CZYTAJ a, b
DOPÓKI a ≠ b WYKONUJ
JEŚLI a > b TO
a ← a − b
W_PRZECIWNYM_RAZIE
b ← b − a
PISZ a
Dla 48 i 18: 48−18=30, 30−18=12, 18−12=6, 12−6=6. Gdy obie wartości są równe, to NWD. Wersja z resztą z dzielenia jest krótsza — wrócisz do niej przy pętlach.
Ćwiczenia do samodzielnego wykonania
Folder roboczy: np. Dokumenty\cwiczenia-po\rozdzial-01
(albo zeszyt). Nie trzymaj prac wewnątrz folderu tego podręcznika.
W tym rozdziale nie uruchamiasz jeszcze Visual Studio.
Ćwiczenie 1. Słownik pojęć łatwe
Dopasuj własnymi słowami (jedno zdanie każde): algorytm, program, język programowania, kod źródłowy, kompilator. Nie przepisuj tabeli z rozdziału.
Ćwiczenie 2. Odczyt schematu łatwe
Weź schemat sumy dwóch liczb z podrozdziału o sekwencji. Podaj, jaki wynik zobaczy użytkownik dla a = 4, b = 9. Wymień po kolei bloki, przez które przechodzisz.
Ćwiczenie 3. Algorytm z życia łatwe
Zapisz listą kroków algorytm z codzienności (np. logowanie do dziennika, przygotowanie kanapki, przejście przez bramkę na stacji). Zaznacz dane wejściowe, wynik i miejsce, w którym pojawia się decyzja „tak/nie”. Sprawdź, czy opis jest skończony i jednoznaczny.
Ćwiczenie 4. Schemat z warunkiem średnie
Narysuj schemat blokowy: wczytaj temperaturę t. Jeśli t < 0, wypisz „mróz”, w przeciwnym razie „powyżej zera albo zero”. Użyj owalu, równoległoboków, rombu i Stop.
Ćwiczenie 5. Schemat z pętlą średnie
Narysuj schemat: wczytaj n, wypisz liczby od 1 do n (każdą w osobnym kroku wyjścia albo jedną operacją „pisz i”). Pokaż warunek pętli i zmianę licznika. Sprawdź ołówkiem przebieg dla n = 3.
i ← 1. Warunek: i ≤ n. Ciało: wypisz i, potem
i ← i + 1, powrót do rombu. Gdy warunek jest fałszywy — Stop.
Ćwiczenie 6. Błąd w schemacie średnie
Oto lista kroków z błędem:
1. Wczytaj n.
2. i ← 1
3. Dopóki i ≤ n:
wypisz i
4. Stop
Wskaż, jakiej cechy algorytmu brakuje i co dopisać, żeby algorytm się zatrzymał. Narysuj poprawiony schemat.
Ćwiczenie 7. NWD albo minimum trudne
Wybierz jedno:
- NWD dwóch dodatnich liczb całkowitych — schemat oraz pseudokod (wersja z odejmowaniem albo z resztą).
- Minimum z n liczb — schemat oraz pseudokod.
Przetestuj zapis na dwóch zestawach danych (w tym przypadku, gdy liczby są równe albo gdy minimum jest na końcu ciągu).
Ćwiczenie 8. Porównanie zapisów i rekurencja trudne
Weź algorytm parzystości z rozdziału. Zapisz go (1) listą kroków, (2) schematem, (3) pseudokodem. W 4–6 zdaniach oceń, który zapis jest najczytelniejszy i dlaczego. Na końcu własnymi słowami opisz ideę algorytmu rekurencyjnego na przykładzie silni albo „szukania hasła w słowniku przez dzielenie książki na pół” — bez kodu C++.
Sprawdź się
Wymagania na ocenę
Ocena wyższa zawiera wymagania na oceny niższe. Dotyczy pojęć, algorytmów i sposobów zapisu.
| Ocena | Uczeń |
|---|---|
| 2 | Rozróżnia algorytm, program, język programowania i kod źródłowy. Wymienia podstawowe bloki schematu. Z pomocą odczytuje prosty schemat sekwencji i jednego warunku. |
| 3 | Projektuje schemat z sekwencją i instrukcją warunkową. Zapisuje algorytm listą kroków. Podaje przykład z życia oraz cechy algorytmu (skończoność, jednoznaczność, dane we/wy). |
| 4 | Projektuje schemat z pętlą (warunek, ciało, zmiana sterująca). Zapisuje algorytm w pseudokodzie. Rozróżnia algorytmy liniowe, z rozgałęzieniami i iteracyjne. Wskazuje błąd logiczny w schemacie. |
| 5 | Dobiera formę zapisu do problemu. Projektuje algorytm typowego zadania (NWD, min/max, parzystość, suma z warunkiem). Opisuje ideę rekurencji na prostym przykładzie. Porównuje dwa zapisy pod kątem czytelności. |
| 6 | Analizuje poprawność i kompletność (przypadki brzegowe, zatrzymanie pętli). Proponuje usprawnienie gotowego schematu. Porównuje intuicyjnie liczbę operacji dwóch rozwiązań. |