Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
Wstęp do programowania Wykład 1
Algorytm, obliczenie, program
2
Literatura D. Harel, Y. Feldman. Rzecz o istocie informatyki. Algorytmika. WNT, 2008. I. Bentley. Perełki oprogramowania. Helion 2011. L. Banachowski, K. Diks, W. Rytter. Algorytmy i struktury danych. WNT, 2006. W. Rychlicki. Od matematyki do programowania. Helion, 2011. B. W. Kernighan, D. M. Ritchie. Język ANSI C. Programowanie. Helion, 2010. D. Griffiths, D. Griffiths. Rusz głową! C. Helion, 2013. S. Oualline. Język C. Programowanie. Helion, 2003. S. Prata. Język C. Szkoła programowania. Helion, 2006. N. Wirth. Wstęp do programowania systematycznego. WNT, 1999.
3
Plan wykładu Algorytm, obliczenie, program
Program w C= dane + instrukcje Proste przykłady, tablice Złożoność obliczeniowa Procedury i funkcje Struktury i pliki Programowanie współbieżne, równoległe i rozproszone Formalne metody dowodzenia programów Elementy inżynierii oprogramowania Zmienne dynamiczne, listy
4
Maszyna licząca NWD(111,259) NWD(111,259)= NWD(111,259)= 37
5
Zalety i wady maszyny NWD(111,259)
Prostota urządzenia. Wady: Bardzo wąska dziedzina zastosowania. Brak metody weryfikacji, że urządzenie zwraca właściwą odpowiedź.
6
Wersja ulepszona 1 2 3 4 5 6 7 8 9 10 11 1 1 2 3 4 5 6 7 8 9 10 11 2 3 4 5 6 7 8 9 10 11
7
Metoda ogólna Algorytm y x Znaleźć NWD(A,B)
Połóż żeton w punkcie x=A, y=B. Dopóki żeton nie znajdzie się na prostej wynikowej wykonuj: weź pod uwagę najmniejszy równoramienny trójkąt prostokątny z wierzchołkiem kąta prostego w punkcie zajmowanym przez żeton i jednym z kątów ostrych (albo poniżej żetonu albo na lewo od niego) leżącym na osi. (Ponieważ żeton nie leży na prostej wynikowej, tylko jeden z kątów ostrych będzie leżał na osi.) Żeton przesuwamy do punktu wyznaczonego przez nie leżący na osi wierzchołek kąta ostrego w naszym trójkącie. Rzędna (odcięta) żetonu jest poszukiwanym wynikiem. y 10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10 x
8
Przykład y 10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10 x
9
Przykład y 10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10 x
10
Przykład y 10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10 x
11
Przykład y 10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10 x
12
Poprawność urządzenia
13
Poprawność urządzenia
14
Algorytm Euklidesa
15
Algorytm, obliczenie, język programowania, program
16
Algorytm rekurencyjny
Algorytm, który odwołuje się do siebie. Silnia 0!=1 n!= 1*2*…*n, dla n>0. Silnia rekurencyjnie n!=n*(n-1)!, dla n>0. Rekurencyjna wersja algorytmu Euklidesa NWD(0,B)=B NWD(A,B)=NWD(B mod A, A), dla A>0.
17
Problem stopu Czy dany algorytm kończy się dla wszystkich danych wejściowych? Wczytaj x; dopóki x≠1 wykonuj jeśli x parzyste to x=x/2 wpp x=3*x+1; Nie wiemy, czy powyższy algorytm się kończy (hipoteza Collatza z teorii liczb).
18
Rozstrzygalność Problemy rozstrzygalne:
Istnieje algorytm rozwiązujący problem. (Algorytm musi być konstruktywny, tzn. wszystkie jego kroki muszą być elementami pewnego dobrze określonego zbioru.) Problemy łatwo obliczalne Problemy trudno obliczalne (dokładniej potem) Problemy nierozstrzygalne: Nie istnieje algorytm, który rozwiązuje problem.
19
Poziomy języków programowania
Języki maszynowe Programy w tych językach to ciągi zer i jedynek. Komputery realizują programy tylko w tych językach, ale ludzie w nich nie programują. Assemblery Tzw. języki niskiego poziomu. Każda platforma sprzętowa posiada swój assembler oraz oprogramowanie tłumaczące program w assemblerze na program w języku maszynowym. Kiedyś programowano w assemblerach, dziś prawie nie. Wiąże się to z ogromnym przyspieszeniem sprzętowym. (Assemblery były głównie używane, aby zwiększyć efektywność oprogramowania.)
20
Poziomy języków programowania
Języki wysokiego poziomu. Obecnie programuje się praktycznie tylko w tych językach. Są wygodniejsze i prowadzą do czytelniejszych programów. Problem polega na tym, że komputery „nie potrafią” wykonywać programów w językach wysokiego poziomu. Aby to było możliwe, musimy dostarczyć odpowiedniego oprogramowania. Kompilatory. Tłumaczą program napisany w języku wysokiego programu na assembler. Interpretery. Analizują kod programu napisanego w języku wysokiego poziomu i go wykonują.
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.