Podstawy Informatyki Inżyria Ciepła, I rok Wykład 7 Algorytmy Sformułowa problemu. Programowa Opracowa metodyki rozwiązania. Opracowa algorytmu. Napisa kodu źródłowego (zakodowa) w wybranym języku (Pascal, Fortran, C++, itp.). Kompilacja kodu źródłowego Uruchomie programu na komputerze. Wykona obliczeń. Analiza otrzymanych wyników. Usunięcie błędów programu (debugging). Co to jest algorytm? Jeżeli mamy do wykonania jakieś zada, budujemy sposób, przepis realizacji tego zadania. Taki przepis to algorytm. Przykłady: przepis kucharski, instrukcja składania mebla/urządzenia..., zapis nutowy, wykonywa pisemne dodawania/mnożenia/dzielenia... Algorytm (definicja formalna) to sposób postępowania (przepis) umożliwiający rozwiąza określonego zadania (klasy zadań), podany w postaci skończonego zestawu czynności do wykonania, ze wskazam ich następstwa. Istotne cechy algorytmu Definicja zadania = co algorytm ma zrobić. Opis ciągu czynności, które po kolei mają być wykonane. Czynności te muszą być na tyle proste (i możliwe do wykonania), aby wykonawca algorytmu mógł je bez dodatkowego tłumaczenia, wykonać operacje elementarne; odpowiednio dobrany poziom szczegółowości. Skończona ilość operacji elementarnych skończony czas działania. Algorytm dostaje pewne informacje (dane wejściowe) i zwraca jakieś (oczekiwane) wyniki dane wyjściowe. Może istć kilka przepisów, które dają w efekcie te same wyniki. Algorytm Pochodze nazwy: od łacińskiego tłumaczenia tytułu dzieła perskiego matematyka Muhammeda ibn Musy Al-Khwarizmi (780-850AD) Algoritmidenumero Indorum (Obliczenia z użyciem cyfr indyjskich). W książce tej podał on algorytmy wykonywania działań arytmetycznych, m.in. rozwiązywa równań liniowych i prostych kwadratowych na liczbach dziesiętnych. Algorytmika - dział wiedzy zajmujący się badam algorytmów Sposoby zapisu algorytmu: słowami, za pomocą schematu blokowego, w pseudokodzie, w jednym z języków programowania Program - formal spisana wersja algorytmu. Algorytm sekwencyjny - opis słowny Postawie problemu: - Co należy zrobić, aby zobaczyć film Obywatel? Algorytm 1a: Idź do kina Kup bilet Obejrzyj film Wróć do domu Algorytm powyższy zawiera 4 podstawowe składniki, z których każdy wymaga zakończenia wykonania pewnej akcji przed rozpoczęciem następnej. W komputerze każdy składnik będzie zapisany jako instrukcja lub grupa instrukcji (procedur Algorytm powin być kolejno uściślany, by mógł być w swojej ostatecznej postaci zrozumiały dla komputera, oraz by uwzględniał wszystkie okoliczności przewidziane przez projektanta.
Algorytm 1b: POCZĄTEK jeżeli wyświetlają filmu " Obywatel to znajdź sobie inne zajęcie { idź do kina jeżeli jest kolejka to ustaw się w kolejce (na końcu?) dopóki przed Tobą stoją ludzie wykonuj przesuwaj się do przodu jeżeli są wolne miejsca to {kup bilet, znajdź swoje miejsce dopóki trwa projekcja wykonuj oglądaj film zaklnij po cichu, wyjdź z kina wróć do domu KONIEC Przykład algorytmu: sumowa zarobków pracowników Dane: lista pracowników z zarobkami (tablica A) (1) zanotuj "na boku"(zmienna suma) liczbę 0; Powtarzaj (2) przeglądaj ankiety i dodawaj zarobki każdego pracownika do liczby "na boku"; Aż do (3) kiedy osiągsz koc listy, przedstaw wartość liczby "na boku" jako wynik (sum Cechy tego algorytmu: Działa na różnych zestawach danych, ale daje poprawne wyniki. Sam tekst algorytmu jest ograniczony i krótki, ale proces który opisuje zmienia się wraz z długością listy pracowników. Algorytmy przedstawione powyżej wykorzystują język naturalny oraz słowa kluczowe. Słowa kluczowe definiują podstawowe struktury sterujące programu oraz procesy podejmowania decyzji występujących w algorytmie: jeżeli... to... dopóki... wykonuj powtarzaj... aż do Te słowa kluczowe mają swoje odpowiedniki w każdym z języków programowania. Wprowadze słów kluczowych do opisu słownego algorytmu jest częścią tzw. pseudo - kodu, wykorzystywanego do zapisu algorytmu. Szczegółowy algorytm jest podstawą dla prawidłowo zakodowanego programu. Algorytm z wcięciami pozwala na bardziej czytelny zapis, i stanowi formalną metodę ułatwiającą śledze dróg programu. Oprócz algorytmów słownych, często stosuje się zapis algorytmu w postaci schematów blokowych. Schemat blokowy (block diagram, flowchart) to diagram, na którym algorytm jest reprezentowany przez opisane figury geometryczne, połączone liniami zgod z kolejnością wykonywania czynności wynikających z przyjętego algorytmu rozwiązania zadania; pozwala dostrzec istotne etapy algorytmu i logiczne zależności między nimi; START czytaj: n,a(i), dla i=1,...n suma=0 Start Schematy blokowe Stop suma=suma + a(i) instrukcja i=i+1 czyta danych, i n? wydruk wyników druk: suma STOP
Algorytm Euklidesa strzałka wskazuje kierunek przebiegu sterowania programem, łączy inne bloki, operand (prostokąt) wszystkie operacje z wyjątkiem instrukcji wyboru, predykat (romb) instrukcja wyboru, etykieta (owal) początek lub koc sekwencji schematu. wejście/wyjście (równoległobok). Problem: mając dane dwie liczby naturalne a i b znaleźć ich największy wspólny dzielnik. Pierwot problem ten sprowadzał się do czysto geometrycznego problemu znalezienia wspólnej miary dla dwóch odcinków. Zada algorytmiczne: Dane: a, b N, Wynik: NWD(a, Opis słowny: dane są dwie liczby a i b; jeśli a jest równe b, to NWD jest równe a, w przeciwnym wypadku, jeżeli a jest większe od b, to zmień a na równe a - b, a jeżeli a jest mjsze od b to zmień b na b - a; zacznij od początku. a=a-b Schemat blokowy START czytaj: a, b a<>b a>b b=b-a Drukuj a STOP Algorytm Euklidesa (metoda 1) Pseudokod loop if a = b then return a; else if a > b then a := a -b; else b := b -a; Język C while(a!= b) { if(a > b) a -= b; else b -= a; return a; Algorytm Euklidesa (metoda 2) Język C if(a < b) { t = a; a = b; b = t; while(b!= 0) { c = a % b; a = b; b = c; return a;
Przy opracowywaniu algorytmu zwracamy uwagę na: jego poprawność semantyczną (składnię), prostotę, czas działania, ilość zajmowanej pamięci komputera, optymalność, ograniczenia Zda proste Określa elementarny lub bardziej złożony krok algorytmu. Jeżeli jest to krok elementarny, to wystarczy przy tworzeniu programu zapisać ten krok w języku programowania. Jeżeli natomiast jest to złożony krok algorytmu, to podczas uszczegółowienia algorytmu zosta on zastąpiony sekwencją prostszych zdań. Przykład elementarnego kroku - instrukcja podstawienia (przypisania): przypisz zmiennej suma wartość zero FORTRAN: suma = 0.0 C: suma = 0.0 ; PASCAL: suma :=0.0 ; Zda złożone: oblicz pierwiastek równania kwadratowego PODEJMOWANIE DECYZJI W PROGRAMIE Jest to złożony krok algorytmu wymagający uszczegółowienia. W programie jest to realizowane poprzez instrukcję złożoną grupującą ciąg instrukcji prostych. Zda decyzyjne jeśli Zda to zawiera strukturę opisującą decyzje podejmowane w algorytmie. Istją 2 rodzaje struktur: struktura prosta : jeśli... to struktura z alternatywą: jeśli... to... w przeciwnym razie Struktura prosta jeśli warunek to zda Przykład: jeśliśrednia ocen studenta jest większa od 4.5 to wpisz studenta na listę nagród gdzie warunek jest wyrażem przyjmującym dwie wartości: - wartość prawdy, - wartość fałszu Jeżeli warunek przyjmie wartość prawdy, to wykonuje się zda, a gdy warunek przyjmie fałsz, to zda zosta wykonane. warunek : średnia ocen studenta jest większa od 4.5 Jeżeli warunek jest prawdziwy, to wykonywane jest zda: wpisz studenta na listę nagród
Struktura z alternatywą jeśli warunek to zda 1 zda 2 Rozważmy następujący problem: W zależności od wartości jakie przyjmuje zmienna x (np ocena) należy wydrukować następujące komunikaty: dla x <3 komunikat negatywna dla 3 <= x <= 5 komunikat pozytywna dla x > 5 komunikat możliwa Algorytm przyjmie postać: jeżeli x <3 to wypisz negatywna jeżeli 3 <= x i x <= 5 to wypisz pozytywna wypisz możliwa W programach numerycznych warunkiem jest najczęściej wyraże logiczne:, lub, i Np.: a lub b, (a lub b) i c,... W wyrażeniach logicznych występują też relacje: =, <>, >, <, <=, >= Np.: a > b, c <= d FORTRAN: IF ( warunek ) THEN zda 1 ENDIF IF ( warunek ) THEN zda 1 zda 2 ENDIF Przykład zdania decyzyjnego: jeśli (a > b) lub (c <= d) to podstaw x = 0 PASCAL: IF warunek THEN zda 1; C: IF warunek zda 1; IF warunek THEN zda 1 zda 2; IF warunek zda 1; zda 2;