Algorytm Definicja i algorytmu

Transkrypt

Algorytm Definicja i algorytmu
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
P o c z ą t e k s ie c i d z ia ła ń (sc h e m a tu ) . W s c h e m a c ie
m o ż e w y s tę p o w a ć t y lk o j e d e n tak i e le m e n t.
B lo k w e j ś c ia - w y j ś c ia - o z n a c z a czy n n oś ć
w p r o w a d z a n ia d a n y c h i prz y p o rz ą d k o w y w a n ia i c h
z m i e n n y m u ż y w a n y m w d a l s z e j c zę ś c i p ro g r a m u
a lb o c z y n n o ść w y p r o w a d z a n ia w y n i k ó w o b l ic z e ń .
N a p is w e w n ą trz o k re ś la r o d z a j c z y n n o ś c i (n p .
cz y ta j, p is z ) o r a z n a z w y z m ie n n y c h i s tał y c h .
E le m e n t ( b lo k ) p r z e t w a r z a n ia ( o b l ic z e n io w y )
o z n a c z a w y k o n a n ie o p e r a c ji ( lu b z b io r u o p e r a c j i ) .
W e w n ą t rz b lo k u o k re ś la s ię r o d z a j c z y n n o śc i
p r z e tw a rz a n i a i ich a r g u m e n t y .
B lo k d e c y z y j n y ( w a ru n k o w y , altern a t y w n y ,
p r z e ł ąc z n i k ) - o z n a c z a e l e m e n t w y b o r u je d n e g o z
d w ó c h w a r i a n tó w d a ls z e g o w y k o n y w a n ia
p r o g r a m u . W y b ó r j e s t d o k o n y w a n y n a p o d staw ie
w y n ik u sp r a w d z e n ia w a r u n k u (b ę d ą c e g o
w y r a ż e n ie m lo g i c z n y m ) u m ie s z c z o n e g o w e w n ą trz .
B lo k te n p o w i n i e n z a w sze p o s ia d a ć d w a w y jśc i a
o p isa n e " T " ( T a k , T r u e ) i " N " (N ie , F a ls e ).
Ł ą c z n i k w e w n ą t r z s t r o n i c o w y - s łu ż y d o łą c z e n i a
o d r ę b n y c h c z ę ś c i sc h e m a tu z n a j d u j ą c y c h s ię n a
t y m s a m ym a r k u s z u . U ł a tw ia z a c h o w a n i e
p r z e jrz y s to ś c i sc h e m a tu . K o m p l e m e n ta r n e
e le m e n t y o z n a c z a s i ę t y m s a m y m sym b o l e m .
Z a k o ń c z e n ie w y k o n y w a n i a c z y n n oś c i.
"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 :
ax2 + 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
.obj
• KOMPILATOR
.exe
• LINKER
• BIBLIOTEKARZ
.lib
"Metody i języki programowania. Programowanie strukturalne", Tadeusz Wilusz, 2004
10
HISTORIA
asemblery
Fortran
Algol-60
Simula-67
Simula-67
Pascal
C
Loglan
Loglan
Modula 2
Smalltalk
Smalltalk
Ada
Ada
C++
C++
inne
innejęzyki
językihybrydowe
hybrydowe
Java
Java
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
"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 PDP11.
"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