Algorytm Definicja i algorytmu
Transkrypt
Algorytm Definicja i algorytmu
METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 01 Algorytm • Nazwa algorytm wywodzi się od nazwiska perskiego matematyka Muhamed ibn Musy al-Chorezmi (z Chorezmu), który ok. 820 r n.e. opisał pozycyjny system kodowania dziesiętnego liczb i sztukę liczenia w tym systemie. W XII w. Europie przetłumaczono jego książkę i rozpoczęto wykonywanie obliczeń metodą znaną dzisiaj jako"pisemną". • · [w informatyce] dokładny przepis wykonania w określonym porządku skończonej liczby operacji, pozwalający na rozwiązanie każdego zadania danego typu "Metody i języki programowania. Programowanie strukturalne", Tadeusz Wilusz, 2004 2 Definicja i algorytmu • Ściśle określony tok postępowania gwarantujący rozwiązanie określonego problemu na drodze wykonania skończonej liczby operacji • własności: – – – – – uniwersalny skończony jednoznaczny zupełny wykonalny • zapisany w języku wykonawcy • zlecane operacje są „znane” wykonawcy "Metody i języki programowania. Programowanie strukturalne", Tadeusz Wilusz, 2004 3 1 Notacje algorytmu • Języki naturalne – polski, angielski, etc. – wzory matematyczne – pseudojęzyk • Schematy blokowe (diagramy przepływu) - graficzna prezentacja algorytmu zapisanego w języku naturalnym • Języki programowania – maszynowy (wewnętrzny) – asembler (język symboliczny) – języki wyższego rzędu "Metody i języki programowania. Programowanie strukturalne", Tadeusz Wilusz, 2004 4 Język schematów blokowych P o c z ą t e k s ie c i d z ia ła ń (sc h e m a tu ) . W s c h e m a c ie m o ż e w y s tę p o w a ć t y lk o j e d e n tak i e le m e n t. B lo k w e j ś c ia - w y j ś c ia - o z n a c z a czy n n oś ć w p r o w a d z a n ia d a n y c h i prz y p o rz ą d k o w y w a n ia i c h z m i e n n y m u ż y w a n y m w d a l s z e j c zę ś c i p ro g r a m u a lb o c z y n n o ść w y p r o w a d z a n ia w y n i k ó w o b l ic z e ń . N a p is w e w n ą trz o k re ś la r o d z a j c z y n n o ś c i (n p . cz y ta j, p is z ) o r a z n a z w y z m ie n n y c h i s tał y c h . E le m e n t ( b lo k ) p r z e t w a r z a n ia ( o b l ic z e n io w y ) o z n a c z a w y k o n a n ie o p e r a c ji ( lu b z b io r u o p e r a c j i ) . W e w n ą t rz b lo k u o k re ś la s ię r o d z a j c z y n n o śc i p r z e tw a rz a n i a i ich a r g u m e n t y . B lo k d e c y z y j n y ( w a ru n k o w y , altern a t y w n y , p r z e ł ąc z n i k ) - o z n a c z a e l e m e n t w y b o r u je d n e g o z d w ó c h w a r i a n tó w d a ls z e g o w y k o n y w a n ia p r o g r a m u . W y b ó r j e s t d o k o n y w a n y n a p o d staw ie w y n ik u sp r a w d z e n ia w a r u n k u (b ę d ą c e g o w y r a ż e n ie m lo g i c z n y m ) u m ie s z c z o n e g o w e w n ą trz . B lo k te n p o w i n i e n z a w sze p o s ia d a ć d w a w y jśc i a o p isa n e " T " ( T a k , T r u e ) i " N " (N ie , F a ls e ). Ł ą c z n i k w e w n ą t r z s t r o n i c o w y - s łu ż y d o łą c z e n i a o d r ę b n y c h c z ę ś c i sc h e m a tu z n a j d u j ą c y c h s ię n a t y m s a m ym a r k u s z u . U ł a tw ia z a c h o w a n i e p r z e jrz y s to ś c i sc h e m a tu . K o m p l e m e n ta r n e e le m e n t y o z n a c z a s i ę t y m s a m y m sym b o l e m . Z a k o ń c z e n ie w y k o n y w a n i a c z y n n oś c i. "Metody i języki programowania. Programowanie strukturalne", Tadeusz Wilusz, 2004 5 Algorytm liniowy Obliczenie pola prostokąta jest dla każdego bardzo prostym zadaniem. Jest oczywiste, że pole prostokąta równe jest iloczynowi długości jego boków, czyli P = ab Na rysunku z lewej strony przedstawiono zbiór (sekwencję) prostych czynności jakie należy wykonać, w określonej kolejności, aby obliczyć pole prostokąta. Jest to Zapis w pseudokodzie: POCZĄTEK Czytaj(a,b) P := a*b Pisz(P) KONIEC "Metody i języki programowania. Programowanie strukturalne", Tadeusz Wilusz, 2004 6 2 Algorytm rozgałęziony Równanie kwadratowe : ax2 + bx + c = 0 można rozwiązać różnymi metodami. Jedną z nich jest zastosowanie wyróżnika (tzw. delty). W przykładowym algorytmie oznaczony jest literą D. W zależności od wartości tego wyróżnika można rozpatrywać następujące sytuacje: § § § Jeśli D > 0 to równanie posiada dwa pierwiastki x1 i x2: Jeśli D = 0 wtedy równanie posiada jeden pierwiastek. Jeśli D < 0 to wówczas równanie nie posiada rozwiązań rzeczywistych (istnieją tylko pierwiastki urojone - patrz akademicki zakres matematyki "Metody i języki programowania. Programowanie strukturalne", Tadeusz Wilusz, 2004 7 Algorytm z cyklem Algorytm poszukiwania najmniejszej liczby w n elementowym zbiorze liczb a1, a2, ..., an Jest to także algorytm z cyklem (algorytm z pętlą). Analogicznie post ępując wyszukamy także wartość maksymalną. Zmienna pomocnicza i pełni rolę licznika pętli. Algorytm w języku naturalnym: 1. Przyjmujemy i = 1 i idziemy do etapu 2. 2. Przyjmujemy Min = 1 i idziemy do następnego etapu. 3. Sprawdzamy czy i < n. Jeśli tak to przechodzimy do etapu 4. W przeciwnym przypadku ko ńczymy poszukiwanie i podajemy wartość Min. 4. Zwiększamy i o 1 ( aktualizacja licznika p ętli) i przechodzimy do kolejnego etapu. 5. Porównujemy ai (kolejna liczba z przeszukiwanego zbioru) z bieżącą wartością Min.. Jeśli ai >= Min to przechodzimy do etapu 3. W przeciwnym przypadku przechodzimy do etapu 2 (czyli dotychczasowy element minimalny zostanie zastąpiony kolejnym mniejszym) "Metody i języki programowania. Programowanie strukturalne", Tadeusz Wilusz, 2004 8 Język programowania • Jest to notacja dla której opracowano program automatycznego przekładu (translator) na język maszynowy (wykonawcy) • Podstawowe techniki translacji: – kompilacyjna – interpretacyjna "Metody i języki programowania. Programowanie strukturalne", Tadeusz Wilusz, 2004 9 3 Translacja kompilacyjna • EDYTOR .obj • KOMPILATOR .exe • LINKER • BIBLIOTEKARZ .lib "Metody i języki programowania. Programowanie strukturalne", Tadeusz Wilusz, 2004 10 HISTORIA asemblery Fortran Algol-60 Simula-67 Simula-67 Pascal C Loglan Loglan Modula 2 Smalltalk Smalltalk Ada Ada C++ C++ inne innejęzyki językihybrydowe hybrydowe Java Java Simula-67: lata 60-te Smalltalk: lata 70-te, rozwój w latach 90-tych PASCAL, C: lata 70-te Ada: początek lat 80 C++: początek lat 80-tych Java: połowa lat 90-tych popularność programowania obiektowego: lata 90 "Metody i języki programowania. Programowanie strukturalne", Tadeusz Wilusz, 2004 11 Jakość oprogramowania – Poprawność (correctness) program ma robić dokładnie (i poprawnie) to, co zostało zdefiniowane w specyfikacji – Odporność (robustness) program ma zachowywać się sensownie w każdej (nawet nieprzewidzianej) sytuacji – Modyfikowalność i rozszerzalność program musi być łatwo dostosowywalny do zmian w specyfikacji – Możliwość wielokrotnego użycia elementów projektu i programu (reusability) typowe fragmenty programu muszą dać się łatwo użyć w innych programach lub w tym samym programie – Kompatybilność – Efektywność – Przenaszalność "Metody i języki programowania. Programowanie strukturalne", Tadeusz Wilusz, 2004 12 4 Jak osiągnąć cele jakości oprogramowania? – Modularność, programowanie strukturalne, wielokrotny użytek procedur (funkcji) • Pascal, Modula 2, C – Wielokrotny użytek całych struktur danych, ochrona danych • Modula 2 – Wielokrotny użytek struktur danych i obiektów, hermetyzacja poprzez klasy i dziedziczenie • języki obiektowe Użycie metodologii obiektowej (od analizy, poprzez projekt do programu) ->następny semestr: • przyspiesza proces tworzenia systemu poprzez wielokrotne użycie elementów • ułatwia modyfikowalność i rozszerzalność • pozwala szybko stworzyć prototyp "Metody i języki programowania. Programowanie strukturalne", Tadeusz Wilusz, 2004 13 Krótka historia języka C 1969 język BCPL; Martin Richards z University Mathematical Laboratories w Cambridge; dla pierwszej instalacji systemu operacyjnego UNIX 1970 język B zdefiniowany dwa lata wcześniej przez Kena Thompsona dla pierwszego systemu UNIX działającego na DEC PDP-7. 1972 definicja języka C przez Dennisa M. Ritchie z Bell Laboratories w New Jersey dla systemu UNIX działającego na minikomputerze DEC PDP11. "Metody i języki programowania. Programowanie strukturalne", Tadeusz Wilusz, 2004 14 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*= = = = = = = = = = = = = = = = = = */ /* Między tymi znaczkami można pisać, co się chce - to komentarz*/ #include < stdio.h> /* znaczek # - polecenie(dyrektywa) translatora*/ void main (void) { /* poczatek definicji funkcji głównej programu */ char x[100]; /* deklaracja zmiennej tekstowej - na Twoja odpowiedz na pozdrowienie komputera */ printf("Witaj !\r\n"); /*komputer wypisuje pozdrawienie */ scanf("%s",x); /* i czeka na Twoja odpowiedz z klawiatury */ } /* koniec instrukcji zlozonej */ Repertuar zdań tekstu programu w języku C: KOMENTARZE, DYREKTYWY TRANSLATORA, DEKLARACJE (DEFINICJE) OBIEKTÓW, INSTRUKCJE "Metody i języki programowania. Programowanie strukturalne", Tadeusz Wilusz, 2004 15 5