Podstawy Informatyki Metalurgia, I rok Wykład 4 Algorytmy Sformułowa problemu. 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ń. Programowa 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 czynnosci, 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. Skonczona 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. Pochodze nazwy: Algorytm od nazwiska w wersji łacińskiej Algorithmus, Algorismus perskiego matematyka Muhammeda ibn Musy zwanego al Chuwarismi, żyjącego w IX w (podał on algorytmy wykonywania działań arytmetycznych 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 Artysta? 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 (procedura). 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 "Artysta 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 (suma). 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ścia 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,b). 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. Schemat blokowy START czytaj: a, b a<>b Drukuj a a=a-b a>b b=b-a STOP Pseudokod loop Algorytm Euklidesa (metoda 1) 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: a). IF ( warunek ) THEN zda 1 ENDIF b). IF ( warunek ) THEN zda 1 ELSE zda 2 ENDIF Przykład zdania decyzyjnego: jeśli (a > b) lub (c <= d) to podstaw x = 0 PASCAL: a). IF warunek THEN zda 1; C: a). IF warunek zda 1; b). IF warunek THEN zda 1 ELSE zda 2; b). IF warunek zda 1; ELSE zda 2;
Instrukcja decyzyjna wybierz Zda wybierz służy do wyboru jednej z kilku możliwości. Ma ono postać: wybierz przełącznik z wartość_1: zda_1 wartość_n: zda_n akcja awaryjna Przykład: wybierz p z 1: wykonaj wariant pierwszy 2: wykonaj wariant drugi 3: wykonaj wariant trzeci wydrukuj komunikat o błędzie Przykład: Program cenzurka1 wybierz ocena z 5: pisz( bardzo dobry ); 4: pisz( dobry ); 3: pisz( dostateczny ); 2: pisz( dostateczny ); pisz( blad danych ) Koc Program cenzurka2. jeżeli ocena = 5 to pisz( bardzo dobry ) jeżeli ocena = 4 to pisz( dobry ) jeżeli ocena = 3 to pisz( dostateczny ) jeżeli ocena = 2 to pisz( dostateczny ) pisz( blad danych ) Blok instrukcji W przypadku, gdy w danej instrukcji, np. instrukcji warunkowej, powinna wykonać się więcej niż jedna instrukcja, wówczas stosowany jest blok instrukcji. C: { instrukcja1; instrukcja2; instrukcja3; Pascal: begin instrukcja1; end; instrukcja2; instrukcja3; Iteracja warunkowadopóki(while) dopóki(wyraże) wykonuj instrukcja1; wyraże instrukcja1 Działa pętli: Obliczana jest wartość wyrażenia Jeśli wyraże jest równe fałszywe to instrukcja1 jest w ogóle wykonywana Wpp. wykonywana jest instrukcja1. Ponow obliczana jest wartość wyrażenia i ponow sprawdzana jego prawdziwość itd. Jeśli wyraże będzie fałszywe, to działa pętli zosta przerwane Instrukcja1 może wykonać się ani jeden raz! Uwaga: oblicze wartości wyrażenia odbywa się przed wykonam instrukcji1
Iteracja warunkowawykonuj...aż do... (do... until...) wykonuj instrukcja1 aż do(wyraże) ; instrukcja1 wyraże Instrukcja1 musi wykonać się co najmj jeden raz! Działa pętli: Wykonywana jest instrukcja1 Obliczana jest wartość wyrażenia Jeśli wyraże jest równe fałszywe to instrukcja1 jest wykonywana kolejny raz Ponow obliczana jest wartość wyrażenia i ponow sprawdzana jego prawdziwość itd. Jeśli wyraże będzie prawdziwe, to działa pętli zosta przerwane Uwaga: oblicze wartości wyrażenia odbywa się po wykonaniu instrukcji1 Iteracja ograniczonadla(for) dla <zmienna> od <w1<> do <w2> (z krokiem <k>) wykonuj instrukcja1 ; Działa pętli: <zmienna> <w1> <zmienna> + <k> zmienna <w2> instrukcja1 Instrukcja1 może wykonać się ani jeden raz! Wykona instrukcji inicjalizujących pętlę <zmienna> <w1> Sprawdze wyrażenia warunkowego <zmienna> <w2>. Jeśli fałsz, praca pętli zostaje zakończona, Jeśli prawda, wykonana zosta instrukcja1 Wykona instrukcji zwiększ <zmienna> o <k> Uwaga: sprawdze wyrażenia <zmienna> <w2> odbywa się przed wykonam instrukcja1 Instrukcje wejścia/wyjścia Umożliwiają komunikowa się programu z użytkownikiem. Umożliwiają czyta danych jak rówż wypisywa komunikatów i wyników prowadzonych obliczeń. Np.: Pascal - read(a,b); { z klawiatury wprowadzamy : np. 12 5 writeln(a); {drukujemy na ekra wartość a (np. 12)