Programowanie

advertisement
Tydzień 3
Prowadzący: Dr inż. Jerzy Szczygieł
Algorytm - definicja
Algorytm – w matematyce oraz
informatyce to skończony,
uporządkowany ciąg jasno
zdefiniowanych czynności,
koniecznych do wykonania
pewnego zadania.
start
tak
czy jest
prowadzący?
nie
Słowo algorytm
rozumiane jako przepis
wykonania zadania
pochodzi od fragmentu
nazwiska arabskiego matematyka
żyjącego na przełomie VIII i IX wieku
(ok. 780 - ok. 850).
Muhammad ibn Musa al-Chorezmi,
który został uznany za prekursora
obliczeniowych metod w
matematyce.
zajęcia
droga do domu
stop
Algorytmy - przykłady
Zaparzanie herbaty
dane wejściowe : woda, herbata,
cukier, szklanka, czajnik łyżeczka,
palnik gazowy, zapałki
•
•
•
•
•
•
•
•
wsyp herbatę do szklanki;
nalej wodę do czajnika;
zapal gaz;
poczekaj aż w czajniku zagotuje
się woda;
zalej herbatę w szklance
wrzątkiem;
poczekaj 2 minuty;
dodaj cukier;
pomieszaj;
wynik :herbata gotowa do wypicia
Znajdowanie największego
wspólnego dzielnika NWD (*)
dane wejściowe: liczby a i b
• dopóki b ≠ 0 wykonuj:
–
podstaw za c resztę z dzielenia a
przez b;
–
podstaw za a liczbę b;
–
podstaw za b liczbą c;
• podstaw za NWD liczbę b;
wynik: NWD
(*) tzw. Algorytm Euklidesa wymyślony, co
ciekawe, przez Eduksosa z Knidos
Algorytmizacja zadania
1. Sformułowanie zadania
2. Określenie danych wejściowych
3. Określenie celu, czyli wyniku
4. Poszukiwanie metody rozwiązania, czyli algorytmu
5. Przedstawienie algorytmu w postaci:
- opisu słownego
- listy kroków
- schematu blokowego
- jednego z języków programowania
6. Analiza poprawności rozwiązania
7. Testowanie rozwiązania dla różnych danych - ocena efektywności
przyjętej metody
Cechy algorytmu
Cechy podstawowe
•
•
•
•
posiada dane wejściowe
produkuje pewien wynik
jest precyzyjnie zdefiniowany
jest skończony
Cechy dodatkowe
•
•
•
•
realizowalność
możliwość zapisania w wielu postaciach
możliwość wielokrotnego wykonywania
możliwość zapisania używając skończonego zbioru symboli.
Porównywanie i ocena efektywności algorytmów
Kryteria
•
•
•
•
•
•
prostota
czytelność
długość kodu
poprawność
czas realizacji
zajętość pamięci
Algorytm idealny – posiada prosty,
łatwy do zrozumienia kod, liczy się szybko,
nie wymaga dużo miejsca w pamięci
i zawsze daje poprawne wyniki
Ocena efektywności i wartość algorytmu :
• koszt czasowy algorytmu ilość operacji jakie musi wykonać
• koszt pamięciowy - ile komórek pamięci potrzebuje dany algorytm
• poprawność algorytmu polega na tym, że nie ma w nim błędów
składniowych ani logicznych, a w związku z tym jest on skończony (musi się
zatrzymać) oraz daje poprawny wynik.
Metoda krokowa opisu algorytmu
Algorytm Euklidesa znajdowania NWD, IV w. p.n.e
1.
2.
3.
4.
5.
6.
7.
dano dwie liczby a i b
jeżeli a=b to przejdź do kroku 7
jeżeli a<b przejdź do kroku 5
podstaw za liczbę a różnicę a-b. Przejdź do kroku 6
podstaw za liczbę b różnicę b-a.
przejdź do kroku 2
podstaw za wynik liczbę b
Schemat blokowy - definicja
Schemat blokowy
jedna z najpopularniejszych form
przedstawiania algorytmu.
Tworzy się go za pomocą umownych
symboli z zaznaczeniem połączeń
i kierunków przepływu informacji.
Zasady budowy schematu blokowego
•
•
•
start
podaj a:
•
podaj b:
podaj c:
suma := a + b + c
wypisz suma
stop
•
każda operacja jest umieszczona
w osobnym bloku
schemat ma tylko jeden blok "start"
i przynajmniej jedną blok „stop”
poszczególne bloki są ze sobą
połączone.
z bloku wychodzi jedno połączenie;
wyjątek stanowią: "stop" (z którego nie
wychodzą już żądne połączenia) oraz
blok warunkowy (z którego wychodzą
dwa połączenia opisane „TAK” i „NIE”
w bloku operacyjnym zamiast znaku "="
pojawia się oznaczenie ":="
Schemat blokowy – rodzaje bloków
Bloki graniczne:
Blok wykonawczy:
start
instrukcje
do wykonania
stop
Bloki wejścia-wyjścia:
Blok warunkowy:
podaj wartość
N
wyprowadź wartość
fałsz,
logiczne 0
wyrażenie
logiczne
T
prawda,
logiczne 1
Sieci działań
Proste (sekwencyjne)
nie używa się w nich bloków warunkowych. Kolejność operacji jest ściśle
określona i żadna z nich nie może być pominięta ani powtórzona
Z rozwidleniem (warunkowe)
zawiera w sobie wybór jednej z kilku możliwych dróg realizacji danego
zadania. Istnieje w nich przynajmniej jeden blok warunkowy
Z pętlą (iteracyjne)
stosowany wtedy gdy w trakcie realizacji danego zadania konieczne jest
powtórzenie niektórych operacji różniących się jedynie zestawem danych
Złożone
będące kombinacją powyższych sieci
Podstawowe struktury programistyczne
a) jeżeli warunek logiczny
Wyrażenie będzie prawdziwy rób
Działanie P, inaczej nic nie rób
b) jeżeli warunek logiczny
Wyrażenie jest prawdziwy rób
Działanie P , inaczej rób
Działanie F
Podstawowe struktury programistyczne – cd.
c) oblicz Wyrażenie oraz wykonaj
tę instrukcję, przejście do której
odpowiada wartości Wyrażenia.
Inaczej wykonaj instrukcję
Domyślną
d) sprawdź Wyrażenie, jeżeli jest
prawdziwe, wykonaj instrukcję
oraz wróć do ponownego
sprawdzania Wyrażenia, inaczej
wyjdź z konstrukcji
Podstawowe struktury programistyczne – cd.
e) wykonaj instrukcję, a następnie
sprawdź Wyrażenie, jeżeli jest
prawdziwe, wróć do ponownego
wykonania instrukcji, inaczej
wyjdź z konstrukcji
f) przed rozpoczęciem konstrukcji
ustaw licznik. Dopóki wyrażenie
jest prawdziwe, wykonaj
Instrukcję, a następnie zmień
licznik
Przykłady algorytmów
Przykłady algorytmów cd.
Przykłady algorytmów cd.
Przykłady algorytmów cd.
Przykłady algorytmów cd.
Przykłady algorytmów cd.
Zadania do samodzielnego rozwiązania
Przy pomocy schematów blokowych opisać algorytmy realizujące
następujące zadania:
1. Ugotowanie jajka na:
a) miękko
b) twardo
2. Manewr wyprzedzania samochodem powoli jadącego traktora. Uwzględnić
zmieniające się warunki na drodze (natężenie ruchu, ukształtowanie
powierzchni, widoczność)
3. Znalezienie środka ciężkości pręta stalowego. Pręt znajduje się na
ruchomych podporach (można je zbliżać i oddalać od siebie)
4. Dano liczbę A. Sprawdzić, czy dana liczba jest podzielna jednocześnie
przez 3 i przez 7
5. Dano liczbę całkowitą. Znaleźć sumę wszystkich cyfr w składzie danej
liczby
6. Znaleźć całkowite pierwiastki równania: 3x3+7x2=550 w przedziale [0…10]
Zadania do samodzielnego rozwiązania cd.
7.
Znaleźć sumę n pierwszych elementów szeregu:
8.
Dano proces predefiniowany Random(), który generuje jedną liczbę losową
w przedziale od 0 do 65375. Opisać algorytm wygenerowania 20 losowych
liczb w przedziale [10;100]
9.
Obliczyć wartość funkcji sin(x) w przedziale [-2π; 2π] z krokiem 0,01
10. Obliczyć wartość funkcji dla całkowitego x:
Programowanie - definicja
Programowanie
proces projektowania, tworzenia i poprawiania kodu źródłowego programów
komputerowych lub urządzeń mikroprocesorowych (mikrokontrolerów).
Kod źródłowy pisze się z użyciem reguł określanych przez wybrany język
programowania.
algorytm
symbole
język programowania
słowa kluczowe
składnia
semantyka
program
Składnia i semantyka języków programowania
Składnia typowego języka zawiera:
• warianty kilku struktur sterujących
• sposoby definiowania rozmaitych struktur danych
• wzorce podstawowych instrukcji
Składnia języka programowania określa
• jak opisywać struktury sterujące
• jak opisywać struktury danych
• jak tworzyć poprawne symbole dla nazwania zmiennych i struktur
danych
• jak stosować interpunkcje (np. spacje, przecinki, kropki nawiasy)
Semantyka określa znaczenie poprawnych składniowo wyrażeń
Kompilacja i interpretacja
Kompilacja – przekładanie całego
programu napisanego w języku
wysokiego poziomu na program
w języku niższego poziomu
Interpretacja – przekładanie
kolejno instrukcji języka
wysokiego poziomu na instrukcje
poziomu maszynowego
Generacje języków programowania
Pierwsza generacja - języki maszynowe (wewnętrzne) specyficzne dla
określonej maszyny. Programowanie w kodzie binarnym.
Druga generacja -języki symboliczne, niskiego poziomu (Assembler).
Poszczególnym rozkazom maszynowym odpowiadają symbole
(mnemoniki). Aby program mógł zostać wykonany na komputerze
konieczne jest jego przetłumaczenie na język wewnętrzny procesora.
Trzecia generacja - języki wysokiego poziomu (Fortran, Pascal, C).
Składnia przypomina proste zdania języka naturalnego oraz wyrażenia
arytmetyczne. Języki wysokiego poziomu są niezależne od procesora.
Muszą być kompilowane lub interpretowane, aby mogły zostać
wykonane przez procesor.
Generacje języków programowania cd.
Czwarta generacja – platformy programistyczne takie jak Delphi,
C++ Builder czy też Visual Basic, pozwalające na „budowanie” aplikacji
z gotowych elementów.
Piąta generacja – języki używane do tworzenia programów
wykorzystujących tzw. sztuczną inteligencję (ang. AI – Artificial
Intelligence)
Zasady programowania strukturalnego
• program powinien składać się z niedużych jednostek zwanych procedurami,
w których obrębie nie ma już mniejszych podprogramów
• w kodzie modułu powinno być tylko jedno wejście i jedno wyjście
• kod powinien być budowany z pomocą następujących konstrukcji
podstawowych:
– ciągu sekwencyjnego
– rozgałęzienia warunkowego
– pętli ze sprawdzeniem warunku powtarzania na początku lub końcu
ciągu sekwencyjnego
– instrukcji wyboru jeden z wielu
• możliwe jest zagnieżdżanie jednych konstrukcji wewnątrz innych
• należy ograniczyć do niezbędnego minimum stosowanie skoku
bezwarunkowego
• program powinien zapewniać proste i jasne rozwiązanie problemu, być
napisany w poprawnym stylu, przejrzysty, czytelny
Programowanie obiektowe - definicja
Programowanie obiektowe (ang. object-oriented programming )
metodologia tworzenia programów komputerowych, która definiuje
programy za pomocą "obiektów" - elementów łączących stan (czyli
dane) i zachowanie (czyli procedury, tu: metody). Obiektowy program
komputerowy wyrażony jest jako zbiór takich obiektów,
komunikujących się pomiędzy sobą w celu wykonywania zadań.
Pojęcia dotyczące programowania obiektowego:
• dziedziczenie (obiekty tworzą strukturę hierarchiczna, dziedziczą
zachowania i właściwości klas)
• hermetyzacja (obiekty są oddzielone od otoczenia zewnętrznego)
• polimorfizm (właściwe znaczenie programu o danej nazwie jest
uzależnione od obiektu, z którym ta nazwa jest powiązana)
Niektóre dziedziny zastosowań języków
• języki zorientowane obiektowo (C++, Smalltalk, Eiffel)
• języki do zarządzania bazami danych (SQL)
• programowanie wizualne (AppWare, Synergy, VPLus)
• języki symulacyjne (Simula, Gabriel, TROLL)
• języki funkcyjne (Haskell, ASpecT)
• programowanie współbieżne (Fortran FM, CODE, NESL)
• modelowanie matematyczne (Matlab, Mathcad)
• języki opisu stron (Postscript, Tex, HPGL)
• programowanie stron WWW (PHP, JavaScript, PERL, DHTML)
• komputerowo wspomagana Inżynieria Oprogramowania (ang. CASE)
Konstrukcja sterująca typu prawda/fałsz
Konstrukcja iteracyjna „dopóki”
Konstrukcja iteracyjna „rób.. dopóki”
Konstrukcja iteracyjna „powtarzaj”
Konstrukcja sterująca wielowariantowa
Program Hello world! – różne języki
Assembler
Język C
. global _start
text
db
length equ
#include <stdio.h>
int main(void)
{
printf ("Hello, world!\n");
return 0;
}
"Hello, world!",0xa
$-text
section .text
_start:
Pascal
mov
mov
mov
mov
int
eax,4
ebx,1
ecx,text
edx,length
80h
Program hello;
xor
mov
int
ebx,ebx
eax,1
80h
begin
Writeln('Hello, world!');
Readln;
end.
Język Brainfuck
++++++++++[>+++++++>++++++++++>+++>+<<<<]>++.+++++++..+++.>++.<<+++++++++++++++.>.+
++.------.--------.>+.>.
Fortran
PROGRAM HELLO
1
WRITE (*,*) 'hello, world'
goto 1
END
Malbolge
(=<`:9876Z4321UT.-Q+*)M'&%$H"!~}|Bzy?=|{z]KwZY44Eq0/{mlk**
hKs_dG5[m_BA{?-Y;;Vb'rR5431M}/.zHGwEDCBA@98\6543W10/.R,+O<
Program Hello world! – różne języki
Język Ook!
Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook.Ook. Ook. Ook. Ook. Ook!
Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook.Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook?
Ook! Ook! Ook? Ook! Ook? Ook.Ook! Ook. Ook. Ook? Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook.Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook?Ook! Ook! Ook? Ook! Ook?
Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook.
Ook.Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook.
Ook! Ook. Ook. Ook. Ook. Ook.Ook. Ook. Ook! Ook. Ook.
Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook.
Ook.Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook? Ook? Ook. Ook. Ook.Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook!
Ook.Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook.Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook.
Ook.Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook!
Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook.Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook!
Ook. Ook. Ook. Ook. Ook. Ook. Ook.Ook! Ook. Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook.Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook!Ook! Ook. Ook. Ook?
Ook. Ook? Ook. Ook. Ook! Ook.
Założenia języka:
1. Język programowania powinien
być możliwy do zapisania
i odczytania przez orangutana
2. Aby było to możliwe składnia
powinna być prosta, łatwa do
zapamiętania i pod żadnym
względem nie powinna zawierać
słowa „małpa”
3. Banany są dobre!
Download