Temat lekcji: "Przykłady algorytmów"
-------------------------------------------------------------------------------------------------------------------------

WSTĘP

Co to jest algorytm?

Co w takim przepisie może się znaleźć?

Jakie mogą być rodzaje algorytmów?

W jaki sposób można przedstawić algorytm?

Symbole

Zrozumieć algorytm

Opis za pomocą schematu blokowego.

ZADANIA

Przykłady algorytmów

- Równanie kwadratowe

- Układ równań liniowych

- Iloczyn

- Minimum Maximum

- Liczby pierwsze

- NWD

- Silnia

Liczby pierwsze

WSTĘP

Aby zająć się pisaniem programów, należy nabyć pewnych umiejętności, do których na pewno trzeba zaliczyć:

- zdolność logicznego myślenia,

- jasnego formułowania problemów do rozwiązania,

- podawanie czytelnych i jednoznacznych odpowiedzi.

Chęć nabycia tych umiejętności zmusza do tego, aby starannie wykonywać swoją pracę. Widać z tego, że pewne nawyki są przydatne nie tylko w informatyce, ale również w naszym codziennym życiu. Jeżeli potrafimy rozwiązywać problemy za pomocą komputera, wykorzystując języki programowania, to znaczy, że programujemy. Zanim jednak poznamy konkretny język programowania i zaczniemy pisać jakikolwiek program, należy nauczyć się posługiwania się algorytmami. Komputer jest tylko maszyną, którą wykorzystujemy do własnych celów, bo komputer nie myśli, lecz tylko wykonuje polecenia. Dlatego krok po kroku trzeba mu podać czynności, jakie ma wykonać.

 

Co to jest algorytm?

Wydaje się, że najbardziej przystępną definicją będzie określenie algorytmu jako przepisu prowadzącego do rozwiązania zadania, problemu. W przepisie tym podaje się opis czynności, które trzeba wykonać, oraz dane, dla których algorytm będzie określony.

 

Co w takim przepisie może się znaleźć?

Może być to np. przypisanie zmiennej określonej wartości (np. za x podstaw 3), wyświetlenie w danym momencie wyniku obliczeń, pobranie danych z dostępnej bazy danych. Mówimy, że podajemy instrukcje lub że będzie wykonana operacja. Dane (stałe, zmienne, parametry), które są przetwarzane za pomocą instrukcji, nazywamy obiektami. Wyróżnia się wiele obiektów - mogą to być liczby naturalne, rzeczywiste, znaki, słowa. Rozwiązanie dowolnego problemu polega na wykonaniu w określonej kolejności akcji na obiektach. Zbiór tych akcji nazywamy algorytmem.

 

Jakie mogą być rodzaje algorytmów?

iteracyjne - rodzaj algorytmu i programu, w których wielokrotnie wykonuje się pewne instrukcje, dopóki nie zostanie spełniony określony warunek,

rekurencyjne - takie procedury, które w swojej definicji posiadają wywołanie samej siebie,

sekwencyjne - instrukcje wykonywane są w porządku, w jakim zostały wprowadzone.

 

W jaki sposób można przedstawić algorytm?

Pierwszy i najprostszy to opis słowny, np. po lekcjach pójdę do kiosku i kupię gazetę. Innymi przykładami mogą być: podyktowanie przez telefon przepisu na zaparzenie herbaty czy wyjaśnianie koledze, jak należy rozwiązać zadanie z matematyki. Przykładów takich zachowań, kiedy widzimy, że występuje jakaś kolejność przewidywalnych działań, można podawać bardzo wiele. To są przykłady opisów algorytmicznych. Inny sposób to zapis algorytmu za pomocą schematu blokowego. Aby zapisać algorytm za pomocą takiego schematu, trzeba poznać stosowane symbole i ich znaczenie. Będziemy używać tzw. skrzynki - graficznego sposobu przedstawienia czynności wykonywanych przez komputer. Skrzynki te łączone są za pomocą strzałek. W ten sposób pokazujemy kolejność wykonywania akcji.

 

Symbole

Skrzynki START i STOP wskazują początek i koniec każdego algorytmu. Ze skrzynki START wychodzi tylko jedna droga, do skrzynki STOP wchodzi co najmniej jedno połączenie.

W skrzynce instrukcyjnej umieszcza się polecenia do wykonania (instrukcje) - podstawienie, obliczenie, wprowadzenie wartości.

W skrzynce warunkowej umieszcza się warunek, który decyduje o wyborze dalszej drogi postępowania. Ze skrzynki wychodzą dwa połączenia: TAK (wybierane, gdy warunek jest spełniony), NIE (gdy warunek nie jest spełniony).

W skrzynce wejścia / wyjścia umieszcza się wprowadzane dane lub wyprowadzane wyniki. Ze skrzynki wychodzi tylko jedno połączenie.

 

Zrozumieć algorytm

Aby dobrze zrozumieć algorytmy, należy samemu spróbować go ułożyć. Będzie ciekawiej, gdy zaczniemy zadawać pytania i algorytm rozbudowywać. Zacznijmy od najprostszego, książkowego algorytmu: chcę wyjść z domu i w zależności od pogody wezmę parasol lub nie. Opis słowny: przed wyjściem z domu sprawdzam, jaka jest pogoda; jeżeli pada, zabieram parasol i wychodzę, jeśli nie pada, wychodzę. W tak prostym przypadku spotykamy się z sytuacją, w której występuje sprawdzenie warunku. Słowem, które będzie nas informować, że należy wprowadzić sprawdzenie warunku, jest słowo "jeśli".

 

Opis za pomocą schematu blokowego.

W algorytmie tym wykorzystujemy skrzynkę warunkową, ponieważ mamy do czynienia z sytuacją, gdy tok dalszego postępowania zależy od dokonanego wyboru (dokładnie: zależy od pogody).

 

 

 

 

 

 

 

 

 

 

 

Drugi przykład prostego algorytmu: oblicz objętość prostopadłościanu o krawędziach długości: 3cm·5cm·8cm.

Słowny opis postępowania: aby obliczyć objętość, należy pomnożyć przez siebie długości trzech krawędzi wychodzących z jednego wierzchołka; długości muszą mieć jednakowe miano.

 podanej treści zadania wynika, że mamy dane długości potrzebnych krawędzi w jednakowych jednostkach. Zadanie to nie sprawi nikomu żadnej trudności. Warto jednak pomyśleć, czy nie można byłoby ułożyć takiego algorytmu, za pomocą, którego obliczymy objętość każdego prostopadłościanu.

Opis słowny:

START

- podaj długość pierwszej krawędzi; a:=

- podaj długość drugiej krawędzi; b:=

- podaj długość trzeciej krawędzi; c:=

- wykonaj obliczenie V:= a*b*c

- podaj wynik; V:=

STOP

W przykładzie tym wykonywane czynności następują jedna po drugiej. Instrukcje wykonywane są w takim porządku, w jakim zostały zapisane. Jest to przykład algorytmu zapisanego w postaci sekwencji.

 

Zadanie domowe:

Zapisz powyższy algorytm za pomocą schematu blokowego.

Jakimi cechami musi charakteryzować się dobry algorytm?

 

Spotykamy się często z takim sytuacjami, że musimy wykonywać pewną czynność aż do momentu, gdy odniesiemy sukces, np. zrób dziesięć pompek; będziesz tak długo czytać wiersz, aż nauczysz się go na pamięć; dopóki będziesz siedzieć cicho, nie zapytam cię. Z tego wynika, że możemy spotkać się z trzema sytuacjami: gdy musimy wykonać czynność bądź zadaną ilość razy, bądź do momentu spełnienia warunku.
Wykonaj instrukcję n razy, np. przeczytaj wiersz trzy razy.

Opis słowny:

START

Przeczytaj wiersz pierwszy raz.

Przeczytaj wiersz drugi raz.

Przeczytaj wiersz trzeci raz.

STOP

W tym przypadku mamy algorytm zapisany w postaci sekwencji.

Można też wykonać to inaczej:

Opis słowny:

START

1. Przeczytaj wiersz trzy razy.

2. Czytaj wiersz.

3. Czy przeczytałeś wiersz trzy razy?
    a) jeśli tak, przejdź do kroku 4,
    b) jeśli nie, przejdź do kroku 2.

4. Przeczytałeś wiersz trzy razy.

STOP

 

ZADANIA

 

Zadanie 1

Zbuduj algorytm, za pomocą, którego można obliczyć drugą i trzecią potęgę danej liczby.

Zadanie 2

Zbuduj algorytm służący do rozwiązania równania typu ax + b = 0

Zadanie 3

Przedstaw za pomocą algorytmu sposób na obliczanie gęstości ciała stałego.

Zadanie 4

Zapisz za pomocą algorytmu sposób na rozpoznawanie rodzaju ruchu ciała ze względu na zmianę prędkości.

 

Przykłady algorytmów

BUDOWA ALGORYTMU:

START
-podaj wartość współczynnika a,
- podaj wartość współczynnika b,
- jeżeli a = 0, to sprawdź b,
- jeżeli b = 0, to napisz, że jest to równanie tożsamościowe
(nieskończenie wiele rozwiązań),
- jeżeli b<>0, to napisz, że jest to
równanie sprzeczne
(nie ma rozwiązań),
- jeżeli a<>0, to oblicz x

- -
- napisz rozwiązanie równania x:=
STOP
 

 

 

 

 

BUDOWA ALGORYTMU:

START
 
- podaj liczbę a,
- oblicz kwadrat liczby a,
- oblicz sześcian liczby a,
- podaj wartość kwadratu liczby a,
- podaj sześcian liczby a.
 
STOP
 

 

 

1.Na podstawie zadania 1 zbuduj algorytm obliczający kolejne potęgi podanej liczby (np. czwartą i piątą).
2.
2.Zbuduj algorytm obliczający pierwiastek kwadratowy i sześcienny danej liczby.
3.
3.Zapisz algorytm opisujący postępowanie przy poszukiwaniu pomyślanej liczby (z podanego zakresu w możliwie najmniejszej liczbie prób).
4.
4.Zapisz algorytm rozwiązywania równania typu ax + b = c
5.
5.Zapisz algorytm obliczający sumę pięciu liczb.
6.
6.Zapisz algorytm obliczania średniej z pięciu liczb.
Zapisz algorytm obliczania średniej ocen ze świadectwa szkolnego.
Dane są długości trzech odcinków. Zbadaj, czy można zbudować z nich trójkąt.
Sprawdź, czy trójkąt o bokach a, b, c jest trójkątem prostokątnym.
Podaj algorytm obliczania pola figur płaskich:
    a) kwadratu,
    b) prostokąta,
    c) dowolnego trójkąta,
    d) trójkąta równobocznego,
    e) trapezu,
    f) rombu,
    g) równoległoboku.
Podaj algorytm obliczający pole powierzchni całkowitej i objętość:
    a) sześcianu,
    b) graniastosłupa,
    c) walca.

BUDOWA ALGORYTMU:

START
 
Zmierz masę ciała stałego m:=
Zmierz za pomocą menzurki objętość ciała V:=
Oblicz gęstość ciała
Podaj gęstość ciała (g/cm3) r:=
 
STOP
 

 

 

 

 

 

Budowa algorytmu
 
START
 
Podaj prędkość początkową v1:=
Podaj prędkość końcową v2:=
Oblicz przyrost prędkości Czy ?
a) jeśli tak, pisz: ruch jednostajny,
b) jeśli nie, sprawdź, czy jeśli tak, pisz: ruch jednostajnie przyspieszony,
jeśli nie, pisz: ruch jednostajnie opóźniony.
 
STOP
 
Zapisz powyższy algorytm za pomocą schematu blokowego.
 
Zapisz za pomocą algorytmu sposób obliczania ciężaru ciała na:
      a) Ziemi,
      b) Księżycu,
      c) Marsie,
      d) Wenus.
 
Zapisz za pomocą algorytmu sposób obliczania przyspieszenia ciała, gdy znamy przyrost prędkości ciała oraz czas, w którym ten przyrost nastąpił.
 
Zapisz algorytm obliczania drogi w ruchu:
     a) jednostajnym po linii prostej,
     b) jednostajnym po okręgu,
     c) jednostajnie przyspieszonym.
 
Zapisz za pomocą algorytmu sposób obliczania przyspieszenia ciała, gdy znamy wartość siły wypadkowej działającej na ciało oraz masę tego ciała. (II zasada dynamiki).
 
Zapisz algorytm obliczania:
    a) pracy,
    b) mocy,
    c) energii potencjalnej ciężkości,
    d) energii kinetycznej ciała,
    e) oporu elektrycznego (prawo Ohma).
 
Zapisz algorytm opisujący własności obrazu w zależności od długości ogniskowej i odległości ciała od soczewki lub zwierciadła dla:
    a) zwierciadeł płaskich,
    b) zwierciadeł wklęsłych,
    c) zwierciadeł wypukłych,
    d) soczewek skupiających,
    e) soczewek rozpraszających.

 

 

 ax2 + bx + c = 0można rozwiązać różnymi metodami. Jedną z nich jest zastosowanie wyróżnika (tzw. delty). W przykładowym algorytmie oznaczony jest literą D. W zależności od wartości tego wyróżnika można rozpatrywać następujące sytuacje:
Jeśli D > 0 to równanie posiada dwa pierwiastki x1 i x2: 
Jeśli D = 0 wtedy równanie posiada jeden pierwiastek.
Jeśli D < 0 to wówczas równanie nie posiada rozwiązań rzeczywistych (istnieją tylko pierwiastki urojone - patrz akademicki zakres matematyki 
Przedstawiony problem należy do podstawowych szkolnych umiejętności i bliżej nie będzie przedstawiany. Istnieje oczywiście możliwość narysowania innych algorytmów rozwiązujących ten problem. Pomyśl i spróbuj.
 

 

 

 

 

---------------------------------------------------------------------------------------------------------------------------------------

a1*x + b1*y = c1
a2*x + b2*y = c2można rozwiązać obliczając wyznaczniki tabel (macierzy) zgodnie z przykładem: W   =a1b1 =  a1*b2 - a2*b1a2b2W zależności od wartości wyznaczników W, Wx i Wy można rozpatrywać następujące sytuacje:
Jeśli W <> 0 to układ  równań posiada rozwiązanie x = Wx / W i y = Wy / W 
Jeśli W = 0 i Wx <> 0 lub Wy <> 0 wtedy układ  nie posiada rozwiązań (układ sprzeczny).
Jeśli W = 0 i Wx = 0 i Wy = 0 to wówczas układ równań posiada nieskończenie wiele rozwiązań 
Istnieje oczywiście możliwość narysowania innych algorytmów rozwiązujących ten problem. Pomyśl i spróbuj.
 

 

 

 

---------------------------------------------------------------------------------------------------------------------------------------

 

Jest to przykład algorytmu zamkniętego cyklicznego (algorytm z pętlą) Zmienna pomocnicza i pełni rolę licznika pętli.
Algorytm  w formie opisowej:
Przyjmujemy  i = 1 i idź do następnego etapu.
Przyjmujemy  wynik = 1 i idź do następnego etapu.
Przyjmujemy wynik równy iloczynowi dotychczasowej wartości wynik i bieżącej wartości ai.i przechodzimy do następnego etapu.
Sprawdzamy czy i = n. Jeśli tak to kończymy obliczanie i podajemy wartość iloczynu. W przeciwnym przypadku zwiększamy wartość i o 1 i wracamy do punktu 3.
 

 

 

 

 

---------------------------------------------------------------------------------------------------------------------------------------

Jest to także algorytm zamknięty (algorytm z pętlą). Analogicznie postępując wyszukamy także wartość maksymalną. Zmienna pomocnicza i pełni rolę licznika pętli.
Algorytm  w formie opisowej:
Przyjmujemy  i = 1 i idziemy do etapu 2.
Przyjmujemy  Min = 1 i idziemy do następnego etapu.
Sprawdzamy czy i < n. Jeśli tak to przechodzimy do etapu 4. W przeciwnym przypadku kończymy poszukiwanie i podajemy wartość Min.
Zwiększamy i o 1 ( aktualizacja licznika pętli) i przechodzimy do kolejnego etapu.
Porównujemy  ai (kolejna liczba z przeszukiwanego zbioru) z bieżącą wartością Min.. Jeśli ai  >=  Min  to przechodzimy do etapu 3. W przeciwnym przypadku przechodzimy do etapu 2 (czyli dotychczasowy element minimalny zostanie zastąpiony kolejnym mniejszym)
 

 

 

 

 

---------------------------------------------------------------------------------------------------------------------------------------

Liczba pierwsza to taka liczba, która posiada tylko dwa podzielniki: 1 i samą siebie. Np. 1, 2, 3, 5, 7,.... Istnieje wiele algorytmów rozwiązujących niniejszy problem. Przedstawiony algorytm jest jednym z nich. Zaletą jego jest prostota natomiast wadą nieoptymalność. Jednym ze sposobów optymalizacji jest eliminacja wykonywania sprawdzeń dla liczb będących wielokrotnościami liczb, dla których wykonano sprawdzenie. 
 

 

 

 

 

 

 

 

---------------------------------------------------------------------------------------------------------------------------------------

Istnieją różne algorytmy rozwiązujące niniejszy problem. Klasykę rozwiązań stanowi opisywany w większości książek algorytm Euklidesa wykorzystujący kolejne dzielenie całkowite ( dzielenie z resztą ) liczb.   Przedstawiony algorytm jest modyfikacją klasycznego algorytmu Euklidesa. Polega na szukaniu różnicy dwóch liczb (gdy są różne). W kolejnym etapie większa liczba zostaje odrzucona i rozpatrywane są uzyskana różnica i mniejsza liczba. Gdy uzyskana zostanie równość to jako NWD przyjęta zostaje jedna z ostatecznie porównywanych liczb. Np. NWD (18, 30) = 6, gdyż:
30 - 18 = 12
18 - 12 = 6
12 - 6 = 6
6 = 6
d. 
 

 

 

 

 

---------------------------------------------------------------------------------------------------------------------------------------

 

 
Istnieją zasadniczo dwa typy algorytmów rozwiązujących problem obliczenia silni liczby N.
Algorytm rekurencyjny - opisywany szeroko w literaturze jako szkolny przykład rekurencji. [Rekurencja (ogólnie) - polega na tym, że procedura (funkcja lub podprogram) wywołuje samą siebie]. Wykorzystuje się zależność: N!=(N-1)!*N (dla N>1).
Algorytm cykliczny (iteracyjny)  - patrz algorytm iloczynu liczb
Przedstawiony algorytm (cykliczny) oblicza iloczyn kolejnych liczb naturalnych, aż do osiągnięcia przez automatycznie zmieniany czynnik wartości N, zgodnie z zależnością: N! = 1*2*3*4* ...*N