• Nie Znaleziono Wyników

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

N/A
N/A
Protected

Academic year: 2021

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

Copied!
4
0
0

Pełen tekst

(1)

1. Algorytmy

Zadaniem obliczeniowym nazywamy dowolną funkcję funkcję, która przekształca zbiór danych wejściowych na zbiór danych wyjściowych, spełniających określone warunki, przy wskazanych do dyspozycji zasobach (czas, pamięd, komunikacja, itp). Algorytmy są metodami rozwiązania zadania obliczeniowego.

Każdy algorytm charakteryzuje się następującymi cechami:

 uniwersalnośd – algorytm powinien rozwiązywad nie jedno szczególne zadanie lecz całą klasę zadao;

 określonośd – każda instrukcja jest na tyle szczegółowo opisana aby była wykonalna dla użytkownika;

 porządek – operacje wykonywane w ściśle ustalonej kolejności od stanu START do stanu STOP;

 jednoznacznośd – algorytm nie może pozostawiad wątpliwości co do wyboru kolejnych operacji, tzn. w każdym przypadku zastosowania algorytmu dla tych samych danych otrzymamy ten sam wynik;

 poprawnośd – dla każdego poprawnego zestawu danych, algorytm prowadzi do poprawnych wyników;

 skooczonośd - dla każdego zestawu poprawnych danych wejściowych algorytm powinien dad wyniki po skooczonej liczbie operacji;

 efektywnośd – algorytm musi dawad rozwiązanie przy użyciu z góry określonych zasobów (czas, pamięd, komunikacja).

Słowo „algorytm” pochodzi od nazwiska perskiego matematyka Mohammed ibn Musa al-Kowarizimi z IX w.

Pierwszym znanym algorytmem jest algorytm Euklidesa (IV w. p.n.e.).

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ę.

Wyróżniamy m.in.:

 typ liczbowy (np. całkowity, zmiennoprzecinkowy, stałoprzecinkowy)

 typ znakowy (znaki alfanumeryczne)

 typ logiczny

 tablice

 słownik

 zbiór

 rekord

 plik

 kolejkę

 stos

 drzewo

Danymi są: zmienna, stała, argument, wynik funkcji lub wartośd. Nazwa danej powinna oddawad to, czym się dany obiekt zajmuje – np. predkoscKilobajtyNaSekunde, polePodstawyStozka2. Nazwa zaczyna się od małej litery, jest pisana bez spacji (mogą byd podkreślniki). Nazwa nie może byd słowem kluczowym – np. for .

1.1.2. Operacje

Operacje są ciągami jednorodnych czynności wykonywanych przez algorytm. W algorytmach wyróżnia się operacje:

 arytmetyczne – np. dodawanie, pierwiastkowanie itd. (UWAGA: będziemy używali notacji matematycznej).

 logiczne – np. porównania (==), ustalania wartości logicznej koniunkcji (AND), negacji (NOT), alternatywy (OR) 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 opisad m. in. za pomocą: języka naturalnego, schematu blokowego, listy kroków, pseudokodu lub

formalnego języka programowania.

(2)

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 zaimplementowad w każdym języku. Schematy blokowe zalicza się również do grupy „języków" graficznych.

W schemacie blokowym można wyróżnid 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żeo warunkowych.

 Predykaty – charakteryzuję wyłącznie wyrażenie decyzyjne.

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.

Zasady zapisu schematu blokowego

 Schemat ma tylko jeden blok START i przynajmniej jeden blok STOP

 Bloki połączone są strzałkami wyznaczającymi kolejnośd instrukcji

 Do każdego bloku prowadzid 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 łączyd, a punkt połączenia nazywa sie punktem zbiegu

 W danym bloku są wykonywane wszystkie instrukcje albo żadna

 Instrukcje są opisywane językiem matematycznym. Przypisanie wartości do pewnej zmiennej oznaczane jest za pomocą operatora :=

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.

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 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.

Blok SELEKCJI- określa wybór jednej z możliwych dróg działania. Zbiory wartości występujące w instrukcji wyboru powinny byd rozłączne i dawad w sumie zbiór wszystkich wartości, które może przyjmowad zmienna .

Programik wyznaczający moduł z liczby a. Napisany jest w schemacie blokowym i pseudojęzyku. Zmiennymi są liczby rzeczywiste a oraz modul_a.

begin wej(a) if ( a≥0)

{

modul_a:=a }

else {

modul_a:=-a }

wyj(modul_a) end

N START

STOP

Czytaj: a

modul_a:=a

Pisz: modul_a

T

a≥0

modul_a:=-a

Blok PROCEDURALNY – służy do opisu podprogramu

(3)

1.2.2. Pseudod

Pseudokod to 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.

(W poniższym opisie zaprezentowana została notacja na użytek naszego pseudokodu – mieszanka C++, Pythona, Pascala i …).

Podstawowe instrukcje:

 Instrukcje blokujące begin

ciąg instrukcji bloku głównego ciała algorytmu end

 Instrukcja WEJŚCIA/WYJŚCIA

wej (zmienne) (w zależności od kodu może byd: read, cin, input, itd.) wyj (zmienne) (w zalezności od kodu może byd: write, cout, print, itd.)

 Instrukcja podstawiania b:=”hej”;

waga_kg:=40.4;

 Instrukcje warunkowe IF (elif oraz else nie muszą występowad) if (warunek 1)

{ blok instrukcji I } elif (warunek 2) { blok instrukcji II } else

{ blok instrukcji III }

 Instrukcje pętli FOR

Pętla iteracyjna (może byd analogiczna z ujemnym krokiem):

for (i:=wart.początkowa; iwart.koocowa; i:=i+krok) { blok instrukcji }

Pętla po kolekcji:

for i in nazwa kolejki, słownika, zbioru step krok do { blok instrukcji }

 Instrukcje pętli WHILE while (warunek) { blok instrukcji }

 Instrukcje pętli DO WHILE do

{ blok instrukcji } while (warunek)

dowolnie wiele razy

blok instrukcji

N T

i:=i+krok

i≤wart.koocowawa i:=wart.początkowa

blok instrukcji

N

T

{

blok instrukcji warunkowej, pętli, … }

warunek warunek blok instrukcji I

blok instrukcji III

T N

blok instrukcji II

T

warunek 1

warunek 2

N

warunek blok instrukcji

N

T

(4)

Podprogram

- to wydzielona częśd programu wykonująca jakieś operacje. Podprogramy stosuje się, aby uprościd program główny i zwiększyd czytelnośd kodu. Podprogramy dzielimy na funkcje i procedury, chod obecnie najczęściej stosuje się funkcje. Każda funkcja posiada trzy własności:

posiada swoją unikatową nazwę;

może posiadad dowolną liczbę argumentów wejściowych (lub może nie mied żadnego). Nazwy argumentów wypisujemy w nawiasie po nazwie funkcji.

zwraca dane (lub nie). Wartośd, która ma zostad zwrócona przez funkcję ustawiamy słowem kluczowym RETURN.

1.3. Rodzaje algorytmów:

Algorytmy sekwencyjne (liniowe) to algorytmy, w których wszystkie kroki wykonuje się w kolejności, w jakiej zostały zapisane. Przykładem jest algorytm wyznaczanie pola kwadratu o boku a (zapisany w postaci listy kroków):

1. Podaj bok kwadrat: a 2. Oblicz p=a^2

3. Napisz: ”Pole kwadratu wynosi ” p

Algorytmy rozgałęzione to algorytmy które dopuszczają alternatywnośd 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 modul_a:= a

3. Jeżeli nie jest spełniony warunek a>=0 to modul_a:=-a 4. Pisz: ”Moduł z liczby a wynosi ” modul_a.

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órzeo : wykonuj czynnośd 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 instrukcję A A. Podstaw an:=an+r

6. Pisz: ”n-ty wyraz ciągu arytmetycznego o pierwszym wyrazie a1 i różnicy r wynosi ” an o

iteracja warunkowa: wykonaj czynnośd, dopóki jest spełniony warunek.

Np. wyznaczanie iteracyjne n silni dla n

ℕ wg. wzoru: n!=1·2·...·(n-1)·n:

1. Podaj liczbę: n 2. Podstaw s:=1 3. Podstaw i:=1

4. Dopóki i<=n wykonuj instrukcję A i B A. Podstaw s:=s·i

B. Podstaw i:=i+1 5. Pisz: ”n! wynosi ” s

Algorytmy rekurencyjne to algorytmy, w których występuje funkcja/procedura wywołująca samą siebie.

Wywoływanie takie kooczy się spełnieniem warunku zatrzymania rekurencji. Każda procedura rekurencyjna poza warunkiem zatrzymana rekurencji ma określoną zależnośd rekurencyjną oraz określony poziom rekurencji.

Np. wyznaczanie n silni dla nℕ wg. wzoru: n!=

function silniaREK(n) begin

if (n=0) { s:=1 } else

{ s:=n·silniaREK(n-1) } return s

end

function silniaITER(n) begin

s:=1

for i:=1 to n step 1 do { s:=s·i }

return s end

n·(n-1)! gdy n>0

1 gdy n=0

gdy n=0

Definicja funkcji:

function nazwaFunkcji (argumenty) begin

{ blok instrukcji }

return zwracana wartośd/wartości end

Wywołanie funkcji:

Np. nazwaFunkcji(argumenty), Np. x := nazwaFunkcji(argumenty)

Cytaty

Powiązane dokumenty

Zaleca się, aby każdy podprogram posiadał własną planszę (czyli plik o dowolnej nazwie nazwa.lis np.. Plik/Plansza/Nowa i następnie na planszy wywołanej

Strukturę magnezu można opisać jako sieć złożoną z dwóch sieci prostych heksagonalnych o typie

[r]

[r]

[r]

Za pomoc¡ algorytmu przybli»onego omawianego na wykªadzie znajd¹ rozwi¡zanie problemu komi- woja»era dla nast¦puj¡cego

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

• Języki wysokiego poziomu: ADA, Pascal, Fortran, C++, Lisp, B, SmallTalk, Java. &#34;Podstawy informatyki&#34;, Tadeusz Wilusz