Algorytmy. Programowanie Proceduralne 1

Podobne dokumenty
Algorytmy. Programowanie Proceduralne 1

Wykład IV Algorytmy metody prezentacji i zapisu Rzut oka na język PASCAL

Algorytm. a programowanie -

1 Wprowadzenie do algorytmiki

Instrukcje sterujące. Programowanie Proceduralne 1

2.8. Algorytmy, schematy, programy

Algorytm - pojęcie algorytmu, sposób zapisu, poziom szczegółowości, czynności proste i strukturalne. Pojęcie procedury i funkcji.

Programowanie proceduralne INP001210WL rok akademicki 2017/18 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Wprowadzenie do algorytmiki

3. Podaj elementy składowe jakie powinna uwzględniać definicja informatyki.

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 1. Karol Tarnowski A-1 p.

Algorytmy komputerowe. dr inŝ. Jarosław Forenc

Algorytm. Krótka historia algorytmów

Wykład I Cyfrowa reprezentacja informacji Algorytmy metody prezentacji i zapisu Tablice (wstęp) Rzut okiem na języki programowania

Technologie cyfrowe. Artur Kalinowski. Zakład Cząstek i Oddziaływań Fundamentalnych Pasteura 5, pokój 4.15

Definicje. Algorytm to:

Wstęp do programowania

INFORMATYKA W SZKOLE. Podyplomowe Studia Pedagogiczne. Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227

Informatyka wprowadzenie do algorytmów (II) dr hab. inż. Mikołaj Morzy

Algorytmy i złożoność obliczeniowa. Wojciech Horzelski

Algorytmy i struktury danych. wykład 2

Wykład I Cyfrowa reprezentacja informacji Algorytmy metody prezentacji i zapisu

Podstawy Programowania Algorytmy i programowanie

Algorytmy i struktury danych

Algorytmy od problemu do wyniku

Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

Wykład 1 Wprowadzenie do algorytmów. Zawartość wykładu 1. Wstęp do algorytmów i struktur danych 2. Algorytmy z rozgałęzieniami.

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Metodyki i techniki programowania

Wykład z Technologii Informacyjnych. Piotr Mika

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Algorytm selekcji Hoare a. Łukasz Miemus

Język programowania PASCAL

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

Opis problemu i przedstawienie sposobu jego rozwiązania w postaci graficznej. Gimnazjum nr 3 im. Jana Pawła II w Hrubieszowie 1

Algorytm. Krótka historia algorytmów

Metodyki i techniki programowania

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 13. Karol Tarnowski A-1 p.

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 13. Karol Tarnowski A-1 p.

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 7 Algorytmy

Instrukcja wyboru, pętle. 2 wykład. Podstawy programowania - Paskal

Podstawy i języki programowania

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Algorytm. Słowo algorytm pochodzi od perskiego matematyka Mohammed ibn Musa al-kowarizimi (Algorismus - łacina) z IX w. ne.

Podyplomowe Studium Programowania i Systemów Baz Danych

Jeszcze o algorytmach

Zapis algorytmów: schematy blokowe i pseudokod 1

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

KONSPEKT ZAJĘĆ KOŁA INFORMATYCZNEGO LUB MATEMATYCZNEGO W KLASIE III GIMNAZJUM LUB I LICEUM ( 2 GODZ.)

Podstawowe algorytmy i ich implementacje w C. Wykład 9

Jerzy Nawrocki, Wprowadzenie do informatyki

ALGORYTMY Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

WHILE (wyrażenie) instrukcja;

TEMAT: Podejmowanie decyzji w programie instrukcja warunkowa (IF).

Język C zajęcia nr 5

WHILE (wyrażenie) instrukcja;

Ilość cyfr liczby naturalnej

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Podstawy Informatyki. Algorytmy i ich poprawność

Wstęp do informatyki

Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku

Podstawy programowania. Wykład: 13. Rekurencja. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Język ludzki kod maszynowy

Algorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie

INFORMATYKA. Algorytmy.

Jerzy Nawrocki, Wprowadzenie do informatyki

ALGORYTMY I PROGRAMY

Algorytmika i programowanie. dr inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie

Podstawy Informatyki. Metalurgia, I rok niestacjonarne. Wykład 2 Algorytmy

Podstawy Programowania

Wstęp do informatyki. Maszyna RAM. Schemat logiczny komputera. Maszyna RAM. RAM: szczegóły. Realizacja algorytmu przez komputer

Podstawy programowania. Wykład 3 Konstrukcje sterujące. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Algorytm. Słowo algorytm pochodzi od perskiego matematyka Mohammed ibn Musa al-kowarizimi (Algorismus - łacina) z IX w. ne.

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Wykład 1_2 Algorytmy sortowania tablic Sortowanie bąbelkowe

POLITECHNIKA OPOLSKA

Informatyka 1. Wyrażenia i instrukcje, złożoność obliczeniowa

METODY OPISU ALGORYTMÓW KOMPUTEROWYCH

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe

Instrukcje sterujące. wer. 11 z drobnymi modyfikacjami! Wojciech Myszka :53:

Analiza algorytmów zadania podstawowe

Algorytm Euklidesa. Największy wspólny dzielnik dla danych dwóch liczb całkowitych to największa liczba naturalna dzieląca każdą z nich bez reszty.

Algorytmy. dr Dariusz Banaś (UJK) Seminarium w ramach projektu Fascynujący Świat Nauki dla uczniów gimnazjów. wersja 0.9. Start.

POLITECHNIKA OPOLSKA

Teraz bajty. Informatyka dla szkół ponadpodstawowych. Zakres rozszerzony. Część 1.

Poprawność semantyczna

Schematy blokowe. Algorytmy Marek Pudełko

Podstawy Informatyki. Sprawność algorytmów

ALGORYTMY I STRUKTURY DANYCH

Języki programowania zasady ich tworzenia

Technologia informacyjna Algorytm Janusz Uriasz

Algorytmika i pseudoprogramowanie

Informatyka 1. Plan dzisiejszych zajęć. zajęcia nr 1. Elektrotechnika, semestr II rok akademicki 2008/2009

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

1 Podstawy c++ w pigułce.

Podstawy Informatyki. Programowanie. Inżynieria Ciepła, I rok. Co to jest algorytm? Istotne cechy algorytmu

EGZAMIN MATURALNY Z INFORMATYKI. 10 maja 2017 POZIOM ROZSZERZONY. Godzina rozpoczęcia: 14:00 CZĘŚĆ I

Transkrypt:

Algorytmy Programowanie Proceduralne 1

Przepis Warzenie piwa Brunświckiego Programowanie Proceduralne 2

Przepis Warzenie piwa Brunświckiego składniki (dane wejściowe): woda, słód, itd. wynik: beczka piwa sprzęt: beczka, piwowar (mielcarz) przepis: oprogramowanie, algorytm instrukcje: dodawanie składników, gotowanie, odlewanie, dolewanie, fermentacja, szpuntowanie Programowanie Proceduralne 3

Algorytm Algorytm jednoznacznie zdefiniowany ciąg operacji prowadzący w skończonej liczbie kroków do rozwiązania zadania. Algorytm Euklidesa, ok. 300 p.n.e. algorytm znajdowania największego wspólnego dzielnika (NWD) dwóch liczb całkowitych dodatnich. Uznawany za pierwszy kiedykolwiek wymyślony niebanalny algorytm. Programowanie Proceduralne 4

Zadanie obliczeniowe Algorytmy to rozwiązania pewnych zadań - zadań algorytmicznych. Specyfikacja zadania algorytmicznego warunki jakie muszą spełniać dane wejściowe określenie oczekiwanych wyników jako funkcji danych wejściowych Dodatkowe ograniczenia algorytmu, np. dotyczące ilości operacji. Przykład: Algorytm Euklidesa Dane wejściowe: liczby całkowite x, y > 0 Wynik: NW D(x, y) Programowanie Proceduralne 5

Zadanie obliczeniowe D. Harel, [2] Programowanie Proceduralne 6

Cechy algorytmów Cechy algorytmu skończoność - ograniczona liczna kroków poprawność - zgodny ze specyfikacją uniwersalność - poprawny dla klasy problemów efektywność - niska złożoność to gwarancja użyteczności określoność - zrozumiałe polecenia, możliwe do wykonania w jednoznacznej kolejności określony stan początkowy i wyróżniony koniec Programowanie Proceduralne 7

Struktury sterujące Ciąg struktur sterujących definiuje kolejność wykonywanych operacji. bezpośrednie następstwo: wykonaj A, potem B wybór warunkowy (rozgałęzienie): jeśli Q, to wykonaj A, w przeciwnym razie wykonaj B iteracja ograniczona: wykonaj A dokładnie N razy iteracja warunkowa: dopóki Q, wykonuj A instrukcja skoku: skocz do G podprogram - wyodrębniony fragment programu, funkcja Struktury sterujące można dowolnie składać: np. pętle zagnieżdżone. Nie ma granic zawiłości algorytmów. Programowanie Proceduralne 8

Instrukcja skoku Głównym przykazaniem programowania strukturalnego jest nieużywanie instrukcji skoku. 1960-70 gorąca debata na ten temat Trudności techniczne, niejednoznaczność, nieczytelność: skoki do wnętrza pętli, z pętli do pętli, z podprogramu (funkcji) do podprogramu, itp.... Brak instrukcji skoku wymaga odpowiedniego używania pozostałych struktur sterujących (warunków i pętli) Przejrzystość - ważny aspekt programowania Używanie instrukcji skoku to zły styl programowania Programowanie Proceduralne 9

Reprezentacja algorytmu Opis językiem naturalnym Lista kroków Schematy blokowe Pseudo-języki Języki wysokiego poziomu Programowanie Proceduralne 10

Algorytm Euklidesa Problem: znalezienie największej liczby całkowitej dzielącej bez reszty liczby całkowite dodatnie a i b Pomysł: Zauważmy, że NW D(a, b) = k = a = nk, b = mk = a b = (m n)k Stąd dla a > b zachodzi. NW D(a, b) = NW D(a b, b) = NW D(a b, a) Programowanie Proceduralne 11

Algorytm Euklidesa Dane są dwie liczby całkowite. Odejmij od większej liczby mniejszą liczbę a większą liczbę zastąp uzyskaną różnicą. Powtarzaj tą czynność tak długo aż obie liczby będą równe. Otrzymana liczba jest największym wspólnym dzielnikiem liczb wejściowych. Specyfikacja Dane wejściowe: liczby całkowite a, b > 0 Wynik: liczba całkowita a stanowiąca największy wspólny dzielnik Lista kroków 1 jeśli a jest równe b to jest to największy dzielnik 2 jeśli a > b to zastąp a wartością a b i wróć do punktu 1 3 jeśli a < b to zastąp b wartością b a i wróć do punktu 1 Algorytm zakłada istnienie operacji, = (porównanie) oraz >. Programowanie Proceduralne 12

Schematy blokowe Stan Instrukcje Blok graniczny: start, stop, przerwanie, opóźnienie. Blok operacyjny: zmiana wartości, postaci lub miejsca zapisu danych. Decyzja Blok decyzyjny, rozgałęzienie. Wejście/ wyjście Wprowadzanie danych i wyprowadzenia wyników. Łącznik Połączenie z innym fragmentem diagramu. Podprogram Wywołanie podprogramu. Programowanie Proceduralne 13

Przykład: Schemat blokowy Algorytm Euklidesa z odejmowaniem Start Wprowadź a,b tak a = b? nie a > b? tak a a b nie b b a Wypisz a Stop Programowanie Proceduralne 14

Pseudo-kod Algorytm 1 Algorytm Euklidesa dopóki a b wykonuj jeżeli a > b wykonaj a a b w przeciwnym wypadku b b a struktura kodu języka wysokiego poziomu (często Pascal) uproszczona składnia na rzecz prostoty i czytelności formuły matematyczne, język naturalny, podprogramy nie zawiera szczegółów implementacji Dla ludzi, nie dla maszyn. Programowanie Proceduralne 15

1 / Algorytm E u k l i d e s a. / 2 3 # include <s t d i o. h> 4 5 int main ( ) 6 { 7 int a, b ; 8 9 printf ( " Podaj dwie liczby calkowite : " ) ; 10 scanf ( "%d %d", &a, &b ) ; 11 12 while ( a!= b ) 13 if ( a > b ) a = a b ; 14 else b = b a ; 15 16 printf ( "NWD = %d\n", a ) ; 17 18 return 0 ; 19 } Program w języku C euclid1.c Programowanie Proceduralne 16

Program w języku Pascal 1 program NWD ( input, output ) ; 2 { Algorytm E u k l i d e s a. } 3 var 4 A, B : Integer ; 5 begin 6 Writeln ( Podaj dwie liczby calkowite : ) ; 7 Readln ( a, b ) ; 8 9 while a <> b do 10 begin 11 if a > b then a := a b 12 else b := b a ; 13 end ; 14 Writeln ( NWD =, a ) ; 15 end. euclid1.pas Programowanie Proceduralne 17

Program w języku Fortran 77 1 PROGRAM EUCLID1 2 c Algorytm Euklidesa w jezyku Fortran 77 3 4 WRITE (, ) Podaj dwie liczby calkowite : 5 READ (, ) N, M 6 7 DO WHILE ( N. NE. M ) 8 IF ( N. GT. M ) THEN 9 N = N M 10 ELSE 11 M = M N 12 ENDIF 13 ENDDO 14 WRITE (, ) NWD=, N 15 END euclid1.f Programowanie Proceduralne 18

Algorytm Euklidesa cd. Czy algorytm jest poprawny? Dla jakich danych? Problem stopu. Efektywność algorytmu. Ile iteracji należy się spodziewać dla różnych danych? Programowanie Proceduralne 19

Algorytm Euklidesa z operacją modulo Algorytm 2 Algorytm Euklidesa 1: dopóki b 0 wykonuj 2: c a mod b 3: a b 4: b c wymaga operacji dzielenie modulo oraz złożoność: dla a > b 0 co najwyżej 2 log 2 (a + b) iteracji Programowanie Proceduralne 20

Przykład: Sortowanie Algorytm 3 Sortowanie przez wybieranie (selection sort) Dane wejściowe: ciąg n liczb A = {a 1, a 2,..., a n } Wynik: uporządkowany ciąg a 1 a 2,..., a n 1: i 1 2: dopóki i < n wykonuj 3: k minind({a i, a i+1,..., a n }) Podprogram 4: a i a k 5: i i + 1 minind() w podanym ciągu wyszukuje indeks elementu o najmniejszej wartości. Wizualizacja algorytmów sortowania: AlgoRythmics Programowanie Proceduralne 21

Podprogram Esencja programowania proceduralnego ekonomiczność - ujednolica powtarzające się bloki programu - mniej kodowania przejrzystość, nawet przy złożonych i obszernych algorytmach podprogram staje się nową instrukcją elementarną w języku C brak wbudowanych funkcji, tylko main() uproszczenie problemu poprzez rozbicie na mniejsze pod-problemy programowanie zstępujące (top-down) programowanie wstępujące (bottom-up) podprogram uruchamiający sam siebie - rekurencja Programowanie Proceduralne 22

Złożoność obliczeniowa algorytmu Złożoność obliczeniowa liczba operacji wykonywanych przez algorytm. Zazwyczaj wyznaczana względem ilości danych lub ich rozmiaru. Ile operacji wymaga... porównanie dwóch liczb całkowitych? obliczenie NW D(a, b)? znalezienie pewnego elementu wśród N elementów? ile operacji wymaga posortowanie listy N elementów? Problem komiwojażera: znalezienie najkrótszej drogi łączącej wszystkie miasta? Programowanie Proceduralne 23

Problem TSP Travelling salesman problem [1] M.M. Sysło, Algorytmy Programowanie Proceduralne 24

Problemy o rozsądnych rozwiązaniach Problemy P i NP [2] D. Harel, Rzecz o istocie informatyki. Algorytmika. Programowanie Proceduralne 25

Problemy o rozsądnych rozwiązaniach Problemy P i NP Rozsądne rozwiązania, wykonywalne w czasie wielomianowym log N, N, N log N, N 7 + N 3 + 2 Nierozsądne, niepraktyczne, czas ponad-wielomianowy 2 N, 1.001 N + N 7, N N, N! [2] D. Harel, Rzecz o istocie informatyki. Algorytmika. Programowanie Proceduralne 26

http://xkcd.com Programowanie Proceduralne 27

Typy danych Algorytmy manipulują danymi dane wejściowe Algorytm Dane wyjściowe Reprezentacja danych kształtuje algorytm! zmienne: liczby, znaki, a = 3 tablice, wektory, listy, a[3]=3 tablice wielowymiarowe, tablice tablic, a[3,3]=3 rekordy, struktury, a.b=3 a.c= a kolejki, stosy, drzewa pliki, bazy danych a[3][3]=3 Programowanie Proceduralne 28

Podsumowanie Od problemu do rozwiązania analiza problemu specyfikacja zadania: dopuszczalny zestaw danych wejściowych pożądane wyniki jako funkcja danych wejściowych algorytm - rozwiązanie zadania poprawność algorytmu: względem specyfikacji problem stopu efektywność (złożoność): Każda akcja zajmuje czas! implementacja algorytmu program Programowanie Proceduralne 29

Literatura dodatkowa Maciej M. Sysło, Algorytmy, WSiP, Warszawa, 2002. D. Harel, Rzecz o istocie informatyki. Algorytmika., WNT, Warszawa, 1992. Fulmański Piotr, Sobieski Ścibór, Wstęp do informatyki, Uniwersytet Łódzki, 2004 Programowanie Proceduralne 30