1. Algorytmy 1.1. Składniki algorytmu 1.2. Metody opisu algorytmu

Transkrypt

1. Algorytmy 1.1. Składniki algorytmu 1.2. Metody opisu algorytmu
1. Algorytmy
ZADANIE
(warunki
wejsciowe)
Dane
wejscio
we
OPERACJE
Dane wyjsciowe
Struktura i funkcjonowanie algorytmu
Zadanie
wykonane
Słowo „algorytm” pochodzi od perskiego matematyka Mohammed ibn Musa al-Kowarizimi z IX w. ne.
Pierwszym znanym algorytmem jest algorytm Euklidesa (IV w. pne).
Algorytm jest to skończony ciąg reguł służący do przekształcenia zbiorów danych wejściowych w inny zbiór
danych wyjściowych (wyniki, rezultaty procesu przetwarzania). Każdy algorytm charakteryzuje się
następującymi cechami:
 jednoznaczność – algorytm nie może pozostawiać wątpliwości co do wyboru kolejnych operacji
 skończoność - dla każdego zestawu poprawnych danych wejściowych algorytm powinien dać wyniki
po skończonej liczbie operacji
 uniwersalność – algorytm powinien rozwiązywać nie jedno szczególne zadanie lecz całą klasę zadań
 poprawność, tzn. dla każdego poprawnego zestawu danych, po wykonaniu skończonej liczby
czynności, prowadzi do poprawnych wyników.
 określoność, tzn każda instrukcja jest na tyle szczegółowo opisana aby była wykonalna dla
użytkownika
1.1. Składniki algorytmu
Podstawowymi elementami każdego algorytmu są dane oraz operacje
1.1.1. Dane
Najogólniej dane dzielimy na wejściowe i wyjściowe ale każde z nich ma określoną strukturę. Struktura danych
jest takim sposobem przechowywania danych w komputerze aby ułatwiać ich wykorzystanie. Wyróżniamy:
 typ liczbowy (np. całkowity, zmiennoprzecinkowy, stałoprzecinkowy)
 typ znakowy (znaki alfanumeryczne)
 typ logiczny
 tablice
 słownik
 zbiór
 rekord
 plik
 kolejkę
 stos
 drzewo
1.1.2. Operacje
Operacje są ciągami jednorodnych czynności wykonywanych przez algorytm. W algorytmach wyróżnia się
operacje:
 arytmetyczne - składające się z działań arytmetycznych, takich jak dodawanie, pierwiastkowanie itd.
 logiczne - działania porównania, ustalania wartości logicznej, koniunkcji, negacji, alternatywy itp.
 sterujące - umożliwiają poruszanie się po algorytmie stosownie do aktualnych wartości danych
parametrycznych i argumentów branych pod uwagę operacji
1.2. Metody opisu algorytmu
Algorytmy można opisać m. in. za pomocą: języka naturalnego, schematu blokowego, pseudojęzyka lub
formalnego języka programowania
str. 1
1.2.1. Schemat blokowy
Schematy blokowe są tzw. metajęzykiem. Oznacza to, że jest to język bardzo ogólny, służy do opisywania
algorytmów w taki sposób, by na jego podstawie można było je zaimplementować w każdym języku.
Schematy blokowe zalicza się również do grupy „języków" graficznych.
W schemacie blokowym można wyróżnić następujące grupy elementów:
 Strzałki – określają połączenie elementów oraz kierunek przepływu danych.
 Operandy – charakteryzuję wszystkie operacje, instrukcje bez wyrażeń warunkowych.
Blok WEJŚCIA / WYJŚCIA - służy do wprowadzania i wyprowadzania danych
do/z programu
Blok OPERACYJNY – zawiera instrukcje, w wyniku których następuje zmiana
wartości, postaci lub miejsca zapisu zmiennych/danych.
 Predykaty – charakteryzuję wyłącznie wyrażenie decyzyjne.
Blok WARUNKOWY- określa wybór jednej z dwóch możliwych dróg działania
Instrukcja warunkowa po podstawieniu zmiennych jest zdaniem logicznym –
jest prawdą lub fałszem.
Blok SELEKCJI- określa wybór jednej z możliwych dróg działania. Zbiory wartości
występujące w instrukcji wyboru powinny być rozłączne i dawać w sumie zbiór
wszystkich wartości, które może przyjmować zmienna.

Etykiety – charakteryzują początek i koniec programu. Do grupy etykiet zalicza się również elementy
przeniesienia do innego miejsca danego schematu lub odwołanie do innego schematu.
Blok GRANICZNY – oznacza początek lub koniec działania algorytmu
ŁĄCZNIK WEWNĘTRZNY - służy do łączenia różnych części schematu znajdujących
się na tej samej stronie.
ŁĄCZNIK ZEWNĘTRZNY - służy do łączenia różnych części schematu znajdujących
się na różnych stronach.
Zasady zapisu schematu blokowego
 Schemat ma tylko jeden blok START i przynajmniej jeden blok STOP
 Bloki połączone są strzałkami wyznaczającymi kolejność instrukcji
 Do każdego bloku prowadzić może kilka linii
 Z każdego bloku (z wyjątkiem PREDYKATU i STOPU) wychodzi dokładnie jedna linia
 Z WARUNKU wychodzą dokładnie 2 drogi (ozn. TAK i NIE), ze STOPU nie wychodzi żadna droga.
 Linie mogą sie łączyć, a punkt połączenia nazywa sie punktem zbiegu
 W danym bloku są wykonywane wszystkie instrukcje albo żadna
 Relacje większości, równości, operacje dodawania, mnożenia, koniunkcji, alternatywy, itd. zapisywane są za
pomocą powszechnie używanych w matematyce symboli. Przypisanie wartości do pewnej zmiennej oznaczane
jest za pomocą operatora :=
START
Programik wyznaczający moduł z liczby a. Napisany jest
w schemacie blokowym i pseudojęzyku.
CZYTAJ a
T
a≥0
N
Ma:=-a
Ma:=a
Pisz Ma
STOP
Programe Moduł
BEGIN
Read a
If a≥0 then
Ma:=a
Else
Ma:=-a
Write “Moduł z liczby” a ”=”Ma
END
str. 2
1.2.2. Pseudojęzyk
Konwencja notacyjna z pogranicza języka naturalnego i języka programowania. Zwykle forma zapisu przypomina
jeden z wielu występujących dziś języków programowania, stanowiąc mieszaninę konstrukcji zapożyczonych z wielu z
nich. (Pseudojęzyk używany na zajęciach opiera się głównie na Pascalu)
Podstawowe instrukcje:

Instrukcje blokujące
Begin
ciąg instrukcji bloku
End

Instrukcja wejścia/wyjścia
READ a;
WRITE ‘ Równanie nie ma rozwiązania’

Instrukcja podstawiania B:=a;
waga:=40.4;

Instrukcje warunkowe
if warunek then
blok instrukcji I
else
blok instrukcji II
endif

T
N
warunek
blok
instrukcji I
blok
instrukcji II
Instrukcje pętli FOR
For i:=wart.początkowa to wart.końcowa step krok do
blok instrukcji
For i in nazwa kolejki, słownika, zbioru step krok do
blok instrukcji
i:=wart.początkowa
i≤wart.końcowa
i:=i+krok
N
T
blok
instrukcji

Instrukcje pętli WHILE
While warunek do
blok instrukcji
endwhile

Instrukcje pętli DO WHILE
Do
blok instrukcji
While warunek
str. 3
 Podprogram - to wydzielona część programu wykonująca jakieś operacje. Podprogramy stosuje się, aby
uprościć program główny i zwiększyć czytelność kodu. Podobnie jak w Pascalu i Adzie podprogramy podzielimy
na funkcje i procedury:
o Funkcja wykonuje obliczenia i zwracać jakąś wartość, nie powinna natomiast mieć żadnego innego
wpływu na działanie programu (np. funkcja wyznaczająca max w podanej tablicy) . Dane są
wprowadzane jako parametry.
o Procedura nie zwraca żadnej wartości, zamiast tego wykonuje pewne instrukcje (np. procedura
wprowadzania danych)
1.3. Rodzaje algorytmów:

Algorytmy sekwencyjne (liniowe) to algorytmy, w których wszystkie kroki wykonuje się w kolejności takiej, w
jakiej zostały zapisane. Przykładem jest algorytm wyznaczanie pola kwadratu:
1. Podaj bok kwadratu a
2. Oblicz P=a^2
3. Napisz: Pole kwadratu wynosi P
 Algorytmy rozgałęzione to algorytmy które dopuszczają alternatywność danego zadania w zależności od
spełnienia określonych warunków. Przykładem jest algorytm wyznaczanie wartości bezwzględnej liczby:
1. Podaj liczbę a
2. Jeżeli a>=0 to Ma:= a
3. Jeżeli nie jest spełniony warunek a>=0 to Ma:=-a
4. Pisz: Moduł z liczby a wynosi Ma.
 Algorytmy iteracyjne charakteryzują się występowaniem bloku czynności, które są powtarzane aż do uzyskania
jakiegoś celu; w programowaniu takie postępowanie nazywamy pętlą.
Iteracje występują w dwóch podstawowych odmianach:
o iteracja z określoną liczbą powtórzeń : wykonuj czynność dokładnie N razy.
Np. wyznaczanie n-tego wyrazu ciągu arytmetycznego o pierwszym wyrazie a1 i różnicy r:
1. Podaj wyraz początkowy ciągu a1
2. Podaj różnicę r
3. Podaj liczbę n
4. Podstaw an:=a1
5. Powtórz n-1 razy instrukcje A
A. Podstaw an:=an+r
1. Pisz: n-ty wyraz ciągu arytmetycznego o pierwszym wyrazie a1 i różnicy r wynosi an
o

iteracja warunkowa: wykonaj czynność, dopóki jest spełniony warunek.
Np. wyznaczanie iteracyjne silni wg. wzoru: n!=1·2·...·(n-1)·n:
FUNCTION silniaITER(n∊ℕ0)∊ℕ
1. Podaj liczbę n
Begin
2. Podstaw s:=1
s:=1
3. Podstaw i:=1
For i:=1 to n step 1 do
4. Dopóki i<=n wykonuj instrukcję A i B
s:=s·i
A. Podstaw s:=s·i
Return s
B. Podstaw i:=i+1
End
5. Pisz: n! wynosi s
Algorytmy rekurencyjne to algorytmy, w których występuje funkcja/procedura wywołująca samą siebie.
Wywoływanie takie kończy się spełnieniem warunku zatrzymania rekurencji. Każda procedura rekurencyjna
poza warunkiem zatrzymana rekurencji ma określoną zależność rekurencyjną oraz określony poziom rekurencji.
Np. wyznaczanie silni wg. wzoru: n!=
n!=n·(n-1)! gdy n>0
0!=1
gdy n=0
FUNCTION silniaREK(n∊ℕ0)∊ℕ
Begin
If n=0 then
s:=1
else
s:=n·silniaREK(n-1)
Return s
End
str. 4
Zadania
instrukcja warunkowa, funkcje matematyczne
1.1. Określ, jakie wartości zwracają poniższe funkcje, dla argumentu x=-2 a jakie dla x=4. Narysuj schematy blokowe.
a) Function wa (x)
b) Function wb (x)
BEGIN
BEGIN
c) Function wc (x)
w:=0
w:=0
BEGIN
if x>0 then
if x>0 then
w:=0
2
w:=x
{
if x>0 then
2
2
w:=w+1
w:=x
w:=x
return w
w:=w+1
else
END
}
w:=w+1
return w
return w
END
END
1.2. Napisz algorytm:
a) rozwiązujący równanie postaci ax+b=0 (o podanych przez użytkownika współczynnikach).
2
b) rozwiązujący równanie kwadratowe (postaci ax +bx+c=0) o podanych przez użytkownika współczynnikach.
c) obliczający - w zależności od wyboru użytkownika - pole powierzchni lub objętość kuli o promieniu podanym przez
użytkownika.
d) który pobiera od użytkownika trzy liczby oznaczające długości odcinków. Jeśli z podanych odcinków można zbudować
trójkąt, to program oblicza pole tego trójkąta (ze wzoru Herona: pole trójkąta o bokach a,b,c to pierwiastek z liczby
p(p-a)(p-b)(p-c), gdzie p - połowa sumy boków). W przeciwnym razie pojawia się komentarz, że podane liczby nie
mogą być bokami trójkąta.
e) sprawdzający, czy podany przez użytkownika rok jest rokiem przestępnym (rok przestępny [liczbowo] spełnia
następujące warunki: jest podzielny przez 4, ale nie jest podzielny przez 100, chyba że jest podzielny przez 400).
f) pobierający od użytkownika wysokość rocznego dochodu, a następnie obliczający należny podatek. W przypadku gdy
dochód jest mniejszy niż 37024 zł podatek to 19% dochodu minus 493 zł 32 gr, w przypadku gdy dochód wynosi co
najmniej 37024 zł ale mniej niż 74048 zł podatek to 6541 zł 24 gr + 30% nadwyżki ponad 37024 zł, dla dochodu
wynoszącego co najmniej 74048 zł podatek to 17648 zł 44 gr + 40% nadwyżki ponad 74048 zł.
1.3. Określ, co realizują poniższe algorytmy. Czy te schematy można uprościć. Napisz pseudokody.
a)
START
START
Czytaj a,b,c
Czytaj a,b,c
a>b
T
N
c>a
z:=a
a:=b
b:=z
T
Pisz c (a,b]
N
c<b
T
Pisz c (a,b]
N
c=b
Pisz c (a,b]
N
b>c
T
N
z:=b
b:=c
c:=z
T
Pisz c (a,b]
a>b
T
N
z:=a
a:=b
b:=z
STOP
Pisz a,b,c
STOP
str. 5