Stefan Sokołowski WSTĘP DO PROGRAOWANIA Inst Informatyki UG, Gdańsk, 2011/2012 Wykład1ALGORYTAPROGRA,str1 WSTĘP DO PROGRAOWANIA reguły gry Zasadnicze informacje: http://infugedupl/ stefan/dydaktyka/wstepdoprog szkicowy program wykładu, laboratorium i ćwiczeń spis literatury slajdydowykładów wartorobićnotatki ale nie warto przepisywać slajdów z ekranu zadaniazćwiczeńizlaboratoriumwmoichgrupach itd
WSTĘP DO PROGRAOWANIA reguły gry Kontakt ze mną: konsultacje: środy 10:15 11:00 w pok 57 e-mail: ssokolowski@infugedupl Zaliczenia: zaliczenie laboratorium, antyspam: unikać frikoprowajderów, np: o2pl wppl gazetapl najlepiej używać konta mailowego w II UG zaliczenie ćwiczeń audytoryjnych, znajdowanie błędów w wykładzie Algorytm a program Wykład1ALGORYTAPROGRA,str3 Przykład: algorytmu(jak dojść) 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) weź kop,e jaj; m,aki ile zabior,a; do-luskania orzechów zasadź trzy dziewki na pó-l dnia a bacz, iżby nie jad-ly; Algorytm a program Wykład1ALGORYTAPROGRA,str5 Przykład: algorytmu(potęgowanie przez wielokrotne mnożenie) 3 4 = = 1 3 4 = 3 3 3 = 9 3 2 =27 3 1 =81 3 0 =81 0 narazieprzyjmij,żewynik=1 iżew=wykładnik; 1 jeśliw=0,tozakończobliczenie; 2 jeśliw>0,to domnóż wynik przez podstawę; zmniejszwo1; idźponowniedo1;
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 Algorytm a program Wykład1ALGORYTAPROGRA,str7 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, atym,codasięzrobić
Ten sam algorytm w różnych językach Przykład: (potęgowanie przez wielokrotne mnożenie) Opis słowny: 0 narazieprzyjmij,żewynik=1 iżew=wykładnik; 1 jeśliw=0,tozakończobliczenie; 2 jeśliw>0,to domnóż wynik przez podstawę; (pętla) zmniejszwo1; idźponowniedo1; (inicjalizacja) Wykład1ALGORYTAPROGRA,str9 Ten sam algorytm w różnych językach Przykład:(potęgowanie przez wielokrotne mnożenie schemat blokowy) 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 iwc) inicjalizacja pętli warunek pętli Pascal: C: wynik:=1; w:= wykladnik; whilew>0dobegin 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 ALGORYT A PROGRA, str 11 Ten sam algorytm w różnych językach Przykład:(potęgowanie przez wielokrotne mnożenie program w Pascalu ic) inicjalizacja pętli warunek pętli Pascal: C: wynik:=1; wynik=1; w:= wykladnik; w=wykladnik; while(w>0) { whilew>0dobegin wynik:= wynik*podstawa; w:=w-1; end } wynik = wynik*podstawa; w=w-1; ciało pętli
Symulacja działania programu Przykład:(potęgowanie przez wielokrotne mnożenie schemat blokowy) podstawawykładnikwynikww>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 tak 2 3 4 1 4 3 3 4 3 4 1 3 4 3 3 tak 2 3 4 3 3 3 3 4 9 3 1 3 4 9 2 tak 2 3 4 9 2 3 3 4 27 2 1 3 4 27 1 tak Wykład 1 ALGORYT A PROGRA, str 13 Symulacja działania programu cd Przykład:(potęgowanie przez wielokrotne mnożenie schemat blokowy) podstawawykładnikwynikww>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 tak 2 3 4 27 1 3 3 4 81 1 1 3 4 81 0 nie 4 3 4 81 0
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 ALGORYT A PROGRA, 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 HTL do tworzenia witryn internetowych); języki programowania ogólnego o bardziej matematycznym charakterze (np LISP, Standard L, Prolog)
Elementy programu imperatywnego(np w C) komenda = instrukcja = polecenie = fragment programu Przypisanie: nadaj zmiennej wartość; np wynik=1; w=w-1; W C znak = nie oznacza równości tylko przypisanie; równość oznacza się przez ==; przypisanie zawsze kończy się średnikiem Następstwoinstrukcji:wykonajnajpierwtoapotemtamto;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 Konstrukcja pętli Wykład 1 ALGORYT A PROGRA, str 17 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źdo1 Schemat blokowy: inicjalizacja warunek warunek ciało Pascal: inicjalizacja; while warunek do ciało C: inicjalizacja while(warunek) ciało
Budowa komputera 0 1 2 N 2 N 1 pamięć procesor 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 Schemat przetwarzania Wykład 1 ALGORYT A PROGRA, str 19 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 x=10; while(x>0) programwc gcc kompilator C DANE pobierz zapisz program w jęz wewnętrznym WYNIKI