Wstep do Informatyki

Transkrypt

Wstep do Informatyki
Wstep
˛ do Informatyki
Bożena Woźna-Szcześniak
[email protected]
Jan Długosz University, Poland
Wykład 6
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
1/1
Algorytmika
Najstarsza dziedzina informatyki, która zajmuje sie˛ badaniem
algorytmów, ich własnościami, projektowaniem i analiza.
˛
(Dawid Harel: ”Rzecz o istocie informatyki – algorytmika”.)
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
2/1
Algorytmika
Najstarsza dziedzina informatyki, która zajmuje sie˛ badaniem
algorytmów, ich własnościami, projektowaniem i analiza.
˛
(Dawid Harel: ”Rzecz o istocie informatyki – algorytmika”.)
W informatyce algorytmika jest nieodłacznie
˛
zwiazana
˛
z algorytmami
przetwarzania struktur danych.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
2/1
Potoczne rozumienie pojecia
˛
“algorytm”
Potocznie algorytm jest rozumiany jako pewien przepis na
wykonanie jakiegoś zestawu czynności, prowadzacych
˛
do
osiagni
˛ ecia
˛
oczekiwanego i z góry określonego celu.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
3/1
Potoczne rozumienie pojecia
˛
“algorytm”
Potocznie algorytm jest rozumiany jako pewien przepis na
wykonanie jakiegoś zestawu czynności, prowadzacych
˛
do
osiagni
˛ ecia
˛
oczekiwanego i z góry określonego celu.
Mówi sie˛ również, że algorytm jest pewna˛ ściśle określona˛
procedura˛ obliczeniowa,
˛ która dla zestawu właściwych danych
wejściowych “produkuje” żadane
˛
dane wyjściowe.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
3/1
Potoczne rozumienie pojecia
˛
“algorytm”
Potocznie algorytm jest rozumiany jako pewien przepis na
wykonanie jakiegoś zestawu czynności, prowadzacych
˛
do
osiagni
˛ ecia
˛
oczekiwanego i z góry określonego celu.
Mówi sie˛ również, że algorytm jest pewna˛ ściśle określona˛
procedura˛ obliczeniowa,
˛ która dla zestawu właściwych danych
wejściowych “produkuje” żadane
˛
dane wyjściowe.
Przykłady algorytmów: przepisy kulinarne, intrukcje montażu,
procedury prowadzenia badań naukowych, czy też procedura
wymiany koła w samochodzie, itp.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
3/1
Algorytm
Słowo ALGORYTM wywodzi sie˛ od nazwiska perskiego astronoma i
matematyka Abu Ja’far Muhammad ibn Musa al-Chorezmi
(spotykana też pisownia al-Khawarizmy) pisanego po łacinie jako
Algorismus.
Żył on na przełomie VIII i IX wieku naszej ery na terenach
obecnego Uzbekistanu i przypisuje sie˛ mu podanie reguł
dodawania, odejmowania, mnożenia i dzielenia liczb dziesietnych.
˛
Dzisiejsze, uogólnione znaczenie słowa algorytm zastosowano w
zasadzie dopiero w 20-tym stuleciu, kiedy to algorytm zaczał˛ być
rozumiany jako:
zbiór reguł postepowania,
˛
umożliwiajacych
˛
rozwiazanie
˛
określonego zadania w skończonej liczbie kroków i w skończonym
czasie
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
4/1
Parzenie kawy “po polsku”:
1
zagotować wode,
˛
2
wsypać zmielona˛ kawe˛ do filiżanki,
3
zalać kawe˛ wrzac
˛ a˛ woda,
˛
4
poczekać 5 min.
5
osłodzić do smaku.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
5/1
Algorytm - definicje formalne
Encyklopedia PWN: Algorytm to “(...) przepis na rozwiazanie
˛
określonego zadania podany jako zbiór kolejnych poleceń; jego
wykonawca˛ może być człowiek lub urzadzenie
˛
automatyczne (np.
komputer); (...)zapisany w jakimś jezyku
˛
programowania program”.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
6/1
Algorytm - definicje formalne
Encyklopedia PWN: Algorytm to “(...) przepis na rozwiazanie
˛
określonego zadania podany jako zbiór kolejnych poleceń; jego
wykonawca˛ może być człowiek lub urzadzenie
˛
automatyczne (np.
komputer); (...)zapisany w jakimś jezyku
˛
programowania program”.
Formalna definicja algorytmu została podana w 1936 roku przez
Alonzo Churcha i Alana Turinga. W szczególnoiści:
Church zastosował rachunek λ.
Turing zastosował własna˛ strukture˛ zwana˛ dziś “Maszyna˛ Turinga”.
Wykazano potem, że obydwie definicje sa˛ równoważne.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
6/1
Użyteczność algorytmu
Algorytm jako pewna określona procedura obliczeniowa posiada
cechy, które określaja˛ jej użyteczność:
poprawność
złożoność obliczeniowa:
Złożoność obliczeniowa algorytmu to ilość zasobów systemu
liczacego
˛
(np. komputera) potrzebna do jego wykonania.
Podstawowymi zasobami sa:
˛ czas procesora (ZŁO ŻONO Ś Ć
CZASOWA ) i obszar pamieci
˛ (ZŁO ŻONO Ś Ć PAMI ECIOWA
˛
).
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
7/1
Podstawowe cechy algorytmu
1. Posiada określony stan poczatkowy,
˛
czyli operacje˛ od której
zaczyna sie˛ jego realizacja.
2. Powinien zwracać prawidłowe wyniki dla każdego zestawu
poprawnych danych (warunek poprawności).
2. Ilość operacji potrzebnych do zakończenia pracy musi być
skończona (warunek dyskretności).
3. Musi dać sie˛ zastosować do rozwiazywania
˛
całej klasy zagadnień,
a nie jednego konkretnego zadania (warunek uniwersalności).
4. Interpretacja poszczególnych etapów wykonania musi być
jednoznaczna (warunek jednoznaczności).
5. Cel musi być osiagni
˛ ety
˛ w akceptowalnym czasie (warunek
efektywności).
6. Musi posiadać wyróżniony koniec.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
8/1
Etapy rozwiazywania
˛
problemów
Sformułowanie zadania.
Specyfikacja zadania, czyli określenie danych wejściowych oraz
celu (wyniku).
Poszukiwanie metody rozwiazania,
˛
czyli algorytmu.
Przedstawienie algorytmu w postaci:
opisu słownego,
listy kroków,
schematu blokowego,
pseudokodu,
jezyka
˛
programowania,
Analiza poprawności rozwiazania.
˛
Testowanie rozwiazanie
˛
dla różnych danych.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
9/1
Metody opisu algorytmów
Ograniczony podzbiór jezyka
˛
naturalnego (opis słowny, lista
kroków).
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
10 / 1
Metody opisu algorytmów
Ograniczony podzbiór jezyka
˛
naturalnego (opis słowny, lista
kroków).
Schemat blokowy – uniwersalna i dajaca
˛ odpowiedni stopień
ogólności forma graficznego zapisu algorytmu. Cechuje go przy
tym duża przejrzystość i czytelność. Schemat ten odzwierciedla
dobrze strukture˛ algorytmu w tym takie elementy jak rozgałezienia
˛
(punkty decyzyjne).
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
10 / 1
Metody opisu algorytmów
Ograniczony podzbiór jezyka
˛
naturalnego (opis słowny, lista
kroków).
Schemat blokowy – uniwersalna i dajaca
˛ odpowiedni stopień
ogólności forma graficznego zapisu algorytmu. Cechuje go przy
tym duża przejrzystość i czytelność. Schemat ten odzwierciedla
dobrze strukture˛ algorytmu w tym takie elementy jak rozgałezienia
˛
(punkty decyzyjne).
Pseudokod – Umowny, zwykle nie istniejacy
˛ i bardzo uproszczony
jezyk
˛
programowania, w którym opisany jest algorytm działania
programu. Definiuje podstawowe petle,
˛
warunki i typy danych.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
10 / 1
Klasyfikacja algorytmów
Rozważać bedziemy
˛
nastepuj
˛ ace
˛ rodzaje algorytmów:
algorytmy sekwencyjne
algorytmy z rozgałezieniem
˛
(algorytm wykonuje różne obliczenia w
zależnśoci od tego jaki warunek jest spełniony)
algorytmy iteracyjne (algorytm wykonuje obliczenia w petli
˛ dopóki
nie zostanie spełniony określony warunek)
algorytmy rekurencyjne (algorytm w kolejnych krokach wywołuje
sam siebie dla nowych wartości parametrów wykonania)
Oczywiście istnieje jeszcze wiele innych rodzajów algorytmów:
Algorytmy zachłanne, współbieżne, równoległe, genetyczne, z
powrotami, probabilistyczne itd...
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
11 / 1
Algorytm sekwencyjny (liniowy)
Definicja
Ma postać ciagu
˛ kroków, które musza zostać bezwarunkowo wykonane jeden
po drugim. Algorytm taki nie zawiera żadnych warunków ani rozgałezie
˛ ń.
Zaczyna sie˛ od podania zestawu danych, nastepnie
˛
wykonywane sa˛ kolejne
kroki wykonawcze, aż dochodzimy do wyniku.
Przykład:
Dodanie lub mnożenie dwóch liczb:
1
Sformułowanie zadania: oblicz sume˛ dwóch liczb naturalnych a i b.
Wynik oznacz przez S.
2
Dane wejściowe: dwie liczby a i b.
3
Cel obliczeń: obliczenie sumy S = a + b.
4
Dodatkowe ograniczenia: sprawdzenie warunku dla danych wejściowych
np. czy a, b sa˛ naturalne. Jednak sprawdzenie takiego warunku
sprawia, że algorytm przestaje być liniowy.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
12 / 1
Lista kroków - przykład 1
Problem:
Przedstaw w postaci listy kroków algorytm obliczania średniej
arytmetycznej trzech dowolnych liczb rzeczywistych.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
13 / 1
Lista kroków - przykład 1
Problem:
Przedstaw w postaci listy kroków algorytm obliczania średniej
arytmetycznej trzech dowolnych liczb rzeczywistych.
Dane: dowolne nieujemne liczby rzeczywiste a, b, c
Wynik: wartość średniej arytmetycznej liczb a, b, c równa Srednia
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
13 / 1
Lista kroków - przykład 1
Problem:
Przedstaw w postaci listy kroków algorytm obliczania średniej
arytmetycznej trzech dowolnych liczb rzeczywistych.
Dane: dowolne nieujemne liczby rzeczywiste a, b, c
Wynik: wartość średniej arytmetycznej liczb a, b, c równa Srednia
Krok 0: Rozpocznij algorytm.
Krok 1: Wprowadź wartości trzech liczb: a, b, c.
Krok 2: Oblicz wartość wyrażenia: Suma := a + b + c.
Krok 3: Oblicz wartość wyrażenia: Srednia := Suma/3.
Krok 4: Wyprowadź wynik: Srednia.
Krok 5: Zakończ algorytm.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
13 / 1
Pseudokod - przykład 1
Problem:
Przedstaw w postaci pseudokodu algorytm obliczania średniej
arytmetycznej trzech dowolnych liczb rzeczywistych.
Dane: dowolne nieujemne liczby rzeczywiste a, b, c
Wynik: wartość średniej arytmetycznej liczb a, b, c równa Srednia
begin
read(a,b,c);
Suma:= a + b + c;
Srednia:= Suma/3;
write(Srednia).
end.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
14 / 1
Elementy schematu blokowego
Start
End
1
Komponenty określajace
˛
moment startu i końca.
2
Zapis danych (lub ich odczyt)
na nośniki informacji.
1
2
Wyjście
Bożena Woźna-Szcześniak (AJD)
Wejście
Wstep
˛ do Informatyki
Wykład 6
15 / 1
Elementy schematu blokowego
Instrukcja
1
Blok instrukcji, które maja˛ być
wykonane.
2
Blok warunkowy; służy do
reprezentacji instrukcji
warunkowej (np. if-else) i petli
˛
(np. for, while).
1
2
yes
Warunek
Bożena Woźna-Szcześniak (AJD)
no
Wstep
˛ do Informatyki
Wykład 6
16 / 1
Schemat blokowy - suma dwóch dowolnych liczb
rzeczywistych
Start
Podaj: a,b
Suma:=a+b;
Pisz: Suma
Bożena Woźna-Szcześniak (AJD)
Koniec
Wstep
˛ do Informatyki
Wykład 6
17 / 1
Schemat blokowy - kwadrat danej liczby
Start
Podaj: a
Kwadrat:=a*a;
Pisz:
Kwadrat
Bożena Woźna-Szcześniak (AJD)
Koniec
Wstep
˛ do Informatyki
Wykład 6
18 / 1
Schemat blokowy - objetość
˛
prostopadłościanu,
którego podstawa ma wymiar axba a wysokość c
Start
Podaj: a,b,c
V:=a*b*c;
Pisz: V
Bożena Woźna-Szcześniak (AJD)
Koniec
Wstep
˛ do Informatyki
Wykład 6
19 / 1
Schemat blokowy - średnia arytmetyczna trzech
dowolnych liczb rzeczywistych
Start
Podaj: a,b,c
Suma:=a+b+c;
Koniec
Srednia := Suma/3;
Pisz:
Srednia
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
20 / 1
Algorytmy z rozgałezieniem
˛
Instrukcje warunkowe (rozgałezienia
˛
warunkowe) maja˛
nastepuj
˛ ac
˛ a˛ postać:
Jeżeli warunek M to, wykonaj czynność N
Lub
Jeżeli warunek M, to wykonaj czynność N, w przeciwnym razie
wykonaj czynność P.
W jezykach
˛
programowanie (C/C++/Java/C#/PHP) to instrukcje:
if, if - else, switch-case.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
21 / 1
Lista kroków - przykład 2
Problem:
Przedstaw w postaci listy kroków algorytm obliczania wartości
bezwzglednej
˛
dowolnej liczby rzeczywistej.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
22 / 1
Lista kroków - przykład 2
Problem:
Przedstaw w postaci listy kroków algorytm obliczania wartości
bezwzglednej
˛
dowolnej liczby rzeczywistej.
Dane: dowolna nieujemna liczba rzeczywista a.
Wynik: wartość bezwzgledna
˛
z liczby a równa w
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
22 / 1
Lista kroków - przykład 2
Problem:
Przedstaw w postaci listy kroków algorytm obliczania wartości
bezwzglednej
˛
dowolnej liczby rzeczywistej.
Dane: dowolna nieujemna liczba rzeczywista a.
Wynik: wartość bezwzgledna
˛
z liczby a równa w
Krok 0: Rozpocznij algorytm.
Krok 1: Wprowadź wartość liczby a.
Krok 2: Jeśli a >= 0 to w := a w przeciwnym wypadku w := −a.
Krok 3: Wyprowadź wynik: w.
Krok 4: Zakończ algorytm.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
22 / 1
Pseudokod - przykład 2
Problem:
Przedstaw w postaci pseudokodu algorytm obliczania wartości
bezwzglednej
˛
dowolnej liczby rzeczywistej.
Dane: dowolna nieujemna liczba rzeczywista a.
Wynik: wartość bezwzgledna
˛
liczby a równa w
begin
read(a);
if (a>=0) then w:= a;
else w:=-a;
write(w);
end.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
23 / 1
Schemat blokowy - wartość bezwgledna
˛
danej liczby
Start
Podaj: a
Koniec
Pisz: -a
Bożena Woźna-Szcześniak (AJD)
Koniec
no
a >= 0
Wstep
˛ do Informatyki
yes
Pisz: a
Wykład 6
24 / 1
Lista kroków - przykład 3
Problem:

 −1
0
Oblicz wartość funkcji charakterystycznej f (x) =

1
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
if x < 0
if x = 0
if x > 0
Wykład 6
25 / 1
Lista kroków - przykład 3
Problem:

 −1
0
Oblicz wartość funkcji charakterystycznej f (x) =

1
if x < 0
if x = 0
if x > 0
Dane: Dowolna liczba rzeczywista x.
Wynik: warność funkcji charakterystycznej f (x)
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
25 / 1
Lista kroków - przykład 3
Problem:

 −1
0
Oblicz wartość funkcji charakterystycznej f (x) =

1
if x < 0
if x = 0
if x > 0
Dane: Dowolna liczba rzeczywista x.
Wynik: warność funkcji charakterystycznej f (x)
Krok 0:
Krok 1:
Krok 2:
Krok 3:
Krok 4:
Krok 5:
Krok 4:
Rozpocznij algorytm.
Wprowadź wartość liczby x.
Jeśli x < 0, to f (x) = −1.
Jeśli x = 0, to f (x) = 0.
Jeśli x > 0, to f (x) = 1.
Wyprowadź wynik: f (x).
Zakończ algorytm.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
25 / 1
Pseudokod - przykład 3
Problem:

 −1
0
Oblicz wartość funkcji charakterystycznej f (x) =

1
if x < 0
if x = 0
if x > 0
Dane: Dowolna liczba rzeczywista x.
Wynik: warność funkcji charakterystycznej f (x)
begin
write("Podaj liczbe rzeczywista");
˛
read(x);
if (x < 0) then w:= -1;
else if (x = 0) then w:= 0;
else if (x > 0) then w:= 1;
write("f(x) = "); write(w);
end.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
26 / 1
Schemat blokowy - przykład 3
Problem:

 −1
0
Oblicz wartość funkcji charakterystycznej f (x) =

1
if x < 0
if x = 0
if x > 0
Zadanie na ćwiczenia !
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
27 / 1
Pseudokod - sprawdzanie parzystości danej liczby
całkowitej
Dane: Dowolna liczba całkowita a.
Wynik: Odpowiedź czy a jest parzysta, czy też nie.
begin
write("Podaj liczbe całkowita");
˛
read(a);
if (a mod 2 = 0) then
write("Jest parzysta.");
else
write("Nie jest parzysta.");
end.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
28 / 1
Schemat blokowy - sprawdzanie parzystości danej
liczby całkowitej
Start
Podaj: a
Koniec
Pisz: nieparzysta
Bożena Woźna-Szcześniak (AJD)
Koniec
no
a mod 2 = 0
Wstep
˛ do Informatyki
yes
Pisz:
parzysta
Wykład 6
29 / 1
Reguły tworzenia schematu blokowego - sieci działań
1
Schemat blokowy składa sie˛ z bloków połaczonych
˛
zorientowanymi liniami.
2
Bloki obrazuja˛ ciag
˛ operacji.
3
W bloku wykonywane sa˛ albo wszystkie instrukcje albo żadna.
4
Dalsze operacje nie zależa˛ od poprzednich wariantów, chyba że
zależności te zostały przekazane za pomoca˛ danych.
5
Kolejność wykonania operacji jest ścisle określona przez
zorientowane linie łacz
˛ ace
˛ poszczególne bloki.
6
Do każdego bloku może prowadzić co najwyżej jedna linia.
7
Linie moga˛ sie˛ łaczyć,
˛
a punkty takiego połaczenia
˛
określane sa˛
jako punkty zbiegu.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
30 / 1
Instrukcje iteracyjne (z powtórzeniami)
Spotykamy sie˛ cz˛esto z takim sytuacjami, w których musimy
wykonywać pewna˛ czynność aż do momentu, gdy odniesiemy
sukces, np.
zrób dziesieć
˛ pompek;
bedziesz
˛
tak długo czytać wiersz, aż nauczysz sie˛ go na pamieć;
˛
dopóki bedziesz
˛
siedzieć cicho, nie zapytam cie.
˛
Z tego wynika, że możemy spotkać sie˛ z dwoma sytuacjami: gdy
musimy wykonać czynność badź
˛ zadana˛ ilość razy, badź
˛ do
momentu spełnienia warunku. Zatem powtarzanie różnych działań
ma dwojaka˛ postać:
liczba powtórzeń jest z góry określona (przed rozpocz˛eciem cyklu).
liczba powtórzeń jest nieznana (zależy od spełnienia pewnego
warunku).
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
31 / 1
Schemat blokowy - druk liczb z zakresu 1 . . . 9.
Start
i := 1;
Koniec
Bożena Woźna-Szcześniak (AJD)
no
i ≤ 9
yes
Wstep
˛ do Informatyki
Pisz: i;
i := i +1;
Wykład 6
32 / 1
Pseudokod - druk liczb z zakresu 1 . . . 9
begin
write("Liczby z zakresu 1..9");
i:= 1;
while (i <= 9) do
begin
write(i);
i := i+1;
end;
end.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
33 / 1
Schemat blokowy - druk liczb z zakresu 1 . . . n.
Start
Podaj:
n;
i := 1;
Koniec
Bożena Woźna-Szcześniak (AJD)
no
i ≤ n
yes
Wstep
˛ do Informatyki
Pisz: i;
i := i +1;
Wykład 6
34 / 1
Pseudokod - druk liczb z zakresu 1 . . . n.
begin
write("Liczby z zakresu 1..n");
write("Podaj liczbe n = ");
read (n);
i:= 1;
while (i <= n) do
begin
write(i);
i := i+1;
end;
end.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
35 / 1
Lista kroków - algorytm Euklidesa
Algorytm Euklidesa:
Algorytm ten jest najstarszym algorytmem (ma ponad 2000 lat) i
przeznaczony jest do znajdowania najwiekszego
˛
wspólnego dzielnika
(NWD) dla dwóch liczb naturalnych, tj. NWD(5,25) = 5, NWD(15,25) =
5, NWD(22,24) = 2.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
36 / 1
Lista kroków - algorytm Euklidesa
Algorytm Euklidesa:
Algorytm ten jest najstarszym algorytmem (ma ponad 2000 lat) i
przeznaczony jest do znajdowania najwiekszego
˛
wspólnego dzielnika
(NWD) dla dwóch liczb naturalnych, tj. NWD(5,25) = 5, NWD(15,25) =
5, NWD(22,24) = 2.
Dane: dowolne dwie liczby naturalne a i b.
Wynik: NWD(a, b)
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
36 / 1
Lista kroków - algorytm Euklidesa
Algorytm Euklidesa:
Algorytm ten jest najstarszym algorytmem (ma ponad 2000 lat) i
przeznaczony jest do znajdowania najwiekszego
˛
wspólnego dzielnika
(NWD) dla dwóch liczb naturalnych, tj. NWD(5,25) = 5, NWD(15,25) =
5, NWD(22,24) = 2.
Dane: dowolne dwie liczby naturalne a i b.
Wynik: NWD(a, b)
Krok 0: Rozpocznij algorytm.
Krok 1: Wprowadź wartości dla liczb a i b.
Krok 2: Oblicz c jako reszte˛ z dzielenia a przez b.
Krok 3: Zastap
˛ a przez b, zaś b przez c.
Krok 4: Jeżeli b = 0, to szukane NWD(a, b) wynosi a, w
przeciwnym wypadku przejdź do 2.
Krok 5: Wyprowadź wynik: NWD(a, b).
Krok 4: Zakończ algorytm.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
36 / 1
Lista kroków - algorytm Euklidesa
Dane: dowolne dwie liczby naturalne a i b.
Wynik: NWD(a, b)
Krok 0: Rozpocznij algorytm.
Krok 1: Wprowadź wartości dla liczb a i b.
Krok 2: Oblicz c jako reszte˛ z dzielenia a przez b.
Krok 3: Zastap
˛ a przez b, zaś b przez c.
Krok 4: Jeżeli b = 0, to szukane NWD(a, b) wynosi a, w
przeciwnym wypadku przejdź do 2.
Krok 5: Wyprowadź wynik: NWD(a, b).
Krok 4: Zakończ algorytm.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
37 / 1
Lista kroków - algorytm Euklidesa
Dane: dowolne dwie liczby naturalne a i b.
Wynik: NWD(a, b)
Krok 0: Rozpocznij algorytm.
Krok 1: Wprowadź wartości dla liczb a i b.
Krok 2: Oblicz c jako reszte˛ z dzielenia a przez b.
Krok 3: Zastap
˛ a przez b, zaś b przez c.
Krok 4: Jeżeli b = 0, to szukane NWD(a, b) wynosi a, w
przeciwnym wypadku przejdź do 2.
Krok 5: Wyprowadź wynik: NWD(a, b).
Krok 4: Zakończ algorytm.
Przykład obliczenia NWD(1000, 32):
1
a = 1000, b = 32, c = 1000 mod 32 = 8
2
a = 32, b = 8, c= 32 mod 8 = 0
3
a = 8, b = 0 =⇒ NWD(1000, 32) = 8
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
37 / 1
Schemat blokowy - algorytm Euklidesa
Start
Podaj:
a, b
Koniec
Pisz:
a
Bożena Woźna-Szcześniak (AJD)
no
yes c := a mod b;
a := b;
b != 0
b := c;
Wstep
˛ do Informatyki
Wykład 6
38 / 1
Pseudokod - algorytm Euklidesa
Dane: dowolne dwie liczby naturalne a i b.
Wynik: NWD(a, b)
begin
write("Podaj dwie liczby naturalne");
read(a,b);
while (b != 0) do
begin
{reszta z dzielenia a przez b }
c := a mod b;
a := b;
b := c
end
NWD := a
write(NWD);
end.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
39 / 1
Pseudokod - algorytm Euklidesa
Dane: dowolne dwie liczby naturalne a i b.
Wynik: NWD(a, b)
begin
write("Podaj dwie liczby naturalne");
read(a,b);
while (a != b) do
begin
if (a < b) b:=b-a;
else a:=a-b;
end
NWD := a
write(NWD);
end.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
40 / 1
Liczby trójkatne
˛
Nazwa “liczby trójkatne”
˛
pochodzi stad,
˛ że każda taka liczba o
numerze n jest liczba˛ np. kół jednakowej wielkości, z których
można ułożyć trójkat
˛ równoboczny o boku zbudowanym z n kół.
Liczby trójkatne
˛
to liczby postaci:
tn =
n ∗ (n + 1)
= 1 + 2 + 3 + ... + n
2
gdzie n jest liczba˛ naturalna.
˛
Przykłady liczb trójkatnych:
˛
t1 = 1, t2 = 3, t3 = 6, t4 = 10.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
41 / 1
Schemat blokowy - obliczanie sumy suma =
Pn
i=1 i.
Start
Podaj: n
Koniec
Pisz:
suma
Bożena Woźna-Szcześniak (AJD)
i := 1 ;
suma := 0;
no
i ≤ n
yes
Wstep
˛ do Informatyki
suma := suma +i;
i := i+1;
Wykład 6
42 / 1
Pseudokod - obliczanie sumy suma =
Pn
i=0 i.
begin
write("Podaj liczbe n = ");
read (n);
i:= 1;
suma := 0;
while (i <= n) do
begin
suma := suma + i;
i := i+1;
end;
end.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
43 / 1
Schemat blokowy - funkcja silnia n! = 1 · 2 · . . . · n
Start
Podaj: n
Koniec
Pisz:
silnia
Bożena Woźna-Szcześniak (AJD)
i := 1 ;
silnia := 1;
no
i ≤ n
yes
Wstep
˛ do Informatyki
silnia := silnia * i ;
i := i+1;
Wykład 6
44 / 1
Pseudokod - funkcja silnia n! = 1 · 2 · . . . · n.
begin
write("Podaj liczbe n = ");
read (n);
i:= 1;
silnia := 1;
while (i <= n) do
begin
silnia := silnia * i;
i := i+1;
end;
write(silnia);
end.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
45 / 1
Suma n liczb wprowadzonych z klawiatury
Start
Podaj: n
Koniec
Pisz:
suma
Bożena Woźna-Szcześniak (AJD)
i := 1 ;
suma := 0;
no
i ≤ n
Pisz: “Podaj liczbe:”;
yes Podaj: a;
suma := suma + a;
i := i+1;
Wstep
˛ do Informatyki
Wykład 6
46 / 1
Suma n liczb wprowadzonych z klawiatury
begin
write("Podaj liczbe n = ");
read (n);
i:= 1;
suma := 0;
while (i <= n) do
begin
write("Podaj liczbe: ");
read (a);
suma := suma + a;
i := i+1;
end;
write(suma);
end.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
47 / 1
Suma ciagu
˛ liczb wprowadzonego z klawiatury i
zakończonego zerem
Start
Podaj: a
suma := 0;
Koniec
Pisz:
suma
Bożena Woźna-Szcześniak (AJD)
no
a != 0
yes
suma := suma + a;
Pisz: “Podaj liczbe:”;
Podaj: a;
Wstep
˛ do Informatyki
Wykład 6
48 / 1
Suma ciagu
˛ liczb wprowadzonego z klawiatury i
zakończonego zerem
begin
write("Podaj liczbe: ");
read (a);
suma := 0;
while (a != 0) do
begin
suma := suma + a;
write("Podaj liczbe: ");
read (a);
end;
write(suma);
end.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
49 / 1
Suma ciagu
˛ liczb parzystych wprowadzonego z
klawiatury i zakończonego zerem
begin
write("Podaj liczbe: ");
read (a);
suma := 0;
while (a != 0) do
begin
if (a mod 2 = 0) then suma := suma + a;
write("Podaj liczbe: ");
read (a);
end;
write(suma);
end.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
50 / 1
Suma ciagu
˛ liczb podzielnych przez 5,
wprowadzonego z klawiatury i zakończonego zerem
begin
write("Podaj liczbe: ");
read (a);
suma := 0;
while (a != 0) do
begin
if (a mod 5 = 0) then suma := suma + a;
write("Podaj liczbe: ");
read (a);
end;
write(suma);
end.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
51 / 1
Iloczyn ciagu
˛ liczb nieujemnych, wprowadzonego z
klawiatury i zakończonego zerem
begin
write("Podaj liczbe: ");
read (a);
iloczyn := 1;
while (a != 0) do
begin
if (a > 0) then iloczyn := iloczyn * a;
write("Podaj liczbe: ");
read (a);
end;
write(iloczyn);
end.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
52 / 1
Iloczyn ciagu
˛ liczb nieujemnych, parzystych,
wprowadzonego z klawiatury i zakończonego zerem
begin
write("Podaj liczbe: ");
read (a);
iloczyn := 1;
while (a != 0) do
begin
if ((a > 0) and (a mod 2 = 0)) then
iloczyn := iloczyn * a;
write("Podaj liczbe: ");
read (a);
end;
write(iloczyn);
end.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
53 / 1
Wybór algorytmu
Reguła˛ jest, że należy implementować najprostsze algorytmy, które
wykonuja˛ określone zadanie. Prosty algorytm to:
łatwiejsza implementacja,
czytelniejszy kod,
łatwość testowania
łatwość pisania dokumentacji,...
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
54 / 1
Zadania
Skonstruuj schemat blokowy do nastepuj
˛ acego
˛
zadania:
1
Wprowadź dwie liczby a i b. Skonstruuj algorytm porównania tych
liczb i wyprowadzania na wyjściu wiekszej
˛
z nich. W przypadku
liczb równych wyprowadź napis “liczby równe”.
2
Sprawdzić czy dana liczba dzieli sie˛ przez 3.
3
Sprawdzić czy suma dwóch liczb podanych przez użytkownika jest
parzysta.
4
Zamienić dana˛ liczne w systemie o podstawie n, na liczbe˛ w
systemie o podstawie m;
5
Dane sa˛ liczby dwa pojemniki A i B. W pojemniku A znajduje sie˛
ser, a w pojemniku B mak. Zaprojektuj algorytm, który przeniesie
ser do pojemnika B, a mak do pojemnika A. Pamietaj
˛ jednak o
tym, ze nigdy nie może być tak, że ser i mak znajda˛ sie˛ w tym
samym pojemniku.
Bożena Woźna-Szcześniak (AJD)
Wstep
˛ do Informatyki
Wykład 6
55 / 1

Podobne dokumenty