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

Podobne dokumenty