Temat: Wprowadzenie do interpretacji algorytmów (4h). Prezentację przygotowała Jolanta Olejniczak na podstawie podręcznika do informatyki autorstwa: Ireneusza Bujanowskiego i Zbigniewa Talagi oraz książki Macieja M. Sysło, pt.: „Algorytmy”
Cele zajęć: Uczeń: wie, co to jest algorytm, i w jaki sposób są przedstawiane algorytmy umie zapisać algorytm metodą listy kroków potrafi określić cztery podstawowe cechy algorytmów potrafi sporządzić specyfikację problemu algorytmicznego zna schematy blokowe i ogólne reguły obowiązujące przy tworzeniu sieci działań umie wykonać projekt algorytmu za pomocą programu: laboratorium informatyki ELI
Plan zajęć: Wiadomości teoretyczne i ciekawostki dotyczące algorytmów; Cechy dobrego algorytmu; Sposoby zapisywania algorytmów; Algorytm jako lista kroków – obliczanie pierwiastków równania kwadratowego; Specyfikacja problemu algorytmicznego; Schematy blokowe (sieć działań) i ogólne reguły obowiązujące przy tworzeniu sieci działań – symbole graficzne stosowane w sieciach działań; Wprowadzenie do programu „Laboratorium Informatyki ELI - wersja 2.0” firmy ELBOX – wykonywanie projektów algorytmów, np.. określającego, czy dana liczba jest ujemna oraz obliczanie pola kwadratu, itp.; Krótkie podsumowanie – Quiz z wiedzy i umiejętności dotyczących algorytmów na podsumowanie zajęć (na plusy i minusy z aktywności); Zadanie domowe – znaleźć krótkie wyjaśnienie następujących zagadnień algorytmicznych, czyli co to jest: piramida Cheopsa i wieża Hanoi (można skorzystać z sieci Internet lub książek dotyczących algorytmów).
Co to jest algorytm? Przyjmijmy następującą definicję algorytmu: Algorytm jest to schemat postępowania (przepis), sposób rozwiązania zadania (problemu) w skończonej liczbie kroków z wykorzystaniem narzędzi informatycznych, zawierający opis danych wraz z opisem czynności, które należy wykonać z tymi danymi, aby osiągnąć zamierzony cel. Słowo algorytm pochodzi od brzmienia fragmentu nazwiska Muhammad ibn Musa al-Chorezmi, arabskiego matematyka i astronoma, żyjącego na przełomie VIII i IX wieku. Jest on uznawany za prekursora metod obliczeniowych w matematyce. Upowszechnił on również stosowanie systemu dziesiętnego i posługiwanie się zerem. W jego czasach zwolenników opisanej przez niego metody wykonywania pisemnych obliczeń zwano algorytmistami (były też osoby nazywane kalkulatorami – osoby, które do obliczeń używały kamyków, i abacystami – posługiwali się liczydłem).
Do czego są nam potrzebne algorytmy? Umiejętność opracowywania dobrych algorytmów jest bardzo ważna. Na kolejnych zajęciach nauczymy się dostrzegania, opracowywania i różnych sposobów zapisu algorytmów. Pamiętajcie, że umiejętności tutaj zdobyte przydadzą się wam nie tylko na lekcjach dotyczących programowania, ale także na egzaminie maturalnym i przede wszystkim w codziennej nauce oraz pracy. Algorytmy są to często opisy postępowania prowadzącego do rozwiązania problemów poznanych na lekcjach matematyki czy fizyki. Przykładem mogą być dokumenty wykonane przez ciebie w arkuszu kalkulacyjnym, które są zapisem pewnych algorytmów.
Cechy dobrego algorytmu: POPRAWNY – algorytm powinien zwracać prawidłowe wyniki dla każdego zestawu poprawnych danych; SKOŃCZONY – rozwiązanie zadania musi być możliwe dla dowolnego zestawu danych w skończonej liczbie kroków; JEDNOZNACZNY – algorytm powinien zwracać te same wyniki dla zestawów takich samych danych wejściowych; SPRAWNY – ta cecha określa, jak zachowuje się algorytm zarówno pod względem szybkości działania, jak i optymalnego wykorzystania zasobów komputera, w szczególności jego pamięci operacyjnej (ten problem omówimy dokładniej nieco później, przy okazji konkretnych języków programowania); SZCZEGÓŁOWY – aby wykonawca algorytmu rozumiał opisane czynności i potrafił je wykonać; UNIWERSALNY – ma służyć do rozwiązywania pewnej grupy zadań, a nie tylko jednego konkretnego przypadku zadania. Dobry algorytm powinien uwzględniać wszystkie sytuacje, które mogą się zdarzyć!!!
Etapy rozwiązywania problemów: W procesie rozwiązywania każdego zadania możemy wyróżnić pewne etapy, które nas do niego prowadzą: Sformułowanie zadania Określenie danych wejściowych Określenie celu, czyli wyniku Poszukiwanie metody rozwiązania, czyli algorytmu Przedstawienie algorytmu w określonej postaci (np. za pomocą schematu blokowego) Analiza poprawności rozwiązania (testowanie rozwiązania dla różnych danych oraz ocena efektywności przyjętej metody) Rozwiązanie problemu (rzeczywistego) z zastosowaniem algorytmu. Punkty od 1 do 3 stanowią tzw. specyfikację problemu algorytmicznego.
Sposoby zapisywania algorytmów: za pomocą listy kroków (języka potocznego) w postaci graficznej – schematy blokowe, np. w programie ELI jako drzewo algorytmu (w języku symbolicznym – stosowane nazewnictwo elementów drzewa jest wzięte z dendrologii: korzeń, liście – wierzchołki końcowe, gałęzie – połączenia w drzewie) Jako zapis w określonym języku programowania, np. w języku Pascal (taki algorytm określamy mianem programu). Na dzisiejszych zajęciach skoncentrujemy się na dwóch pierwszych sposobach prezentowania algorytmów!
Opis algorytmu w postaci 1. listy kroków: Najprostszym, a jednocześnie najbardziej naturalnym sposobem zapisu algorytmu, jest opis reguł postępowania zwany listą kroków. Poszczególne kroki zawierają opis operacji, które mają być wykonane przez algorytm. Mogą w nich również wystąpić polecenia związane ze zmianą kolejności wykonywania kroków lub polecenia zakończenia algorytmu. Dodatkowo w nawiasach {…} umieszczamy uwagi nie będące częścią algorytmu, a jedynie komentujące jego przebieg i pomagające zrozumieć wykonywane polecenia i ich efekty. Przykładem może tutaj być obliczanie pierwiastków równania kwadratowego – ciąg dalszy na następnej stronie!
Algorytm prowadzący do rozwiązania tego problemu możemy zapisać w postaci następującej listy kroków: Krok 1: Wczytaj współczynniki a, b, c równania. Krok 2: Jeśli a = 0, pisz komentarz: „To nie jest równanie kwadratowe” i przejdź do kroku 7. Krok 3: Oblicz wyróżnik (delta) według wzoru: ∆ = b2 – 4ac. Krok 4: Jeśli ∆ > 0, oblicz x1 oraz x2, następnie zapisz wartości x1 i x2. Krok 5: Jeśli ∆ = 0 oblicz x0 i zapisz wartość x. Krok 6: Jeśli ∆ < 0, pisz komentarz „brak rozwiązań w zbiorze liczb rzeczywistych”. Krok 7: Koniec. Podany algorytm w sposób jednoznaczny określa, co należy zrobić i jakie obliczenia należy wykonać dla każdego zestawu danych. Zauważ, że lista kroków nie musi zawierać instrukcji żadnego języka programowania!
Specyfikacja problemu algorytmicznego: Umiejętność zapisywania algorytmów w dowolnej formie jest bardzo ważna, ale równie istotna jest czytelna dokumentacja, która umożliwi szybkie przypomnienie, czego algorytm dotyczy, a również ułatwi analizę jego działania. Podobnie jak przy rozwiązywaniu zadań z innych przedmiotów, przed przystąpieniem do tworzenia algorytmu należy określić, czego on dotyczy, opisać stosowane symbole, wyjaśnić jakiego typu będą dane wejściowe i wyniki. Dobrym zwyczajem jest umieszczanie w dokumentacji krótkiego opisu zastosowanego algorytmu. Wszystkie informacje zawarte w takiej dokumentacji określa się mianem specyfikacji problemu algorytmicznego. Zbiór danych Wyniki ALGORYTM
Specyfikacja problemu algorytmicznego: Opracowanie algorytmu wraz z poprawną specyfikacją pozwoli nam łatwo zastosować go w różnych środowiskach programistycznych. Poprawnie sformułowana specyfikacja problemu algorytmicznego jest punktowana przy ocenie rozwiązań zadań maturalnych z informatyki, a jej brak obniża ocenę nawet poprawnie działającego algorytmu. Oto przykład takiej specyfikacji: Specyfikacja problemu algorytmicznego: Dane: n, k є N+ n – podstawa potęgi k – wykładnik potęgi Wynik: P – obliczana wartość potęgi, P є N+ Użyte zmienne: i – zmienna pełniąca funkcję licznika, i є N Zapis algorytmu: Krok 1. Wczytaj wartości: n i k. Krok 2. Nadaj zmiennym wartości początkowe: P:=1, i:=0. Krok 3. i:=i + 1 {powiększ i o 1}. Krok 4. P:=P * n. Krok 5. Jeśli i < k, przejdź do kroku 3. Krok 6. Pisz P. Krok 7. Koniec.
Opis algorytmu w postaci 2. schematu blokowego: Jest to graficzny sposób zapisu algorytmu, inaczej nazywany sieciami działań, gdzie za pomocą ściśle określonych figur geometrycznych, powiązanych trwale z określonymi typami instrukcji oraz połączeń, można czytelnie zilustrować kroki procesu przetwarzania informacji. W schemacie blokowym poszczególne operacje przedstawione są za pomocą odpowiednio połączonych skrzynek (klocków i bloków). Połączenia określają kolejność i sposób wykonywania operacji realizujących dany algorytm.
Podczas projektowania i analizy algorytmów zapisanych w postaci sieci działań obowiązują pewne reguły, których należy przestrzegać, aby pod względem konstrukcyjnym był on traktowany jako poprawny: w schemacie blokowym może znajdować się tylko jeden blok oznaczający początek i jeden blok oznaczający koniec działania algorytmu; z każdego bloku powinna istnieć droga przetwarzania informacji (zgodna z kierunkiem wyznaczonym przez strzałki) prowadząca do bloku końcowego; z każdego bloku powinna istnieć droga przetwarzania informacji prowadząca do bloku oznaczającego początek algorytmu (w tym wypadku będzie to droga w kierunku przeciwnym do kierunku wyznaczonego przez strzałki); wszystkie bloki powinny mieć odpowiednią (zgodną z tabelą symboli graficznych dla sieci działań) liczbę wejść i wyjść; każdej czynności (bądź grupie czynności) musi być przyporządkowany blok opisany ściśle określoną figurą geometryczną; wewnątrz każdego bloku należy umieścić definicję czynności realizowaną w trakcie działania algorytmu; każda z linii przepływu informacji między blokami powinna mieć początek na bloku, a koniec na innym bloku lub linii, z którą się łączy.
Zbiór symboli graficznych stosowanych w schematach blokowych: Operacja umożliwiająca wybór jednej z alternatywnych dróg działania Decyzja Operacja, w wyniku której zmienia się wartość informacji Przetwarzanie Wprowadzanie lub wyprowadzanie danych Wejście - wyjście Oznaczenie miejsca zakończenia działania algorytmu Koniec Oznaczenie miejsca rozpoczęcia działania algorytmu Początek Symbol w programie ELI Symbol Wyjaśnienie Operacja START STOP N T
Zbiór symboli graficznych stosowanych w schematach blokowych cd: Skrzyżowanie dróg przepływu danych bez powiązania między nimi Skrzyżowanie Łączenie dróg przepływu danych Łączenie Wskazanie kierunku przepływu danych Droga przetwarzania danych we wskazanym kierunku Symbol w programie ELI Symbol Wyjaśnienie Operacja
Algorytmy ze względu na konstrukcję dzielimy na: algorytmy liniowe algorytmy rozgałęzione W algorytmie liniowym kolejność wykonywania poszczególnych instrukcji jest tutaj ściśle określona i nie jest możliwe ani ominięcie, ani powtórne wykonanie żadnej z nich. Algorytmy rozgałęzione natomiast zawierają rozgałęzienia realizowane przez instrukcje warunkowe (blok decyzyjny, który określa, jakie instrukcje będą wykonywane po sprawdzeniu zapisanego w nim warunku), a także konstrukcje umożliwiające wielokrotne powtarzanie pewnych czynności
Przykład algorytmu liniowego: START Czytaj: a, b S:=(a+b)/2 Pisz: S STOP Obliczanie średniej arytmetycznej dwóch liczb naturalnych Specyfikacja problemu algorytmicznego Dane: a, b – wprowadzane liczby: a, b є N+ Wynik: S – obliczona średnia. Schemat
Przykład algorytmu z rozgałęzieniem: START Czytaj: a M:= -a Pisz: M STOP M:= a Czy a<0? Obliczanie wartości bezwzględnej (modułu) danej liczby całkowitej Specyfikacja problemu algorytmicznego Dane: a – wprowadzana liczba: a є C Wynik: M – obliczany moduł. Schemat
Na zakończenie Dziękuję za uwagę ! ! Na następnych zajęciach dowiesz się co to jest konstrukcja algorytmiczna nazywana pętlą, a także nauczysz się przedstawiać organizację pojedynczej pętli i we właściwy sposób budować warunek kończący jej działanie oraz w jaki sposób unikać typowych błędów działania wynikających z konstrukcji algorytmów. Dziękuję za uwagę ! Nie zapomnij o rozwiązaniu zadania domowego !