Wersja do druku

Transkrypt

Wersja do druku
Programowanie
Podstawy Informatyki
Wykład 3
Algorytmy
Co to jest algorytm?
Sformułowanie problemu.
Opracowanie metodyki rozwiązania.
Opracowanie algorytmu.
Napisanie kodu źródłowego (zakodowanie) w wybranym
języku (Pascal, Fortran, C++, itp.).
Kompilacja kodu źródłowego
Uruchomienie programu na komputerze.
Wykonanie obliczeń.
Analiza otrzymanych wyników.
Usunięcie błędów programu (debugging).
Istotne cechy algorytmu
Jeżeli mamy do wykonania jakieś zadanie, budujemy sposób,
przepis realizacji tego zadania. Taki przepis to algorytm.
•Definicja zadania = co algorytm ma zrobić.
Przykłady:
•Opis ciągu czynności, które po kolei mają być wykonane.
•przepis kucharski,
•Czynności te muszą być na tyle proste (i możliwe do wykonania),
aby wykonawca algorytmu mógł je bez dodatkowego tłumaczenia,
wykonać ⇒operacje elementarne;
odpowiednio dobrany poziom szczegółowości.
•instrukcja składania mebla/urządzenia. . . ,
•zapis nutowy,
•wykonywanie pisemne dodawania/mnożenia/dzielenia...
•Skończona ilość operacji elementarnych ⇒skończony czas
działania.
Algorytm (definicja nieformalna)
•Algorytm dostaje pewne informacje (dane wejściowe) i zwraca
jakieś (oczekiwane) wyniki — dane wyjściowe.
to sposób postępowania (przepis) umożliwiający rozwiązanie
określonego zadania (klasy zadań), podany w postaci
skończonego zestawu czynności do wykonania, ze wskazaniem
ich następstwa.
Algorytm
Pochodzenie nazwy:
od nazwiska w wersji łacińskiej Algorithmus, Algorismus
perskiego matematyka Muhammeda ibn Musy zwanego al
Chuwarismi, żyjącego w IX w (podał on algorytmy
wykonywania działań arytmetycznych na liczbach
dziesiętnych.
Algorytmika - dział wiedzy zajmujący się badaniem algorytmów
Sposoby zapisu algorytmu:
•słowami,
•za pomocą schematu blokowego,
•w pseudokodzie,
•w jednym z języków programowania
Program - formalnie spisana wersja algorytmu.
•Może istnieć kilka przepisów, które dają w efekcie te same
wyniki.
Algorytm
to ściśle określony ciąg kroków obliczeniowych, prowadzący do
przekształcenia danych wejściowych w wyjściowe.
Cechy dobrego algorytmu:
•Definicja problemu określa dane we. (pochodzące z dokładnie
określonego zbioru wartości dozwolonych) i dane wy.
•Precyzyjnie zdefiniowany — każdy jego krok jest jednoznacznie
określony i obejmuje wyłącznie operacje elementarne.
•Skończony — wyprodukuje wynik w skończonej ilości kroków.
•Jednoznaczny (powtarzalny) — jego wielokrotne wykonywanie
dla identycznych danych we. daje zawsze taki sam wynik.
•Kompletny — uwzględnia wszystkie możliwe przypadki, jakie
mogą wystąpić podczas jego wykonywania.
•Uniwersalny — umożliwia rozwiązanie całej klasy zadań, a nie
tylko pojedynczego, ustalonego zadania.
Algorytm sekwencyjny - opis słowny
Postawienie problemu:
- Co należy zrobić, aby zobaczyć film “Chrzest” ?
Algorytm 1a:
Idź do kina
Kup bilet
Obejrzyj film
Wróć do domu
Algorytm powyższy zawiera 4 podstawowe składniki, z
których każdy wymaga zakończenia wykonania pewnej
akcji przed rozpoczęciem następnej.
W komputerze każdy składnik będzie zapisany jako
instrukcja lub grupa instrukcji (procedura).
Algorytm powinien być kolejno uściślany, by mógł być w
swojej ostatecznej postaci zrozumiały dla komputera, oraz
by uwzględniał wszystkie okoliczności przewidziane przez
projektanta.
Przykład algorytmu:
sumowanie zarobków pracowników
Algorytm 1b:
POCZĄTEK
jeżeli nie wyświetlają filmu "Chrzest”
to znajdź sobie inne zajęcie
w przeciwnym razie idź do kina
jeżeli jest kolejka to ustaw się w kolejce (na końcu?)
dopóki przed Tobą stoją ludzie wykonuj przesuwaj się do
przodu
jeżeli są wolne miejsca to kup bilet, znajdź swoje miejsce
dopóki trwa projekcja
wykonuj oglądaj film
w przeciwnym razie zaklnij po cichu, wyjdź z kina,
:-(
wróć do domu
KONIEC
Dane: lista pracowników z zarobkami
(1) zanotuj "na boku" liczbę 0;
(2) przeglądaj ankiety i dodawaj zarobki każdego pracownika
do liczby "na boku";
(3) kiedy osiągniesz koniec listy, przedstaw wartość liczby "na
boku" jako wynik.
Cechy tego algorytmu:
•Działa na różnych zestawach danych, ale daje poprawne
wyniki.
•Sam tekst algorytmu jest ograniczony i krótki, ale proces który
opisuje zmienia się wraz z długościa listy pracowników.
Oprócz algorytmów słownych, często
stosuje się zapis algorytmu w postaci
schematów blokowych.
Algorytmy przedstawione powyżej wykorzystują język
naturalny oraz słowa kluczowe. Słowa kluczowe definiują
podstawowe struktury sterujące programu oraz procesy
podejmowania decyzji występujących w algorytmie:
jeżeli ..... to ..... w przeciwnym razie
dopóki ..... wykonuj
powtarzaj ..... aż do
Te słowa kluczowe mają swoje odpowiedniki w każdym z
języków programowania.
Wprowadzenie słów kluczowych do opisu słownego
algorytmu jest częścią tzw. pseudo - kodu,
wykorzystywanego do zapisu algorytmu.
Szczegółowy algorytm jest podstawą dla prawidłowo
zakodowanego programu.
Algorytm z “wcięciami” pozwala na bardziej czytelny zapis, i
stanowi nieformalną metodę ułatwiającą śledzenie “dróg”
programu.
START
czytaj:
n,a(i),i=1,...n
suma=0
Schemat blokowy (block diagram, flowchart) to diagram,
na którym algorytm jest reprezentowany przez opisane
figury geometryczne, połączone liniami zgodnie z
kolejnością wykonywania czynności wynikających z
przyjętego algorytmu rozwiązania zadania; pozwala
dostrzec istotne etapy algorytmu i logiczne zależności
między nimi;
suma=suma + a(i)
i=i+1
i≤n
nie
druk: a(i), suma
STOP
tak
Schematy blokowe
Start
Stop
•strzałka wskazuje kierunek przebiegu sterowania programem,
łączy inne bloki,
•operand (prostokąt) — wszystkie operacje z wyjątkiem instrukcji
wyboru,
instrukcja
czytanie danych,
wydruk wyników
tak
•predykat (romb) — instrukcja wyboru,
•etykieta (owal) — początek lub koniec sekwencji schematu.
•wejście/wyjście (równoległobok).
?
nie
Algorytm Euklidesa
Opis słowny:
•dane są dwie liczby a i b;
Problem: mając dane dwie liczby naturalne a i b znaleźć
•jeśli a jest równe b, to NWD jest równe a,
ich największy wspólny dzielnik.
•w przeciwnym wypadku, jeżeli a jest większe od b, to zmień a
na równe a - b, a jeżeli a jest mniejsze od b to zmień b na b - a;
Pierwotnie problem ten sprowadzał się do czysto
geometrycznego problemu znalezienia wspólnej miary dla
dwóch odcinków.
•zacznij od początku.
Zadanie algorytmiczne:
Dane: a, b ∈ N,
Wynik: NWD(a,b).
Schemat blokowy
Algorytm Euklidesa (metoda 1)
START
•Pseudokod
loop
czytaj:
a, b
if a = b then return a;
else if a > b then a := a -b;
a<>b
Drukuj a
else b := b -a;
nie
•Język C
while(a != b) {
tak
tak
a=a-b
a>b
nie
b=b-a
STOP
if(a > b) a -= b;
else b -= a;
}
return a;
Algorytm Euklidesa (metoda 2)
•Język C
if(a < b) {
t = a;
a = b;
b = t;
Przy opracowywaniu algorytmu zwracamy uwagę na:
jego poprawność semantyczną (składnię),
prostotę,
czas działania,
ilość zajmowanej pamięci komputera,
optymalność,
ograniczenia
}
while(b != 0) {
c = a % b;
a = b;
b = c;
}
return a;
Określa elementarny lub bardziej złożony krok algorytmu.
Zdanie złożone:
oblicz pierwiastek równania kwadratowego
Jeżeli jest to krok elementarny, to wystarczy przy tworzeniu programu
zapisać ten krok w języku programowania.
Jest to złożony krok algorytmu wymagający uszczegółowienia.
Zdanie proste
Jeżeli natomiast jest to złożony krok algorytmu, to podczas
uszczegółowienia algorytmu zostanie on zastąpiony sekwencją
prostszych zdań.
W programie jest to realizowane poprzez instrukcję złożoną grupującą
ciąg instrukcji prostych.
Przykład elementarnego kroku - instrukcja podstawienia (przypisania):
przypisz zmiennej suma wartość zero
FORTRAN:
C:
PASCAL:
suma = 0.0
suma = 0.0 ;
suma :=0.0 ;
PODEJMOWANIE DECYZJI W PROGRAMIE
Zdanie decyzyjne “jeśli”
Zdanie to zawiera strukturę opisującą decyzje
podejmowane w algorytmie. Istnieją 2 rodzaje struktur:
struktura prosta : jeśli ..... to
struktura z alternatywą: jeśli ..... to .... w przeciwnym
razie
Struktura prosta
jeśli warunek to
zdanie
gdzie warunek jest wyrażeniem przyjmującym dwie
wartości:
- wartość prawdy,
- wartość fałszu
Jeżeli warunek przyjmie wartość prawdy, to wykonuje się
zdanie, a gdy warunek przyjmie fałsz, to zdanie nie
zostanie wykonane.
Przykład:
jeśli średnia ocen studenta jest większa od 4.5 to
wpisz studenta na listę nagród
warunek :
Struktura z alternatywą
jeśli warunek to
zdanie 1
w przeciwnym razie
zdanie 2
średnia ocen studenta jest większa od 4.5
Jeżeli warunek jest prawdziwy, to wykonywane jest
zdanie:
wpisz studenta na listę nagród
Rozważmy następujący problem:
W zależności od wartości jakie przyjmuje zmienna x (np
ocena) należy wydrukować następujące komunikaty:
W programach numerycznych warunkiem jest najczęściej
wyrażenie logiczne:
nie, lub, i
dla x < 3
dla 3 <= x <= 6
dla x > 6
komunikat
komunikat
komunikat
“negatywna”
“pozytywna”
“niemożliwa”
Np.: a lub b,
(a lub b) i c, .....
Algorytm przyjmie postać:
jeżeli x <3 to
wypisz “negatywna”
w przeciwnym razie
jeżeli x >= 3 i x <= 6 to
wypisz “pozytywna”
w przeciwnym razie
wypisz “niemożliwa”
W wyrażeniach logicznych występują też relacje:
= , <>, >, <, <=, >=
FORTRAN:
a).
IF ( warunek ) THEN
zdanie 1
PASCAL:
a).
IF warunek THEN
zdanie 1;
Np.: a > b,
c <= d
Przykład zdania decyzyjnego:
jeśli (a > b) lub (c <= d) to
podstaw x = 0
ENDIF
b).
b).
IF
IF ( warunek ) THEN
zdanie 1
ELSE
zdanie 2
ENDIF
warunek THEN
zdanie 1
ELSE
zdanie 2;
Instrukcja decyzyjna wybierz
C:
a).
IF warunek
zdanie 1;
Zdanie wybierz służy do wyboru jednej z kilku możliwości.
Ma ono postać:
IF
wybierz przełącznik z
wartość_1: zdanie_1
....
wartość_n: zdanie_n
w przeciwnym razie akcja awaryjna
b).
warunek
zdanie 1;
ELSE
zdanie 2;
Przykład:
wybierz p z
1: wykonaj wariant pierwszy
2: wykonaj wariant drugi
3: wykonaj wariant trzeci
w przeciwnym razie wydrukuj komunikat o błędzie
Przykład:
Program cenzurka1
....
....
wybierz ocena z
6: pisz(‘celujacy’);
5: pisz(‘bardzo dobry’);
4: pisz(‘dobry’);
3: pisz(‘dostateczny’);
2: pisz(‘niedostateczny’);
w przeciwnym razie pisz(‘blad danych’)
....
....
Koniec
Blok instrukcji
W przypadku, gdy w danej instrukcji, np. instrukcji
warunkowej, powinna wykonać się więcej niż jedna
instrukcja, wówczas stosowany jest blok instrukcji.
C:
Pascal:
{
begin
}
instrukcja1;
instrukcja1;
instrukcja2;
instrukcja2;
instrukcja3;
instrukcja3;
........
........
Program cenzurka2
.....
jeżeli ocena = 6 to
pisz(‘celujacy’)
w przeciwnym razie
jeżeli ocena = 5 to
pisz(‘bardzo dobry’)
w przeciwnym razie
jeżeli ocena = 4 to
pisz(‘dobry’)
w przeciwnym razie
jeżeli ocena = 3 to
pisz(‘dostateczny’)
w przeciwnym razie
jeżeli ocena = 2 to
pisz(‘niedostateczny’)
w przeciwnym razie
pisz(‘blad danych’)
Iteracja warunkowa dopóki(while)
dopóki(wyrażenie) instrukcja1;
nie
wyrażenie
tak
instrukcja1
end;
Instrukcja1 może nie wykonać się ani jeden raz!
Iteracja warunkowa wykonuj ... dopóki ...
Działanie pętli:
• Obliczana jest wartość wyrażenia
(do ... while ...)
wykonuj instrukcja1 dopóki(wyrażenie) ;
• Jeśli wyrażenie jest równe fałszywe to instrukcja1 nie jest
w ogóle wykonywana
• Wpp. wykonywana jest instrukcja1.
instrukcja1
• Ponownie obliczana jest wartość wyrażenia i ponownie
sprawdzana jego prawdziwość itd.
nie
• Jeśli wyrażenie będzie fałszywe, to działanie pętli zostanie
przerwane
wyrażenie
tak
Uwaga: obliczenie wartości wyrażenia odbywa się przed
wykonaniem instrukcji1
Instrukcja1 musi wykonać się co najmniej jeden raz!
Iteracja ograniczona dla(for)
Działanie pętli:
•Wykonywana jest instrukcja1
dla <zmienna> od <w1<> do <w2> (z krokiem <k>)
wykonuj instrukcja1 ;
•Obliczana jest wartość wyrażenia
• Jeśli wyrażenie jest równe prawdziwe to instrukcja1 jest
wykonywana kolejny raz
• Ponownie obliczana jest wartość wyrażenia i ponownie
sprawdzana jego prawdziwość itd.
<zmienna> ← <w1>
<zmienna> + <k>
• Jeśli wyrażenie będzie fałszywe, to działanie pętli zostanie
przerwane
zmienna ≤ <w2>
nie
instrukcja1
Uwaga: obliczenie wartości wyrażenia odbywa się po
wykonaniu instrukcji1
tak
Instrukcja1 może nie wykonać się ani jeden raz!
Działanie pętli:
•Wykonanie instrukcji inicjalizujących pętlę
<zmienna> ← <w1>
• Sprawdzenie wyrażenia warunkowego
<zmienna> ≤ <w2>.
Jeśli fałsz, praca pętli zostaje zakończona,
Jeśli prawda, wykonana zostanie instrukcja1
• Wykonanie instrukcji
zwiększ <zmienna> o <k>
Uwaga: sprawdzenie wyrażenia <zmienna> ≤ <w2>
odbywa się przed wykonaniem instrukcja1

Podobne dokumenty