Algorytmy

Transkrypt

Algorytmy
Elwira Wachowicz ([email protected])
Algorytmy
Elwira Wachowicz
[email protected]
14 marca 2013
Algorytmy
14 marca 2013
1 / 20
Algorytm (arab.):
przepis na rozwiązanie danego zagadnienia matematycznego (np. algorytm
obliczania pierwiastka równania kwadratowego); metoda postępowania
zawierająca wszystkie formuły obliczeniowe, określająca kolejność ich
stosowania, warunki, przy których stosuje się tę lub inną formułę, zasady
przechodzenia od jednego etapu procesu obliczeniowego do następnego
oraz informacje o rodzajach i własnościach odpowiednich obiektów
matematycznych: liczb, wektorów, macierzy, a także tablic, które są
danymi początkowymi zadania lub pojawiają się podczas obliczeń;
algorytmy są podstawą programów dla maszyn matematycznych.
Encyklopedia PWN, 1973 r
Elwira Wachowicz ([email protected])
Algorytmy
14 marca 2013
2 / 20
Cechy algorytmu
Algorytm:
Szczegółowy
Jednoznaczny
Powinien mieć początek i koniec
Posiada zbiór danych wejściowych, dla których kończy się sukcesem.
Efektywność: proste operacje i realizacja w rozsądnym czasie.
Daje oczekiwane rezultaty dla różnych danych wejściowych.
Musimy znać elementarny „poziom wiedzy” komputera!
Elwira Wachowicz ([email protected])
Algorytmy
14 marca 2013
3 / 20
Obliczanie największego wspólnego dzielnika dwóch liczb
Algorytm Euklidesa (IV w. p.n.e..) do obliczania największego wspólnego
dzielnika (NWD) dwóch liczb naturalnych m i n (m > 0 i m ≥ n):
Czynność 1: sprawdź, czy n = 0; jeśli tak, to zakończ – szukanym NWD
jest m; jeśli nie, przejdź do czynności 2.
Czynność 2: oblicz resztę z dzielenia m przez n, oznacz ją przez r i
przejdź do czynności 1, ale z innymi liczbami: n teraz równym r i m
równym poprzedniej wartości n.
Elwira Wachowicz ([email protected])
Algorytmy
14 marca 2013
4 / 20
Jak budować algorytmy
Wyznaczenie osiągalnego i jednoznacznego celu.
Podanie sposobu rozwiązania.
Która z 3 liczb a, b i c jest największa?
1
Weź liczby a i b.
2
a > b ? Tak → pkt. 3. Nie → pkt. 4.
3
Weź liczby a i c. a > c ? Tak → pkt. 5.
Nie → pkt. 7.
1
Weź liczby b i c. b > c ? Tak → pkt. 6.
Nie → pkt. 7.
a > b i a > c? Tak → a
największe. Nie → pkt. 2.
2
b > c ? Tak → b największe.
Nie → c największe.
4
5
Największą liczbą jest a.
6
Największą liczbą jest b.
7
Największą liczbą jest c.
Elwira Wachowicz ([email protected])
Algorytmy
14 marca 2013
5 / 20
Jak zapisywać algorytmy
Pierwiastki równania kwadratowego:
1
2
Czy a = 0? TAK → pkt. 2. NIE → pkt. 3.
Czy b = 0? TAK → pkt. 2a. NIE → pkt. 2b
(a)
(b)
3
4
Czy c = 0? TAK → spełnione dla każdego x. STOP. NIE →
Niespełnione dla żadnego x. STOP.
Oblicz x = −c/b. STOP
Oblicz ∆ = b2 − 4ac
Czy ∆ > 0? TAK → pkt 4a. NIE → pkt. 4b.
(a)
(b)
√
√
Oblicz x1 = (−b − ∆)/2a, x2 = (−b + ∆)/2a. STOP.
Czy ∆ = 0? TAK → Oblicz x = −b/2a. STOP. NIE → Równanie
niespełnione dla żadnego x. STOP.
Elwira Wachowicz ([email protected])
Algorytmy
14 marca 2013
6 / 20
Start
Dane a,b,c
TAK
a=0
NIE
Δ=b2-4ac
Δ>0
TAK
b=0
c=0
NIE
x=-c/b
NIE
TAK
x1=(-b-√Δ)/2a
Δ=0
TAK
NIE
Spełnione dla
dowolnego x.
NIE
TAK
x=-b/2a
Niespełnione
dla żadnego x.
x2=(-b+√Δ)/2a
Elwira Wachowicz ([email protected])
Stop
Algorytmy
14 marca 2013
7 / 20
Zastany stan wiedzy
Zakładamy, że komputer zna podstawowe operacje:
arytmetyczne: dodawanie, odejmowanie, mnożenie, dzielenie,
pierwiastkowanie, logarytmowanie, obliczanie wartości bezwzględnej i
podstawowych funkcji trygonometrycznych (sin, cos ...);
logiczne.
Elwira Wachowicz ([email protected])
Algorytmy
14 marca 2013
8 / 20
Obliczanie sumy n liczb
n=5
Elwira Wachowicz ([email protected])
Algorytmy
14 marca 2013
9 / 20
Obliczanie sumy n liczb
Czy jest to najprostszy algorytm?
Dla człowieka tak, dla maszyny nie.
Elwira Wachowicz ([email protected])
Algorytmy
14 marca 2013
10 / 20
Obliczanie sumy n liczb
Elwira Wachowicz ([email protected])
Poprawny algorytm powinien
zliczać ilość zliczanych elementów
i odpowiednio zakończyć
program.
Algorytmy
14 marca 2013
11 / 20
Obliczanie sumy n liczb
Elwira Wachowicz ([email protected])
Potrzebny licznik – i.
Algorytmy
14 marca 2013
12 / 20
Obliczanie sumy n liczb
Elwira Wachowicz ([email protected])
s
i
czy i ≤ 4 ?
koniec?
0
1
tak
nie
1
2
tak
nie
3
3
tak
nie
6
4
tak
nie
10
5
nie
tak
To nie jest ścisły dowód poprawności
algorytmu!
Algorytmy
14 marca 2013
13 / 20
Znajdowanie największej liczby w zbiorze
Elwira Wachowicz ([email protected])
Mamy zbiór n liczb: a1 , a2 , ...., an
Komputer potrafi porównywać liczby parami.
Najlepiej rozbić zadanie na kawałki
Algorytmy
14 marca 2013
14 / 20
Znajdowanie największej liczby w zbiorze
Elwira Wachowicz ([email protected])
Mamy n=4 liczby: 17, -2, 37 i 9.
m
i
ai+1
i≤4?
m ≥ ai+1
koniec?
17
1
-2
tak
tak
nie
17
2
37
tak
nie
nie
37
3
9
tak
tak
nie
37
4
–
tak
–
tak
Zadanie domowe:
Proszę wymyślić algorytm do prostego
sortowania n liczb.
Algorytmy
14 marca 2013
15 / 20
Język C
Został stworzony w 1972 r. przez Dennisa Ritchie’go w Bell Labs.
Powstał jako język dla programistów.
Jeden z najpopularniejszych języków programowania.
Zalety:
udostępnia wszystkie funkcje sterujące ważne w teorii i praktyce
programowania,
wydajny: niewielki rozmiar kodu, duża szybkość,
przenośny,
potężny i elastyczny.
Wady:
zwięzłość w połączeniu z bogactwem operatorów może dać niezwykle
zawikłany kod
Elwira Wachowicz ([email protected])
Algorytmy
14 marca 2013
16 / 20
Korzystanie: 7 kroków
Elwira Wachowicz ([email protected])
Algorytmy
14 marca 2013
17 / 20
Pisanie kodu
Dowolny edytor tekstu.
Przykładowy program:
#include <stdio.h>
int main (void)
{
printf("Moj pierwszy program.");
return 0;
}
Elwira Wachowicz ([email protected])
Algorytmy
14 marca 2013
18 / 20
Kompilacja
Najprostszy sposób w linuxie:
$gcc program.c
Jeśli nie będzie błędów otrzymamy plik a.out
$./a.out
Gdy chcemy otrzymać plik wykonywalny o nazwie program.x:
$gcc -o program.x program.c
Elwira Wachowicz ([email protected])
Algorytmy
14 marca 2013
19 / 20
Typowy program w C
Elwira Wachowicz ([email protected])
Algorytmy
14 marca 2013
20 / 20
Prosty przykład
#include <stdio.h>
int main(void)
{
int num;
num = 1;
/* prosty program
*/
/* definiujemy zmienna o nazwie num
/* przypisujemy jej wartosc
*/
*/
printf("Jestem prostym ");
/* korzystamy z funkcji printf()
printf("komputerem.\n");
printf("Moja ulubiona liczba to %d, bo jest pierwsza.\n",num);
return 0;
*/
}
Po wykonaniu dostaniemy:
Jestem prostym komputerem.
Moja ulubiona liczba to 1, bo jest pierwsza.
Elwira Wachowicz ([email protected])
Algorytmy
14 marca 2013
21 / 20

Podobne dokumenty