wykładzie - Instytut Informatyki UG
Transkrypt
wykładzie - Instytut Informatyki UG
Stefan Sokołowski WSTĘP DO PROGRAMOWANIA Inst. Informatyki UG, Gdańsk, 2011/2012 Wykład 1. ALGORYTM A PROGRAM, str. 1 WSTĘP DO PROGRAMOWANIA — reguły gry Zasadnicze informacje: http://inf.ug.edu.pl/∼stefan/Dydaktyka/WstepDoProg • szkicowy program wykładu, laboratorium i ćwiczeń • spis literatury • slajdy do wykładów — warto robić notatki ale nie warto przepisywać slajdów z ekranu • zadania z ćwiczeń i z laboratorium w moich grupach • itd. WSTĘP DO PROGRAMOWANIA — reguły gry Kontakt ze mną: konsultacje: środy 10:15–11:00 w pok. 57 e-mail: [email protected] antyspam: unikać frikoprowajderów, np.: o2.pl wp.pl gazeta.pl najlepiej używać konta mailowego w II UG Zaliczenia: • zaliczenie laboratorium, • zaliczenie ćwiczeń audytoryjnych, • znajdowanie błędów w wykładzie. Wykład 1. ALGORYTM A PROGRAM, str. 3 Algorytm a program Przykład: algorytmu (jak dojść) M — Pójdzie pan prosto do świateł; skręci pan w prawo; dojdzie pan do zielonego płotu; przejdzie pan na drugą stronę ulicy; ··· Algorytm a program Przykład: algorytmu (stary przepis kucharski) M weź kop,e jaj; m,aki − ile zabior,a; do l-uskania orzechów zasadź trzy dziewki na pó-l dnia a bacz, iżby nie jad-ly; ··· Wykład 1. ALGORYTM A PROGRAM, str. 5 Algorytm a program Przykład: algorytmu (potęgowanie przez wielokrotne mnożenie) M 34 = 0. na razie przyjmij, że wynik = 1 4 = 1·3 i że w = wykładnik; 3 = 3·3 1. jeśli w = 0, to zakończ obliczenie; 2 = 9·3 2. jeśli w > 0, to 1 = 27 · 3 domnóż wynik przez podstawę; 0 = 81 · 3 zmniejsz w o 1; = 81 idź ponownie do 1; Algorytm a program Algorytm: spis kolejnych czynności potrzebnych do rozwiązania zadania. Program: prezentacja (zapis) algorytmu w sposób ustalony konwencją (np. w języku, rysunku, itp.). algorytm ←→ twierdzenie program ←→ tekst twierdzenia Tekst poprawnego twierdzenia może być błędny (np. z pomyłką drukarską). Czytelnik-człowiek na ogół ma dosyć intuicji, żeby się nie nabrać na ten błąd. Program realizujący poprawny algorytm może być niepoprawny (np. z powodu literówki zrobionej przy pisaniu na klawiaturze). Czytelnik-komputer na ogół nie potrafi poprawić błędu. W pewnych przypadkach jest w stanie wykryć, że „coś jest niedobrze” i wskazać przybliżone miejsce błędu w programie. Wykład 1. ALGORYTM A PROGRAM, str. 7 Algorytm a program Algorytm rozwiązujący jakieś zadanie jest poprawny lub niepoprawny dla tego zadania niezależnie od konkretnego sposobu zapisu (języka) czy komputera. Z istnienia programu realizującego dany algorytm w jakimś języku programowania wynika na ogół istnienie programów realizujących ten algorytm w innych językach programowania — algorytmy nie zależą od języków. Dlatego możemy rozważać osobno • algorytm rozwiązujący zadanie (bez związku z konkretnym językiem czy komputerem), • program prezentujący algorytm (w konkretnym języku). Programowanie: kompromis między tym, co jest potrzebne, a tym, co da się zrobić. Ten sam algorytm w różnych językach Przykład: (potęgowanie przez wielokrotne mnożenie) M Opis słowny: 0. na razie przyjmij, że wynik = 1 i że w = wykładnik; 1. jeśli w = 0, to zakończ obliczenie; 2. jeśli w > 0, to domnóż wynik przez podstawę; zmniejsz w o 1; idź ponownie do 1; (inicjalizacja) (pętla) Wykład 1. ALGORYTM A PROGRAM, str. 9 Ten sam algorytm w różnych językach Przykład: (potęgowanie przez wielokrotne mnożenie — schemat blokowy) M ? wynik ← 1; w ← wykładnik w>0 ? | w=0 ? wynik ← wynik · podstawa ? w ←w−1 ? Ten sam algorytm w różnych językach Przykład: (potęgowanie przez wielokrotne mnożenie — program w Pascalu i w C) M inicjalizacja pętli warunek pętli Pascal: C: wynik := 1; w := wykladnik; while w>0 do begin wynik := wynik*podstawa; w := w-1; end wynik = 1; w = wykladnik; while (w>0) { wynik = wynik*podstawa; w = w-1; } ciało pętli Wykład 1. ALGORYTM A PROGRAM, str. 11 Ten sam algorytm w różnych językach Przykład: (potęgowanie przez wielokrotne mnożenie — program w Pascalu i C) M inicjalizacja pętli warunek pętli .. ... .... .... ....... .... ....... . . . . . . . ... . . . . . . . ... . . . . . . . . ... . . . ...... ... . . . . . . . . . ... . . . . . . . . . Pascal: C: ... ....... . . . . . ... . . ..... . . . . . . . . . . . . . . . . .. ...... . . . . . . . . wynik := 1; wynik = 1; . . . .. .. ........... .... ........... . . . . . . . . . . . . . . . w := wykladnik; w = wykladnik; .............. ....... ......... .............. ................ ............ while w>0 do begin wynik := wynik*podstawa; w := w-1; end while (w>0) { wynik = wynik*podstawa; w = w-1; } ciało pętli Symulacja działania programu Przykład: (potęgowanie przez wielokrotne mnożenie — schemat blokowy) M podstawa wykładnik wynik w w > 0 0 ? wynik ← 1; w ← wykładnik 1 ? w>0 | w=0 2 ? wynik ← wynik · podstawa 3 ? w ←w−1 4 ? 0 3 4 1 3 4 1 4 2 3 4 1 4 3 3 4 3 4 1 3 4 3 3 2 3 4 3 3 3 3 4 9 3 1 3 4 9 2 2 3 4 9 2 3 3 4 27 2 1 3 4 27 1 tak tak tak tak Wykład 1. ALGORYTM A PROGRAM, str. 13 Symulacja działania programu — c.d. Przykład: (potęgowanie przez wielokrotne mnożenie — schemat blokowy) M podstawa wykładnik wynik w w > 0 0 ? wynik ← 1; w ← wykładnik 1 ? w>0 | w=0 2 ? wynik ← wynik · podstawa 3 ? w ←w−1 4 ? 1 3 4 27 1 2 3 4 27 1 3 3 4 81 1 1 3 4 81 0 4 3 4 81 0 tak nie Symulacja działania programu Symulacja polega na ręcznym wykonaniu komend programu, „wodząc palcem” po jego tekście. W trakcie tworzenia programu programista nie powinien symulować jego obliczeń, bo nie jest komputerem. Programista powinien patrzeć na program z szerszej perspektywy niż pojedyncze komendy. Natomiast w razie wystąpienia błędu, ręczne wykonanie fragmentu programu i porównanie z wykonaniem komputera może pomóc w znalezieniu przyczyny błędu. Dlatego programista musi umieć przeprowadzić symulację obliczenia. Prawie każdy program ma poprawnie działać na wielu różnych danych; zwykle tych możliwych danych jest nieskończenie wiele. Nie ma więc możliwości przesymulowania go, ani uruchomienia na komputerze (przetestowania) na wszystkich danych. Testowanie może wskazać błąd. Ale nie może wykazać poprawności (braku błędu). Wykład 1. ALGORYTM A PROGRAM, str. 15 Imperatywny charakter algorytmów i programów Schematy blokowe i programy w większości języków programowania „rozkazują” wykonawcy (komputerowi), co ma robić i w jakiej kolejności. Komputer nie kwestionuje poleceń (o ile nie zawierają one błędów formalnych). Jeśli ciąg poleceń (program) jest źle przemyślany, to komputer „w dobrej wierze” wyliczy złe wartości. Pełna odpowiedzialność za skutki wykonania programu spoczywa na programiście. Istnieją języki programowania o innym (nieimperatywnym) charakterze: • języki wyspecjalizowane do wąskich celów (np. SQL do obsługi baz danych, lub HTML do tworzenia witryn internetowych); • języki programowania ogólnego o bardziej matematycznym charakterze (np. LISP, Standard ML, Prolog). Elementy programu imperatywnego (np. w C) komenda = instrukcja = polecenie = fragment programu • Przypisanie: nadaj zmiennej wartość; np. w = w-1; wynik = 1; W C znak = nie oznacza równości tylko przypisanie; równość oznacza się przez == ; przypisanie zawsze kończy się średnikiem. • Następstwo instrukcji: wykonaj najpierw to a potem tamto. . . ; np. wynik = 1; w = wykladnik; • Pętla: nadaj zmiennym wartości początkowe (inicjalizacja) wielokrotnie powtarzaj instrukcję (ciało) aż przestanie być spełniony warunek pętli Wykład 1. ALGORYTM A PROGRAM, str. 17 Konstrukcja pętli Opis słowny: 0. inicjalizacja 1. Jeśli warunek jest niespełniony, to zakończ obliczenie 2. Jeśli warunek jest spełniony, to ciało idź do 1 Pascal: inicjalizacja; while warunek do ciało Schemat blokowy: ? inicjalizacja ? warunek | ¬warunek ? ciało ? C: inicjalizacja while ( warunek ) ciało Budowa komputera 0 1 2 ... procesor N −2 N −1 pamięć Obliczenie p = x · y − z · w; : pobierz x pomnóż przez y zapamiętaj w t pobierz z pomnóż przez w zapamiętaj w u pobierz t odejmij u zapamiętaj w p • Adresowana pamięć składająca się z N komórek. • Procesor wykonujący działania między swoim rejestrem a komórką pamięci; nie można bezpośrednio wykonać np. dodawania zawartości dwóch komórek. Wykład 1. ALGORYTM A PROGRAM, str. 19 Schemat przetwarzania Procesor jest aktywnym elementem komputera. Pamięć służy mu jako bierny notes. Procesor rozumie komendy tylko z bardzo prostego języka wewnętrznego. Żeby mógł wykonać program, napisany przez programistę w języku wysokiego poziomu, takim jak Pascal lub C, program ten musi najpierw zostać przetłumaczony lub skompilowany na język wewnętrzny. Programy są tłumaczone przez specjalny program, tzw. translator lub kompilator . Wczytuje on jako dane tekst programu w języku wysokiego poziomu i produkuje jako wynik program w języku wewnętrznym gotowy do działania. Program w języku wewnętrznym (skompilowany) jest nieczytelny dla programisty. Program w języku wysokiego poziomu jest niewykonalny dla komputera. Schemat przetwarzania gcc ........................................ ......... ........................................................ ...................... . . . . . ....... . . . . . . . . . . ..... . . .. kompilator C ... .... ... . ..? ··· x=10; while (x>0) ··· program w C ··· pobierz zapisz ··· ......... .................. . . . . .. ... ... .. program .... ...................... ........ ..... ... ... ... ... ... jęz. ..? w wewnętrznym DANE WYNIKI