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