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 Początek sieci działań (schematu). W schemacie może występować tylko jeden taki element. Blok wejścia-wyjścia - oznacza czynność wprowadzania danych i przyporządkowywania ich zmiennym używanym w dalszej części programu albo czynność wyprowadzania wyników obliczeń. Napis wewnątrz określa rodzaj czynności (np. czytaj, pisz) oraz nazwy zmiennych i stałych. Element (blok) przetwarzania (obliczeniowy) oznacza wykonanie operacji ( lub zbioru operacji). Wewnątrz bloku określa się rodzaj czynności przetwarzania i ich argumenty. Blok decyzyjny (warunkowy, alternatywny, przełącznik) - oznacza element wyboru jednego z dwóch wariantów dalszego wykonywania programu. Wybór jest dokonywany na podstawie wyniku sprawdzenia warunku (b ędącego wyrażeniem logicznym) umieszczonego wewnątrz. Blok ten powinien zawsze posiada ć dwa wyjścia opisane "T" (Tak, True) i "N" (Nie, False). Łącznik wewnątrzstronicowy - służy do łączenia odrębnych części schematu znajdujących się na tym samym arkuszu. Ułatwia zachowanie przejrzystości schematu. Komplementarne elementy oznacza się tym samym symbolem. Zakończenie wykonywania czynności. "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 : ax 2 + 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 KOMPILATOR.obj.exe BIBLIOTEKARZ.lib LINKER "Metody i języki programowania. Programowanie strukturalne", Tadeusz Wilusz, 2004 10 asemblery Fortran HISTORIA Algol-60 Pascal Modula 2 C Loglan Loglan Simula-67 Ada Ada C++ C++ inne inne języki języki hybrydowe 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 Smalltalk Java Java "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 PDP- 11. "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