Teoretyczne podstawy informatyki - ćwiczenia: Prowadzący: dr inż. Dariusz W Brzeziński 1 Wprowadzenie do algorytmiki 1.1 Algorytm 1. Skończony, uporządkowany ciąg precyzyjnie i zrozumiale opisanych czynności koniecznych do wykonania pewnego zadania. 2. Zestaw instrukcji do przetworzenia danych wejściowych na dane wyjściowe w określony sposób. 3. Algorytmem możemy nazwać algorytm Euklidesa znajdowania największego wspólnego dzielnika liczb, wyznaczanie podziału kąta na dwie równe części za pomocą cyrkla i linijki. Algorytmem możemy także nazwać procedurę wymiany uszkodzonego dysku twardego w komputerze. 4. Przykład algorytmu jako listy kroków w języku opisowym, za pomocą którego można obliczyć i wyświetlić średnią arytmetyczną dwóch liczb: 1) Pobierz pierwszą liczbę. 2) Pobierz drugą liczbę. 3) Dodaj pierwszą liczbę do drugiej. 4) Sumę podziel przez dwa. 5) Wyświetl iloraz. Cechy poprawnego algorytmu: 1. Kompletność: Algorytm uwzględnia wszystkie możliwe przypadki mogące wystąpić w trakcie rozwiązywania wyznaczonego problemu. Algorytm przewiduje wystąpienia błędów (numerycznych, logicznych i innych) oraz posiada wbudowane sposoby reagowania na nie (komunikaty, odpowiednie zakończenie swego działania, itd.). 2. Skończoność: Algorytm umożliwia osiągnięcie rozwiązania w skończonej liczbie kroków, tzn. w skończonym czasie. Dokładna liczba kroków nie jest jednak znana. Algorytm posiada warunek zakończenia. 1
3. Jednoznaczność: Algorytm musi dawać zawsze te same wyniki dla tych samych danych wejściowych. Algorytm musi być niezależny od momentu uruchomienia od innych programów, sprzętu oraz zmiennych środowiskowych. 4. Stabilność: Algorytm powinien dawać poprawne wyniki dla wprowadzonych dowolnych danych zgodnych z wcześniej zdefiniowanym rodzajem i typem. Algorytm to sformalizowany opis pewnej procedury. W celu uniknięcia nieporozumień co znaczenia pewnych słów, które spowodowałyby interpretację algorytmu, Wprowadzono umowne metody zapisu algorytmu. Najczęściej stosowane sposoby zapisu algorytmu: 1. Lista kroków (opis słowny). 2. Pseudo-język, pseudokod. 3. Konkretny język programowania. 4. Zapis graficzny (schemat blokowy). 1.2 Pseudokod Pseudokod jest jednym ze sposobów zapisu algorytmów. Jest to zastosowanie pseudojęzyka programowania. Zaletą takiego podejścia jest bardzo łatwa późniejsza implementacja za pomocą konkretnie wybranego języka programowania, np języka C. Dzieje się tak ponieważ większość konstrukcji podstawowych takich jak warunek, czy pętla, mają podobną postać w różnych językach. Poniżej przedstawiono typowe operacje używane do opisu algorytmu za pomocą omawianej metody. 1.2.1 Przypisanie s a + b 1.2.2 Zamiana a b 2
1.2.3 Porównanie równe: a = b większe: a > b mniejsze: a < b większe lub równe: a b mniejsze lub równe: a b różne: a! = b, lub a <> b 1.2.4 Wypisanie PRINT a 1.2.5 Instrukcja warunkowa if if a = b then PRINT a jest równa b else if a < b then PRINT a jest mniejsza od b else PRINT a jest większa od b end if end if 1.2.6 Pętla f or for i 1 to n do PRINT i end for 1.2.7 Pętla while while i < n do PRINT i i i + 1 end while 1.2.8 Pętla do while repeat PRINT i i i + 1 3
until i < n Algorytm w postaci pseudokodu, za pomocą którego można obliczyć i wyświetlić średnią arytmetyczną dwóch liczb: Algorithm 1 Obliczenie i wyświetlenie średniej arytmetycznej dwóch liczb całkowitych. INPUT a INPUT b s a + b sr s/2 PRINT sr 1.3 Schemat blokowy Schemat blokowy przedstawia algorytm za pomocą symboli graficznych z podziałem na operacje wejścia/wyjścia, operacje arytmetyczne, logiczne w odpowiedniej kolejności. Poniżej zaprezentowano najczęściej spotykane symbole graficzne używane do konstrukcji schematów blokowych: Rysunek 1: Bloki graniczne Bloki graniczne oznaczają początek i koniec algorytmu. Oba mają kształt owalu. Dochodzi do nich tylko jeden łącznik (wyjaśnienie tego terminu poniżej). Każdy schemat blokowy może posiadać dokładnie jeden blok START oraz co najmniej jeden blok STOP. Rysunek 2: Łącznik Łącznik łączy poszczególne bloki. Określa on kierunek przepływu danych lub kolejność wykonywanych operacji; często nazywany jest także ścieżką sterującą. Rysunek 3: Blok kolekcyjny Blok kolekcyjny łączy w jedną kilka ścieżek algorytmu. 4
Rysunek 4: Blok operacyjny Blok operacyjny symbolizuje operację lub grupę operacji, w wyniku których np. ulega zmianie wartość zmiennej. Tu - przypisanie wartości liczby całkowitej 10 zmiennej X. Bloki operacyjne mają kształt prostokąta. Wychodzi z niego jeden łącznik i wychodzi z niego także jeden. Rysunek 5: Blok wejścia/wyjścia Blok wyjścia/wejścia oznaczający operacje wprowadzania i wyprowadzania danych, wyników i komunikatów. Blok ma kształt równoległoboku; wchodzi i wychodzi z niego jeden łącznik. Rysunek 6: Blok decyzyjny Blok decyzyjny określa wybór jednej z dwóch możliwości postępowania; ma kształt rombu lub sześciokąta; wchodzi do niego jeden łącznik a wychodzą dwa: TAK, gdy zdefiniowany warunek jest spełniony, NIE, gdy nie jest on spełniony. Można wybrać jeden z dwóch dostępnych kształtów bloku decyzyjnego. Używając przedstawionych symboli graficznych możemy dowolny algorytm przedstawić w postaci schematu blokowego. 5
Rysunek 7: Schemat blokowy: algorytm obliczenia i wyświetlenia średniej arytmetycznej dwóch liczb. 1.4 Przykładowe zadania do wykonania Napisać w pseudokodzie i przedstawić za pomocą schematu blokowego następujące algorytmy: 1. Wczytujący dwie liczby i wypisujący ich sumę. 2. Wczytujący dwie liczby i wypisujący większą z nich. 3. Liczący wartość bezwzględną podanej liczby. 4. Liczący silnię (iteracyjnie) podanej liczby. 5. Algorytm Eukildesa znajdujący NWD dwóch liczb. 6. Algorytm Eukildesa znajdujący NWD dwóch liczb (z wykorzystaniem modulo). 7. Wczytujący trzy liczby i wypisujący największą z nich. 8. Liczący różnicę dwóch liczb i wypisujący jej wartość bezwzględną. 6