Warsztaty dla nauczycieli przedmiotów informatycznych
Definicja algorytmu Cybernetyczna: dokładny przepis wykonania w określonym porządku skończonej liczby operacji, pozwalający na rozwiązanie każdego zadania danego typu. Matematyczna: reguła przekształcania wyrażeń matematycznych przez powtarzanie tych samych działań na kolejno otrzymywanych wynikach działań poprzednich
Podział algorytmów Ze względu na budowę algorytmu: algorytm liniowy algorytm rozgałęziony algorytm iteracyjny algorytm proceduralny algorytm rekurencyjny Ze względu na opis algorytmu: Opis słowny Opis przy pomocy pseudojęzyka Schemat blokowy Zapis w języku programowania
Algorytm liniowy Algorytm w którym kolejne instrukcje tworzą sekwencję o ustalonej kolejności. start Wprowadzenie danych Operacje na danych Wyprowadzenie danych koniec
Wypłata kwoty przy użyciu jak najwyższych nominałów Opis algorytmu: 1. Wpisz wartości nominałów od najwyższego do najniższego 2. Wpisz wielkość kwoty 3. Oblicz krotność występowania pierwszego nominału 4. Zmniejsz kwotę o obliczone nominały w punkcie 3. 5. Przejdź do niższego nominału i wykonaj obliczenia z punktu 3. 200 zł 100 zł 50 zł 20 zł 10 zł 5 zł 2 zł 1 zł 50 gr 20 gr 10 gr 5 gr 2 gr 1 gr
Dalszy ciąg opisu algorytmu wypłaty kwot ------------ 3x200zł 1x100zł 1x20zł 1x5zł 1x2zł 1x50gr 1x10gr 1x5gr 2x2gr 6. Algorytm zakończ po osiągnięciu najniższego nominału Wejście: kwota Wyjście: zestawienie nominałów wraz z krotnościami
Prezentacja algorytmu wypłata kwot w arkuszu kalkulacyjnym Plik: bank.xls
Algorytm rozgałęziony Algorytm w którym niektóre instrukcje są wykonywane przy spełnieniu określonych warunków, a inne przy ich niespełnieniu start Wprowadzenie danych T N Warunek logiczny I wariant obliczeń II wariant obliczeń Wyprowadzenie danych koniec
Klasyfikacja trójkątów według długości boków Opis algorytmu: Wprowadzić trzy liczby dodatnie (boki) Uporządkować je nie malejąco Sprawdzić czy istnieje trójkąt o takich bokach Dokonać klasyfikacji z wyborem na boki lub na kąty. Wejście: 7, 6, 7 [B] Wyjście: trójkąt istnieje, równoramienny a£b£c a+b>c [B]-boki [K]-kąty
Pliki: trojkat.rys, trojkat.pas Prezentacja algorytmu klasyfikacja trójkątów w postaci schematu blokowego w programie EI oraz programu w TPASCALU Pliki: trojkat.rys, trojkat.pas
Zamiana liczby dwubajtowej z postaci dziesiętnej na szesnastkową Opis algorytmu: Wprowadzić liczbę dziesiętną (<216) Dokonać jej konwersji do postaci dwójko wej, zastosować metodę odejmowania kolejnych potęg liczby 2. Dokonać jej konwersji do postaci szesna- stkowej, zastosować metodę podziału liczby dwójkowej na półbajtowe części Wejście: 48485 Wyjście: 1011110101100101, BD65 216= 65536 cyfry szesna stkowe: 0,1,2,3 4,5,6,7 8,9,A,B C,D,E,F
Prezentacja algorytmu liczby dwójkowe i szesnastkowe w arkuszu kalkulacyjnym Excel Pliki: 10na2na16.xls
Algorytm iteracyjny Cykl iteracyjny z warunkiem na końcu Algorytm w którym część ins- trukcji jest wielokrot- nie wyko- nywana aż do spełnie nia określo nego wa- runku Cykl iteracyjny z warunkiem na końcu Ilość cykli nieokreślona start wart. poczat. instrukcje cyklu N warunek T dalszy ciąg algort.
Obliczenie pierwiastka kwadratowego metodą Herona Algorytm oblicza pierwiastek kwadratowy dowolnej liczby z zdaną dokładnością Opis algorytmu: Pierwiastek z X jest równy bokowi kwadra- tu o polu X. Dowolną liczbę A>0 przyjmujemy za przy- bliżenie pierwiastka z X i jednocześnie za jeden z boków prostokąta o polu X Drugi bok wynosi wtedy X/A A X/A
Dalszy ciąg opisu metody Herona Jeżeli boki nie są równe budujemy następny prostokąt, którego jeden z boków jest śred- nią arytmetyczną boków poprzedniego, czyli B=(A+X/A)/2, a drugi X/B Jeżeli boki B i X/B nie są równe to budujemy wg tej reguły następny prostokąt Postępowanie to kontynuujemy tak długo, aż różnica pomiędzy bokami stanie się mniejsza od zadanej dokładności Wejście: X=72, A=8, E=0,001 Wyjście: 728,4852, J = ilość iteracji
Prezentacja algorytmu Herona w postaci: Schematu blokowego w programie Ei Ocena efektywności algorytmu w arkuszu kalkulacyjnym Excel pliki: heron.rys, heron.xls
Algorytm iteracyjny Cykl wyliczany z krokiem 1 liczba cykli określona Algorytm w którym część ins- trukcji jest wykonywana z góry określoną ilość razy start Cykl wyliczany z krokiem 1 liczba cykli określona i=1 n=? i>n instrukcje cyklu i=i+1 dalszy ciąg algorytmu
Szyfrowanie tekstu - Szyfr Cezara Chr(65)- znak o kodzie65 Ord(‘A’)- kod zna- ku A funkcje po- mocne przy szyfrowa- niu. Opis algorytmu: Wprowadzić tekst stawiając na końcu znak #, który do tekstu nie należy. Pobierając kolejne znaki wyznaczyć długość tekstu i zapisać do zmiennej D W tekście przy szyfrowaniu przesuwamy kolejne znaki o jedno miejsce do przodu (tzn. A–>B, B–>C,....,Z–>A) Przy deszyfrowaniu o jedno miejsce do tyłu (tzn. A–>Z, B–>A,...,Z–>Y) np.. KOMPUTER szyfrujemy jako LPNQWUFS.
Prezentacja algorytmu szyfr Cezara w postaci: Schematu blokowego w programie Ei Programu w Visual Basicu pliki: szyfr.rys, szyfr.vbm
Metody Monte Carlo rnd(n) los() Random przykłady funkcji losowych w różnych progra- mach Generując bardzo dużo punktów losowych o określonych warunkach możemy rozwiązać wiele problemów np: wyznaczyć pierwiastek dowolnego równania znaleźć maksimum lub minimum funkcji obliczyć pole pod wykresem funkcji Taki sposób rozwiązywania problemów znany jest pod nazwą metod Monte Carlo.
Obliczenie pola pod wykresem funkcji metodą Monte Carlo Napisać schemat blokowy programu obliczający pole pod wykresem paraboli y=x2 w przedziale <0,2> metodą Monte Carlo. generujemy punkty o losowych współrzędnych należące do prostokąta o wierzchołkach (0,0); (0,4); (2,4); (2,0) Dla każdego losowego punktu (x,y) sprawdzamy, czy leży on pod wykresem funkcji y=x2 tzn. czy prawdziwa jest nierówność y<=x2, jeśli tak, to należy on do pola S i program zalicza jedno "trafienie".
Ciąg dalszy algorytmu - pole pod wykresem Jeśli liczba N wygenerowanych punktów jest dostatecznie duża to w przybliżeniu zachodzi równość: S N1 ———————— = ———— , pole prostokąta N gdzie N1 to ilość zaliczonych trafień. Stąd pole S jest równe: N1 S˙=˙˙pole prostokąta˙* ——— N
Prezentacja algorytmu pole pod wykresem w postaci: Programu w Turbo Pascalu Ocena dokładności obliczeń pliki: monte.pas
Algorytm proceduralny Algorytm w którym wyróżnio- ne części algorytmu (zwane procedurami) są logi cznie włą- czone w wykony- wanie róż- nych częś ci algoryt- mu start nadanie wartości parametrom wejście odwołanie się do procedury instrukcje procedury ciąg dalszy algort. powrót nadanie wartości parametrom i ew.odwołanie się doprocedury ciąg dalszy algort.
OD PROBLEMU DO PROGRAMU Metoda od ogółu do szczegółu Krok 1 - postawienie problemu Krok 2 - opis szczegółowy algorytmu Krok 3 - zapis algorytmu w kodzie pseudojęzyka Krok 4 - zapis algortmu w języku programowania
Krok 1 Postawienie problemu PRZY KŁAD METO DY OD OGÓ ŁU DO SZCZE GÓŁU Problem: Wyznaczyć wszystkie liczby pierwsze nie większe od zadanej liczby naturalnej. Zastosować algorytm znany pod nazwą sita Eratostenesa. Algorytm ten polega na wykreślaniu wielo- krotności kolejno znajdowanych liczb pier- wszych nie większych od zadanej liczby.
Krok 2 Opis szczegółowy algorytmu PRZY KŁAD METO DY OD OGÓ ŁU DO SZCZE GÓŁU Utworzyć listę liczb całkowitych od 1 do n. Zaczynając od liczby 2 usuń z listy wszystkie wielokrotności dwóch większe od 2. Znajdź pierwszą nieusuniętą liczbę (będzie to liczba 3) jest to liczba pierwsza Usuń wielokrotności trzech większe od 3 Znajdź pierwszą nieusuniętą liczbę (będzie to liczba 5) jest to liczba pierwsza
Ciąg dalszy opisu PRZY KŁAD METO DY OD OGÓ ŁU DO SZCZE GÓŁU Usuwaj w ten sposób wyznaczone wielo- krotności kolejnych znajdowanych liczb pierwszych, aż do przekroczenie połowy wartości liczby n Liczby, które pozostały są liczbami pierwszymi.
Krok 3 Zapis w kodzie pseudo języka Lista zmiennych: n - parametr programu k,p - zmienne sterujące Ak - element tablicy liczb pierwszych znaj dujący się na miejscu k. Kod pseudo języka: czytaj n niech k :=0 dopóki k<n wykonuj początek {zwiększaj k o 1 i w miejsce Ak podstaw k} koniec k:=k+1 Ak :=k
Ciąg dalszy kodu k:=k+1 Tu nale ży wsta wić proce durę „usun” niech k :=1 dopóki k<=n/2 wykonuj początek {wybierz następną liczbę Ak } jeżeli Ak <>0 to {usuń wielokrotności Ak większe od Ak } koniec Części opisowe umieszczone w nawiasach {...} zastępujemy odpowiednimi instrukcjami. k:=k+1 Tu nale ży wsta wić proce durę „usun”
Ciąg dalszy kodu Procedura USUN początek p=2 dopóki k * p < n wykonuj początek A k * p = 0 p=p+1 koniec koniec
Krok 4 Zapis w języku programowania Język Turbo Pascal program sito_eratostenesa; uses crt; const wymiar=2000; var A:array[1..wymiar] of integer; n,k:integer; procedure usun(p:integer); var kr:integer; begin kr:=2; while kr*p<=n do begin A[kr*p]:=0; kr:=kr+1; end;{koniec while...} end;{koniec usun...} Język QBasic CLS PRINT "**********************" PRINT "*PROGRAM WYZNACZA *" PRINT "*WSZYSTKIE; LICZBY *" PRINT "*PIERWSZE NIE WIEKSZE*" PRINT "*OD ZADANEJ LICZBY N *" DEFINT I, K, N INPUT "podaj liczbe N "; N DIM A(N) REM WYPELNIANIE TABLICY A(K) FOR K = 1 TO N LET A(K) = K NEXT K REM WYSZUKIWANIE LICZBY PIERWSZEJ LET K = 1
Zapis w języku programowania begin clrscr; writeln('********************************'); writeln('*PROGRAM WYZNACZA *'); writeln('*WSZYSTKIE LICZBY PIERWSZE*’); writeln('*NIE WIEKSZE OD ZADANEJ*'); writeln('*LICZBY N METODA SITA*'); writeln('*ERATOSTENESA *'); writeln('***************************'); writeln; write('podaj liczbe naturalna N '); read(n); for k:=1 to n do A[k]:=k; k:=1; FOR K = 2 TO INT(N / 2) IF A(K) <> 0 THEN GOSUB USUN DALEJ: NEXT K REM DRUKOWANIE CLS PRINT "oto liczby pierwsze < "; N PRINT "---------------------------" PRINT FOR K = 2 TO N IF A(K) <> 0 THEN PRINT USING "#####"; A(K); NEXT K END REM USUWANIE WIELOKROTNOSCI USUN: I = 2 WHILE I * K <= N A(I * K) = 0 I = I + 1 WEND RETURN DALEJ
Zapis w języku programowania repeat k:=k+1; if A[k]<>0 then usun(k); until k>trunc(n/2); {drukowanie} clrscr; writeln('oto liczby pierwsze < ',n); writeln('---------------------------'); for k:=2 to n do if A[k]<>0 then write(A[k]:6); repeat until keypressed end.
Prezentacja algorytmu sito Eratostenesa w postaci: Programu w Turbo Pascalu pliki: monte.pas
Algorytm rekurencyjny Algorytm w którego definicji występuje odwołanie się do siebie samego. Algorytm ten musi zawierać warunek zakończenia kolejnego odwołania początek procedury N T Ocena algorytmu: złożoność pamięciowa złożoność czasowa warunek zakończenia blok instrukcji koniec rekurencji
Rekurencyjne obliczanie potęg potega(a,n) wynik:= a•potega(a, n-1) podstawienie rekurencyjne w procedurze potega(a,n) Napisz procedury rekurencyjne obliczające potęgę an przy pomocy poniższych wzorów: Obliczyć potęgę 1,0013000, ocenić złożoność pamięciową i czasową.
Prezentacja algorytmu potęgi w postaci: Programu w Turbo Pascalu Ocena złożoności pamięciowej i czasowej pliki: pot1.pas, pot2.pas, pot3.pas
(metoda bisekcji, podziału połówkowego) Równanie nieliniowe (metoda bisekcji, podziału połówkowego)
Obliczanie pierwiastków równania nieliniowego - metodą bisekcji Własność Darbeaux: Jeżeli funkcja ciągła przyjmuje róż ne wartości w końcach przedziału to przyjmuje w tym przedzia- le wszystkie wartości po- średnie. Opis metody: Zakłada się że znany jest przedział <A,B> i dokładność E , na końcach którego funkcja f(x) ma wartości przeciwnego znaku tzn. f(A)*f(B)<0 co oznacza, że w przedziale <A,B> znajduje się przynajmniej jedno miejsce zerowe. W kolejnych krokach zawęża się ten przedział przyjmując: A=(A+B)/2 jeżeli f(A)*f((A+B)/2)>0 lub B=(A+B)/2 w przeciwnym przypadku
Dalszy ciąg opisu Kolejne zawężania należy przerwać po spełnieniu warunku: (B-A)< 2*E Program powinien również wyznaczać ilość iteracji (zawężeń przedziału). Zadanie. Do studni wrzucono dwa patyki, o długości AB=4 m, CD=3 m Punkt E zetknięcia się patyków znaj- duje się na wysokości EF=1 m nad dnem studni. Obliczyć szerokość studni. B D E A F C
Rozwiązanie zadania Stosując Twierdzenia Talesa i Pitagorasa dla AEF i ACB oraz dla CEF i ACD otrzymamy równanie: równanie to można rozwiązać metodą bisekcji, zastosowanej do przedziału <0,3>
Prezentacja algorytmu, metoda bisekcji w postaci: Schematu blokowego Programu w Turbo Pascalu Programu w Visual Basicu pliki: bisekcja.rys, bisekcja.pas, bisekcja.vbp
Pełną wersję prezentacji wraz z programami można pobrać ze strony: http://www.zamoyski.neostrada.pl