Logo

Podstawowe pojęcia algorytmiczne

Opis: W temacie omówione zostaną podstawowe pojęcia algorytmiczne wykorzystywane podczas tworzenia i analizowania algorytmów. Przedstawione zostaną instrukcje warunkowe, pętle, iteracje i rekurencja, a także zmienne, typy danych, tablice oraz napisy.

Pojęcie - Instrukcja warunkowa

W projektowaniu algorytmów bardzo często zachodzi potrzeba podejmowania decyzji. Oznacza to, że dalszy przebieg algorytmu nie zawsze jest taki sam i zależy od spełnienia określonych warunków. Właśnie w takich sytuacjach stosuje się instrukcję warunkową, która pozwala algorytmowi "wybrać" jedną z możliwych ścieżek działania.

Instrukcja warunkowa jest podstawowym mechanizmem sterowania przebiegiem algorytmu. Dzięki niej algorytm nie jest liniową sekwencją kroków, lecz strukturą decyzyjną, która reaguje na różne wartości danych wejściowych lub stanów pośrednich.

Pojęcie warunku

Podstawą instrukcji warunkowej jest warunek logiczny, czyli wyrażenie, które może przyjmować jedną z dwóch wartości:

  • prawda (true) - warunek jest spełniony,

  • fałsz (false) - warunek nie jest spełniony.

Źródło: Jakub Piskorowski

Warunek najczęściej porównuje wartości (np. liczby, teksty) lub sprawdza ich właściwości. Przykładowo:

  • czy liczba jest większa od zera,

  • czy dwie wartości są sobie równe,

  • czy użytkownik podał poprawne dane.

Jak działa instrukcja warunkowa w algorytmie

Instrukcja warunkowa działa na zasadzie wyboru jednej z dwóch (lub więcej) gałęzi działania algorytmu:

  • jeśli warunek jest spełniony -> wykonaj określone działania,

  • jeśli warunek nie jest spełniony -> wykonaj alternatywne działania (lub pomiń je).

W praktyce oznacza to, że algorytm "rozgałęzia się" w zależności od sytuacji.

Przykład algorytmiczny

Rozważmy prosty algorytm sprawdzający, czy liczba jest dodatnia:

Jeżeli liczba > 0, to algorytm wypisuje komunikat "liczba dodatnia", w przeciwnym przypadku wypisuje "liczba niedodatnia".

Można to opisać następująco:

  • sprawdź warunek: czy liczba > 0,

  • jeśli tak -> pokaż "liczba dodatnia",

  • jeśli nie -> pokaż "liczba niedodatnia".

Znaczenie instrukcji warunkowej

Instrukcja warunkowa jest jednym z fundamentów algorytmiki, ponieważ pozwala tworzyć algorytmy:

  • elastyczne, które reagują na różne dane wejściowe,

  • nieliniowe, które mogą zmieniać tok działania,

  • bardziej zbliżone do sposobu podejmowania decyzji przez człowieka.

Bez instrukcji warunkowych każdy algorytm byłby jedynie prostą listą kroków wykonywanych zawsze w ten sam sposób, co znacznie ograniczałoby jego zastosowanie.

Krótki przykład z życia codziennego

Instrukcję warunkową można porównać do decyzji podejmowanych w codziennym życiu:

"Jeśli pada deszcz, biorę parasol, w przeciwnym razie go nie biorę."

Widać tutaj dokładnie ten sam mechanizm: analiza warunku (pogoda) i wybór odpowiedniego działania.

Pojęcie - Pętla

W wielu algorytmach zachodzi potrzeba wielokrotnego wykonania tego samego zestawu działań. Zamiast powtarzać te same kroki wielokrotnie, stosuje się pętlę, czyli konstrukcję algorytmiczną umożliwiającą automatyczne powtarzanie określonej sekwencji instrukcji.

Pętla jest jednym z podstawowych mechanizmów sterowania przebiegiem algorytmu i pozwala znacząco skrócić jego zapis, jednocześnie zwiększając jego przejrzystość i elastyczność.

Idea działania pętli

Pętla opiera się na idei wielokrotnego wykonania tych samych operacji, dopóki spełniony jest określony warunek lub dopóki nie zostanie osiągnięty określony cel.

W algorytmach wyróżniamy dwa główne podejścia:

  • powtarzanie czynności określoną liczbę razy,

  • powtarzanie czynności do momentu spełnienia warunku.

W obu przypadkach kluczowe jest to, że zamiast ręcznego zapisywania wielu identycznych kroków, definiujemy mechanizm ich automatycznego powtarzania.

Źródło: Jakub Piskorowski

Warunek zakończenia

Każda pętla musi mieć jasno określony warunek zakończenia, czyli moment, w którym przestaje się wykonywać. Jest to niezwykle istotne, ponieważ brak takiego warunku prowadziłby do nieskończonego wykonywania algorytmu.

Warunek ten może być:

  • logiczny (np. "dopóki liczba < 10"),

  • liczbowy (np. wykonaj 5 powtórzeń),

  • związany ze stanem danych (np. "dopóki lista nie jest pusta").

Jak działa pętla w algorytmie

Działanie pętli można opisać w uproszczonych krokach:

  1. sprawdź warunek kontynuacji,

  2. jeśli warunek jest spełniony -> wykonaj instrukcje wewnątrz pętli,

  3. zmień stan (np. zwiększ licznik, zmodyfikuj dane),

  4. wróć do sprawdzenia warunku,

  5. zakończ, gdy warunek przestaje być spełniony.

Ten cykliczny proces sprawia, że pętla działa jak "automatyczny powtarzacz" operacji.

Znaczenie pętli w algorytmach

Pętle mają kluczowe znaczenie w algorytmice, ponieważ umożliwiają:

  • automatyzację powtarzalnych czynności,

  • przetwarzanie dużych zbiorów danych,

  • tworzenie złożonych operacji w zwartej formie,

  • eliminację powtarzalnych fragmentów algorytmu.

Bez pętli wiele problemów wymagałoby ręcznego powtarzania tych samych kroków, co byłoby nieefektywne i podatne na błędy.

Przykład z życia codziennego

Pętlę można porównać do codziennych czynności wykonywanych wielokrotnie według tego samego schematu:

"Dopóki nie umyję wszystkich naczyń, biorę kolejne naczynie, myję je i odkładam."

W tym przykładzie czynność "mycia naczyń" powtarza się, aż zostanie osiągnięty określony stan końcowy (brak brudnych naczyń).

Pojęcie - Iteracja

W algorytmach często pojawia się konieczność wielokrotnego wykonywania tych samych operacji, jednak warto rozróżnić mechanizm powtarzania od pojedynczego powtórzenia. Właśnie tym drugim pojęciem jest iteracja.

Iteracja to pojedyncze wykonanie zestawu instrukcji w ramach powtarzalnego procesu. Innymi słowy: jest to jeden "cykl" działania, który może należeć do większej struktury powtarzania (czyli pętli).

Można powiedzieć, że iteracja jest "krokiem w pętli", a nie samą strukturą sterującą.

Przykład iteracji

Załóżmy, że mamy listę liczb: 2, 4, 6, 8.

Algorytm ma za zadanie wypisać każdą z nich.

Proces wygląda następująco:

  • pierwsza iteracja -> przetworzenie liczby 2,

  • druga iteracja -> przetworzenie liczby 4,

  • trzecia iteracja -> przetworzenie liczby 6,

  • czwarta iteracja -> przetworzenie liczby 8.

Każdy z tych kroków jest oddzielną iteracją, ale wszystkie razem tworzą jeden proces powtarzania.

Różnica między pętlą a iteracją

Choć pojęcia te są ze sobą ściśle powiązane, oznaczają coś innego:

Pętla to struktura algorytmiczna, która:

  • steruje powtarzaniem operacji,

  • określa warunek zakończenia,

  • kontroluje liczbę powtórzeń.

Można ją traktować jako "mechanizm powtarzania".

Iteracja to:

  • pojedyncze wykonanie instrukcji w ramach pętli,

  • jeden cykl działania,

  • konkretny krok w procesie powtarzania.

Źródło: Jakub Piskorowski

Pojęcie - Rekurencja

W algorytmice istnieją problemy, które można rozwiązać poprzez ich rozbicie na mniejsze, podobne do siebie przypadki. W takich sytuacjach stosuje się rekurencję, czyli sposób definiowania algorytmu, w którym rozwiązanie problemu zależy od rozwiązania jego mniejszej wersji.

Rekurencja jest więc techniką, w której algorytm "odwołuje się sam do siebie", ale zawsze w uproszczonej postaci problemu.

Idea rekurencji

Podstawową ideą rekurencji jest założenie, że:

  • duży problem można sprowadzić do mniejszego problemu tego samego typu,

  • a następnie powtarzać to sprowadzanie aż do osiągnięcia najprostszego przypadku.

Ten najprostszy przypadek nazywany jest warunkiem bazowym i to on zatrzymuje proces rekurencyjny.

Bez warunku bazowego rekurencja nie kończyłaby działania, ponieważ algorytm wciąż próbowałby rozwiązywać coraz mniejsze wersje tego samego problemu.

Warunek bazowy

Warunek bazowy to sytuacja, w której problem jest na tyle prosty, że można go rozwiązać bez dalszego odwoływania się do samego siebie.

Można go traktować jako "punkt zatrzymania" rekurencji.

Przykładowo:

  • dla silni liczby 1 lub 0 wynik jest znany bez dalszych obliczeń,

  • dla sumy liczb od 1 do n przypadek n = 1 jest najprostszym rozwiązaniem.

Jak działa rekurencja w algorytmie

Działanie rekurencji można opisać jako proces schodzenia w dół i powrotu:

  1. algorytm sprawdza, czy osiągnięto warunek bazowy,

  2. jeśli nie -> rozbija problem na mniejszy,

  3. wywołuje samego siebie dla mniejszego przypadku,

  4. proces powtarza się aż do warunku bazowego,

  5. po jego osiągnięciu następuje "powrót" i łączenie wyników.

Przykład rekurencji - silnia

Dobrym przykładem rekurencji jest obliczanie silni liczby.

Silnia liczby n (oznaczana jako n!) to iloczyn wszystkich liczb od 1 do n.

Można ją zdefiniować rekurencyjnie:

  • n! = n × (n − 1)!

Warunek bazowy:

  • 0! = 1

Dzięki temu:

  • 5! = 5 × 4!

  • 4! = 4 × 3!

  • 3! = 3 × 2!

  • 2! = 2 × 1!

  • 1! = 1 × 0!

Rekurencja w kontekście algorytmów

Rekurencja jest szczególnie przydatna w algorytmach, które mają strukturę:

  • hierarchiczną,

  • dziel i zwyciężaj,

  • drzewiastą (np. struktury danych typu drzewo).

Przykłady zastosowań obejmują:

  • przeszukiwanie struktur drzewiastych,

  • sortowanie (np. szybkie sortowanie),

  • obliczenia matematyczne definiowane rekurencyjnie.

Różnica między rekurencją a pętlą

Rekurencja i pętla mogą prowadzić do podobnych efektów (powtarzanie działań), ale różnią się sposobem działania:

  • pętla powtarza instrukcje w sposób iteracyjny, w ramach jednej struktury sterującej,

  • rekurencja rozwiązuje problem poprzez wielokrotne wywołanie samej siebie dla mniejszych przypadków.

Obliczenie silni można zrealizować na dwa sposoby:

  • iteracyjnie (pętla) -> powtarzanie mnożenia w jednym procesie,

  • rekurencyjnie -> rozbijanie problemu n! na n × (n−1)! aż do 0!.

Źródło: Jakub Piskorowski

Pojęcia - Zmienne i typy danych

W algorytmach konieczne jest przechowywanie oraz przetwarzanie informacji. W tym celu wykorzystuje się zmienne, które pełnią rolę nazwanych miejsc w pamięci, przechowujących określone wartości. Zmienna pozwala algorytmowi zapamiętać dane, a następnie wielokrotnie z nich korzystać lub je modyfikować w trakcie działania.

Zmienne można traktować jako "pojemniki" na dane, których zawartość może się zmieniać w czasie wykonywania algorytmu.

Czym jest zmienna

Zmienna to symboliczna nazwa przypisana do konkretnej wartości, która może ulegać zmianie podczas działania algorytmu.

Przykładowo:

  • zmienna x może przechowywać liczbę 5,

  • później ta sama zmienna może przechowywać liczbę 10.

Dzięki temu algorytm może dynamicznie reagować na dane i wykonywać obliczenia.

Typy danych

Każda zmienna w algorytmie przechowuje dane określonego rodzaju, czyli posiada typ danych. Typ danych określa:

  • jakie wartości może przyjmować zmienna,

  • jakie operacje można na niej wykonywać.

Najczęściej wyróżnia się podstawowe typy:

  • liczbowe - np. liczby całkowite i rzeczywiste,

  • tekstowe (napisy) - np. imiona, zdania,

  • logiczne - przyjmujące wartości prawda/fałsz.

Źródło: Jakub Piskorowski

Krótki przykład

Jeżeli algorytm oblicza sumę dwóch liczb:

  • zmienne a i b przechowują liczby wejściowe,

  • zmienna suma przechowuje wynik działania a + b.

Każda z tych zmiennych ma określony typ danych, najczęściej liczbowy.

Pojęcia - Tablice i napisy

W algorytmach bardzo często zachodzi potrzeba przechowywania większej ilości danych tego samego typu lub operowania na ciągach znaków. W takich sytuacjach wykorzystuje się tablice oraz napisy, które pozwalają w uporządkowany sposób zarządzać danymi złożonymi.

Oba te pojęcia rozszerzają możliwości pojedynczych zmiennych, umożliwiając pracę na zbiorach wartości zamiast na pojedynczych elementach.

Tablice

Tablica to struktura danych, która pozwala przechowywać wiele wartości tego samego typu pod jedną nazwą. Każdy element tablicy jest dostępny poprzez swój indeks, czyli numer pozycji.

Tablicę można traktować jako uporządkowany zbiór zmiennych, w którym:

  • wszystkie elementy mają ten sam typ (np. liczby),

  • każdy element ma swoje miejsce,

  • dostęp do danych odbywa się przez numer pozycji.

Praca z tablicą w algorytmie

W algorytmach tablice są szczególnie przydatne, gdy trzeba przetwarzać wiele danych w podobny sposób. Zamiast tworzyć wiele zmiennych, używa się jednej tablicy i odwołuje się do jej elementów.

Przykładowo, tablica liczb może zawierać wartości: 3, 7, 2, 9, 5.

Algorytm może:

  • przejść przez każdy element tablicy,

  • wykonać na nim obliczenia,

  • zapisać lub porównać wyniki.

Napisy

Napisy (czyli ciągi znaków) to struktury danych służące do przechowywania tekstu. Mogą zawierać litery, cyfry oraz inne znaki.

Napisy można traktować jako szczególny przypadek tablicy, w której:

  • elementami są pojedyncze znaki,

  • tekst jest uporządkowaną sekwencją znaków,

  • każdy znak ma swoją pozycję.

Operacje na napisach

W algorytmach napisy są często analizowane lub przetwarzane. Możliwe operacje to między innymi:

  • odczytywanie pojedynczych znaków,

  • łączenie tekstów,

  • sprawdzanie długości napisu,

  • wyszukiwanie fragmentów tekstu.

Różnica między tablicą a napisem

Choć tablice i napisy są podobne pod względem struktury, różnią się zastosowaniem:

  • tablica przechowuje dane dowolnego typu (np. liczby, wartości logiczne),

  • napis przechowuje wyłącznie znaki tworzące tekst.

Można powiedzieć, że napis jest specjalnym przypadkiem tablicy znaków.

Przykład algorytmiczny

Jeżeli algorytm ma obliczyć średnią z ocen ucznia:

  • oceny są przechowywane w tablicy,

  • algorytm przechodzi przez każdy element tablicy i sumuje wartości,

  • następnie dzieli sumę przez liczbę elementów.

Jeżeli algorytm analizuje imię ucznia:

  • imię jest napisem,

  • algorytm może sprawdzić jego długość lub poszczególne litery.