E N D
Algorytmy Podstawowe pojęcia
Nazwa algorytm wywodzi się od nazwiska perskiego matematyka Muhamed ibn Musy al-Chorezmi (z Chorezmu), który ok. 820 r n.e. opisał pozycyjny system kodowania dziesiętnego liczb i sztukę liczenia w tym systemie. W XII w. Europie przetłumaczono jego książkę i rozpoczęto wykonywanie obliczeń metodą "pisemną". Algorytmem nazywamy skończony ciąg instrukcji prowadzących do rozwiązania danego problemu lub zadania. Jest to przepis postępowania prowadzący do osiągnięcia jakiegoś celu. Implementacja to zapis algorytmu w języku programowania.
Rozwiązując jakikolwiek problem (zadanie) stosujemy zazwyczaj określoną metodę (przepis), która ma pozwolić na uzyskanie wyniku (rozwiązania). Warunkiem przystąpienia do rozwiązywania jakiegokolwiek problemu jest posiadanie niezbędnych wiadomości i doświadczenia
Algorytmika - podstawowy dział informatyki poświęcony poszukiwaniom, konstruowaniu i badaniom algorytmów, zwłaszcza w kontekście ich przydatności do rozwiązywania problemów za pomocą komputerów. Program komputerowy - to logicznie uporządkowany ciąg instrukcji języka programowania realizujący algorytm. Specyfikacja zadania – szczegółowy opis zadania w którym wymienia się dane wejściowe i wyniki oraz warunki jakie muszą spełniać, czyli określa się związek między danymi a wynikami. Przykład: Uporządkuj rosnąco (A-Z) zbiór nazwisk i imion uczniów klasy drugiej. Dane: nieuporządkowany zbiór nazwisk i imion uczniów klasy Wynik: uporządkowany alfabetycznie zbiór nazwisk i imion uczniów klasy
Przykład: Oblicz wartość bezwzględną dowolnej liczby rzeczywistej Dane: dowolna liczba rzeczywista a Wynik: wartość bezwzględna liczby a równa w Przykład: Uporządkuj rosnąco (A-Z) zbiór nazwisk i imion uczniów klasy drugiej. Dane: nieuporządkowany zbiór nazwisk i imion uczniów klasy Wynik: uporządkowany alfabetycznie zbiór nazwisk i imion uczniów klasy Przy specyfikacji zadania warto nadać danym i wynikom nazwy
Napisz specyfikacje do zadania Zadanie 1 Obliczenie średniej arytmetycznej trzech dowolnych liczb rzeczywistych Dane: ???????????????????????????????????????? Wynik: ??????????????????????????????????????? Napisz specyfikacje do zadania Zadanie 2 Obliczenie wartości bezwzględnej dowolnej liczby rzeczywistej Dane: ???????????????????????????????????????? Wynik: ???????????????????????????????????????
Napisz specyfikacje do zadania Zadanie 1 Obliczenie średniej arytmetycznej trzech dowolnych liczb rzeczywistych Dane: dowolne liczby rzeczywiste a, b, c. Wynik: wartość średniej arytmetycznej liczb a, b ,c równa Śr Napisz specyfikacje do zadania Zadanie 2 Obliczenie wartości bezwzględnej dowolnej liczby rzeczywistej Dane: dowolna liczba rzeczywista a Wynik: wartość bezwzględna liczby a równa w
Algorytmy prezentujemy/zapisujemy w różny sposób: • - w języku naturalnym; (opisowo) • - w pewnej konwencji notacyjnej; (jednoznacznie określony system oznaczeń) • - za pomocą schematów blokowych; (graficznie) • - w języku programowania; (Pascal, V-Basic) Cechy algorytmu: - skończoność - realizowany ciąg instrukcji powinien mieć swój koniec; - określoność - operacje i ich porządek muszą być ściśle określone; - ogólność - stosowanie danego algorytmu nie powinno się ograniczać do pojedynczego problemu, ale do całej klasy problemów tego samego typu; - efektywność - algorytm prowadzić do rozwiązania najkrótszą drogą;
Lista kroków algorytmu: • to przedstawienie algorytmu w kolejnych punktach (krokach), każdy punkt tej listy zawiera opis wykonywanej czynności: • np. • Zacznij algorytm • Wprowadź wartość danej n • Oblicz wartość wyrażenia w := -b/a • Jeśli x<0, to powtarzaj krok 2 • Zakończ algortm Przy zapisie algorytmów stosujemy zamiast znaku równości „=„ tzw. znak przypisania „:=„ := takie oznaczenie interpretowane jest jako przypisanie zmiennej po lewej stronie znaku wartości wyrażenia obliczonego po prawej stronie Z matematycznego pkt. widzenia równość n= n+1 nie jest prawdziwa jednak w opisach algorytmów można stosować polecenie n:= n+1 którego wykonanie spowoduje powiększenie zmiennej n o 1
Przykład: • Przedstaw w postaci listy kroków algorytm obliczania średniej arytmetycznej trzech dowolnych liczb rzeczywistych. • Dane: dowolne liczby rzeczywiste a, b, c • Wynik: warność średniej arytmetycznej liczb a, b, c równa Sr • Zacznij algorytm • Wprowadź wartość trzech liczb: a, b, c • Oblicz wartość wyrażenia: S:= a + b + c • Oblicz wartość wyrażenia: Sr:= S/3 • Wyprowadź wynik: Sr • Zakończ algorytm
Przykład: • Przedstaw w postaci listy kroków algorytm obliczania wartości bezwzględnej dowolnej liczby rzeczywistej. • Dane: dowolna liczba rzeczywista a • Wynik: warność bezwzględna liczby a równa w • Zacznij algorytm • Wprowadź wartość liczby: a • Jeśli a>=0 to w:= a w przeciwnym wypadku w:= -a • Wyprowadź wynik: w • Zakończ algorytm
Schemat blokowy algorytmu Schemat blokowy jest graficznym przedstawieniem zbioru informacji i wzajemnych powiązań między nimi, uwzględniający kolejność wykonywania operacji. Schemat blokowy składa się z szeregu figur geometrycznych zwanych skrzynkami oraz łuków skierowanych - połączeń, łączących te skrzynki . Wewnątrz skrzynek zawarte są informacje, relacje oraz nazwy operacji . Kolejność wykonywania działań wyznaczają połączenia.
W procesie tworzenia schematu blokowego obowiązują zasady: • każda operacja, relacja, informacja zawarta jest w skrzynce • kolejność wykonywania operacji wyznaczają połączenia między skrzynkami • każde połączenie zaczepione jest początkiem do jednej skrzynki, a końcem do innej skrzynki; żadne połączenie nie rozdziela się • skrzynki przybierają kształty: prostokąta, rombu ( lub sześcianu ), równoległoboku, okręgu lub owalu Podstawową zasadą obowiązującą przy budowę schematów blokowych, jest łączenie strzałek wychodzących ze strzałkami wchodzącymi. Schematy blokowe są zbudowane ze strzałek oraz niżej przedstawionych elementów.
Skrzynki graniczne START / STOP - mają kształt owalu Oznaczają one początek i koniec schematu. Skrzynka START ma tylko jedno połączenie wychodzące a skrzynka STOP tylko jedno połączenie dochodzące. Wewnątrz skrzynki umieszcza się napis START, BEGIN, POCZĄTEK, KONIEC, STOP, END. Schemat może mieć tylko jedną skrzynkę START oraz co najmniej jedną skrzynkę STOP. Ponadto ze skrzynki START można dotrzeć wzdłuż połączeń do dowolnej skrzynki schematu oraz z każdej skrzynki schematu istnieje droga do skrzyni STOP
Skrzynka operacyjna - ma kształt prostokąta wewnątrz umieszcza się opis czynności. Ze skrzynki operacyjnej odchodzi tylko jedno połączenie. W systemie schematów blokowych w skrzynce operacyjnej można umieszczać opisy czynności, instrukcje przypisania, definicje. W przypadku występowania kilku opisów należy je oddzielać przecinkami
Skrzynka warunkowa - ma kształt sześcianu lub rombu Wewnątrz umieszczony jest warunek, który decyduje o dalszej kolejności wykonywania działań . Zazwyczaj dąży się do tego aby skrzynka warunkowa miała dokładnie dwa wyjścia. Każdym z dwóch wyjść należy opisać słownie T, Tak, True, Yes, Prawda lub N, Nie,No, Fałsz, False.
Skrzynka wejścia / wyjścia - jest równoległobokiem, wewnątrz którego umieszczone jest określenie rodzaju wykonywanej operacji . W przypadku w(y)prowadzania wartości zmiennych należy ująć w nawiasy okrągłe ich nazwy a w przypadku w(y)prowadzania tekstu umieszcza się go w cudzysłowy. Połączenie łączy bloki tworzy je linia prosta lub łamana
Skrzynka łącznikowa - ma kształt okręgu może być używana do oznaczenia miejsc w schemacie , które mają być traktowane jako jedne i te same. Wewnątrz umieszcza się numer od 1 do 9999. Każda ze skrzynek łącznikowych ma tylko jedno połączenie. Skrzynka o tym samym numerze musi występować co najmniej dwukrotnie, przy czym skrzynka łącznikowa o ustalonym numerze z połączeniem wychodzącym może występować co najwyżej raz. Skrzynka komentarza ma kształt prostokąta bez krótszego, prawego boku. Wewnątrz umieszcza się pomocnicze informacje objaśniające połączenia lub wykonywane operacje . Skrzynka informacyjna połączona jest ze schematem za pomocą poziomej linii przerywanej.
Algorytm obliczania średniej arytmetycznej trzech dowolnych liczb rzeczywistych start W schemacie występują przypisania: S:= a + b + c oznacza że zmiennej S przypisz wartość trzech liczb pamiętanych w zmiennych a, b i c Śr := S/3 oznacza – zmiennej Śr przypisz wynik dzielenia wartości zmiennej S przez 3 Wprowadź (a, b, c) S:= a + b + c Śr:= S/3 Wyprowadź (Śr) koniec
Drzewo Algorytmów Wśród graficznych prezentacji algorytmów istnieje struktura drzewiasta. Podobnie do drzewa folderów/katalogów drzewo algorytmu rozwija się w dół. Na górze jest „korzeń„ a połączenia „gałęzie” wskazują kierunek realizacji algorytmu, skierowane są do dołu. Drzewo jest uproszczoną odmianą schematu blokowego, może być też wykorzystane w analizie przebiegu działania algorytmu oraz do określenia jego złożoności. A >= 0 Operacje zapisujemy w wierzchołkach drzewa, nie rysując figur geometrycznych. W liściach jako elementach końcowych wykresy są umieszczone operacje końcowe. NIE TAK Przykład drzewa algorytmu W := a W := -a
Drzewo wyrażenia: W algorytmice drzewa są tak popularne, że wykonuje się za ich pomocą obliczenia wartości wyrażeń. W wierzchołkach końcowych takiego drzewa wpisuje się liczby lub zmienne a w pozostałych – operatory działań. Wykonywanie obliczeń zaczynamy jednak od dołu czyli od liści czyli odwrotnie niż w drzewie algorytmu / + + ( )2 ( )2 y x y x
Algorytm liniowy • algorytm składający się z ciągu instrukcji, które są wykonywane jedna po drugiej w kolejności, jaka wynika z ich następstwa w zapisie. Nazywany jest również algorytmem sekwencyjnym. (Realizuje jeden ciąg działań sekwencyjną (blok po bloku) ) • W takim algorytmie nie sprawdza się warunków, nie można się przemieszczać w inne niż kolejne miejsca takiego algorytmu np. Nie wraca się do wcześniejszych ani nie przechodzi do dalszych kroków lub bloków w schemacie blokowym. • Cechy algorytmu liniowego: • nie sprawdza się żadnych warunków • nie przemieszcza się w inne niż kolejne miejsca algorytmu • nie wraca się do wcześniejszych punktów lub bloków algorytmu.
START PODAJ(a) PODAJ(b) PISZ(a+b) STOP • Zacznij algorytm. • Wprowadź wartości trzech liczb: a, b, c • Oblicz wartość wyrażenia: S:=a+b+c. • Oblicz wartość wyrażenia: Sr:=S/3. • Wyprowadź wynik: Sr. • Zakończ algorytm.
Algorytm z warunkami Algorytm z warunkami charakteryzuje się realizacją kilku ciągów działań, występowaniem sytuacji warunkowych (jednej lub więcej). Ich wynik decyduje o wyborze danego ciągu działań. Prezentowanie algorytmu z warunkami w schemacie blokowym jest bardziej przejrzyste niż w liście kroków, lepiej widoczne są przejścia w zależności od spełnienia bądź niespełnienia warunku.
Algorytm z warunkami / wyborem / Przykłady schematów blokowych ELI
Ćwiczenie Która z 2 –ch liczb jest większa a czy b?. Korzystając z programu ELI zaprojektuj działający schemat algorytmu
Obliczanie pola lub objętości kuli o promieniu r StartKrok 1: Wczytaj promień kuli (r)Krok 2: Czy liczyć poleKrok 3: Pokaż wynik (pole) 4 * 3.14 * r * r (objętość) 4/3*3.14*r*r*rKoniec
Obliczanie Miejsca zerowe funkcji liniowej y=ax+b.
Algorytm rozgałęziony /warunkowy/ - pierwiastki równania kwadratowego Zbuduj na podstawie informacji o funkcji kwadratowej algorytm który będzie sam wyliczał x Funkcja kwadratowa jest to funkcja np. x2+x-2=0. Wzór ogólny tej funkcji ma postać: ax2+bx+c=0. Aby wyliczyć x np. z równania x2-3x-4=0 musimy znać wyróżnik ( delta). Delta zawsze równa jest b2-4ac. "a" jest to liczba stojąca przy x2, "b" która znajduje się przy x, a "c" to wyraz wolny. I tak a=1, b=-3, c=-4. Więc delta = (-3)2-4*1*(-4)=25. Gdy delta jest większa od zera to mamy 2 rozwiązania x1=(-b-sqrt(delta))/2a i x2=(-b+sqrt(delta))/2a W naszym równaniu x1=(3-5)/2=-1 a x2=(3+5)/2=4. x1 i x2 są rozwiązaniami tego równania. Weźmy następną możliwość i nowe równanie x2-4x+4=0. Gdy delta równa jest 0 to mamy jedno Rozwiązanie. x-b/2a. x=4/2=2 Gdy delta jest mniejsza od zera ( np. w równaniu x2+3x+4) to nie ma żadnego rozwiązania.
Miejsca zerowe funkcji kwadratowej. Uwzględnij w danym algorytmie przypadki gdy delta =0 i oba pierwiastki są identyczne. Zabezpiecz dany algorytm przed wprowadzeniem a=0
Lech Tomasz Rafał Marcin Grzegorz
T: Iteracja (pętle w algorytmach) to wielokrotne powtarzanie pewnych czynności łac. iteratio – powtarzanie Jest to metoda polegająca na wielokrotnym kolejnym zastosowaniu tego samego algorytmu postępowania, przy czym wynik poprzedniej operacji stanowi dane wejściowe dla kolejnej Instrukcje iteracyjne - umożliwiają zrealizować pętlę programową, tj. wielokrotnie wykonać określony ciąg instrukcji (operacji). Cechą charakterystyczną jest występowanie w nich pomocniczej zmiennej dynamicznej, tzw. licznika "zliczającego" ilość wykonań pętli
Opis algorytmu sumowania kolejnych czterech liczb • Zacznij algorytm • Suma jest równa 0 • Wprowadź pierwszą liczbę • Do poprzedniego wyniku sumy dodaj wprowadzoną liczbę • Wprowadź drugą liczbę • Do poprzedniego wyniku sumy dodaj wprowadzoną liczbę • Wprowadź trzecią liczbę • Do poprzedniego wyniku sumy dodaj wprowadzoną liczbę • Wprowadź czwartą liczbę • Do poprzedniego wyniku sumy dodaj wprowadzoną liczbę • Wyprowadź wynik sumy • Zakończ algorytm Aby zapobiec zapisywaniu powtarzających się bloków operacji stosujemy iteracje (pętle)czyli powrót na początek powtarzającej się operacji co spowoduje ponowne wykonanie tego samego bloku.
Zadanie: Oblicz sumę n kolejnych liczb naturalnych • Ustalamy ile liczb dodać (pytamy o n) • Ustalamy od jakiej liczby zacząć dodawanie(dla ułatwienia zacznijmy od 1) • Tworzymy zmienną suma (na razie równą 0) • Dodajemy do sumy kolejne liczby (suma za każdą operacją powiększa się), tak długo aż dodamy wszystkie n liczb • Suma:=0 • Suma+1 • (Suma+1)+2 • (Suma+1+2)+3 ... Suma:= Suma+i gdzie i będzie zwiększane od 1 do n
Algorytmy z pętlą iteracyjną Algorytm obliczania średniejn podanych kolejno liczb • Czynności wykonywane w pętli to: • Pytanie o wartość kolejnej liczby i zapisanie jej do zmiennej, • Dodanie liczby do poprzedniej sumy • Zwiększenie licznika o 1, • Sprawdzenie czy licznik osiągnął odpowiednią wartość (n).
ZadanieOblicz iloraz całkowity i reszty z dzielenia dwóch liczb naturalnych a i b
Rekurencja Z techniką rekurencji często spotykamy się w życiu codziennym. Jeśli popatrzymy w lustro, a przed nim ustawimy odpowiednio drugie to zauważymy, że odbija się w nim obraz z lustra, na które patrzymy. Jeżeli jemy zupę: Trzeba zjeść łyżkę zupy i jeść zupę dalej, aż talerz będzie pusty. Korzystamy z przepisu, który odwołuje się sam do siebie w trakcie objaśniania, co należy robić. O rekurencji mówimy wtedy, gdy definiując pojęcie odwołujemy się do niego samego. To należy podać znaczenie: - rekurencja od łac. recursio = powracanie. Funkcja wywołuje samą siebie (ewentualnie inną, która wywoła pierwszą funkcję), a potem wykonywanie programu wraca do pierwszej.
A tu jest wierszyk który obrazuje zasadę rekurencji: Wpadł pies do kuchni i porwał mięsa ćwierć A jeden kucharz głupi, zarąbał go na śmierć A drugi kucharz mądry, co serce i litość miał Postawił mu nagrobek i taki napis dał: Wpadł pies do kuchni i porwał mięsa ćwierć A jeden kucharz głupi, zarąbał go na śmierć A drugi kucharz mądry, co serce i litość miał Postawił mu nagrobek i taki napis dał: Wpadł pies do kuchni i porwał mięsa ćwierć A jeden kucharz głupi, zarąbał go na śmierć A drugi kucharz mądry, co serce i litość miał Postawił mu nagrobek i taki napis dał: Wpadł pies ... Ten natomiast jest wierszem iteracyjnym: Na zielonej łączce 1, 2, 3 Pasły się zajączki 1, 2, 3 A to była pierwsza zwrotka teraz będzie druga zwrotka. Na zielonej łączce 1, 2, 3 Pasły się zajączki 1, 2, 3 A to była druga zwrotka teraz będzie trzecia zwrotka: Na zielonej łączce 1, 2, 3 Pasły się zajączki 1, 2, 3 A to była trzecia zwrotka teraz będzie czwarta zwrotka: Na zielonej ...
Funkcję rekurencyjną nazywamy taką funkcję która wywołuje samą siebie. Funkcja taka musi posiadać warunek zakończenia rekurencji. Jeżeli takiego warunku by nie posiadała funkcja wywoływała by siebie bez końca. Funkcja taka jest wykonywana trochę wolniej niż funkcja nierekurencyjna, ale kod jest zdecydowanie krótszy i prostszy w niektórych wypadkach. Najlepszym przykładem na funkcję rekurencyjną jest silnia Obliczanie silni jest sztandarowym przykładem używania rekurencji:n!=n*(n-1)!Przykład:5!=5*4!=5*4*3!=5*4*3*2!=5*4*3*2*1!=5*4*3*2*1*0!=5*4*3*2*1*1=120 Silnia (n!) to iloczyn n kolejnych liczb naturalnych, przy czym dodatkowo zachodzi 0!=1. Ze wzoru tego wynika, że aby obliczyć np. 4!, należy najpierw obliczyć 3!. Ale żeby obliczyć 3! trzeba obliczyć 2! itd. aż dojdziemy do 0!, które jak wiemy wynosi 1.Sposób obliczenia 4! wygląda więc następująco:4!=4*3!=4*3*2!=4*3*2*1!=4*3*2*1*0!=4*3*2*1*1=24
Można pracować na kilku planszach. Wykorzystamy procedury - podalgorytmy wywoływane przez główny algorytm. Mogą być budowane na tej samej planszy co główny algorytm, lub można je budować na osobnych planszach.