ALGORYTMY KLASYCZNE ________ FRAKTALE
Zastosowanie algorytmów iteracyjnych w rysowaniu fraktali FRAKTALE Zastosowanie algorytmów iteracyjnych w rysowaniu fraktali
FRAKTALE Fraktal (łac. fractus – złamany, cząstkowy, ułamkowy) w znaczeniu potocznym oznacza zwykle obiekt samo-podobny (tzn. taki, którego części są podobne do całości) albo "nieskończenie subtelny" (ukazujący subtelne detale nawet w wielokrotnym powiększeniu). http://pl.wikipedia.org/wiki/Fraktal
FRAKTALE http://wazniak.mimuw.edu.pl/index.php?title=Grafika:GKIW_M6_Slajd_28.png
FRAKTALE http://wazniak.mimuw.edu.pl/index.php?title=Grafika:GKIW_M6_Slajd_28.png
Śnieżynka Kocha FRAKTALE Powstaje w ten sposób, że do boków trójkąta równobocznego dokleja się trzy trójkąty pomniejszone np.. w skali 1:3, do otrzymanej gwiazdy sześcioramiennej – 12 trójkątów zmniejszonych np. w skali 1:9 itd. Śnieżynka Kocha jest jednym z najprostszych modeli matematycznych pełnej linii brzegowej, np. oddzielającej morze od lądu.
Śnieżynka Kocha http://talina.boo.pl/gimnazjum/fraktale/www/lubinski/platek.html
Najpierw rysujemy trójkąt równoboczny FRAKTALE Najpierw rysujemy trójkąt równoboczny o długości boku np. 1. Każdy bok trójkąta dzielimy na trzy równe części i doklejamy do części środkowej, tak jak na rysunku, trójkąt równoboczny o boku trzy razy krótszym. Z trójkąta powstała 12 boczna gwiazda. Każdy jej bok ma długość równą 1/3
FRAKTALE Następnie ... Każdy bok gwiazdy dzielimy znowu na trzy równe części i do części środkowej doklejamy trójkąt równoboczny o boku trzy razy krótszym niż poprzednio. Otrzymamy 48 boczną gwiazdę o długości boku 1/9.
Kolejne kroki są następujące: FRAKTALE Kolejne kroki są następujące: W kolejnych krokach postępujemy podobnie jak poprzednio. W trzecim kroku powstanie gwiazdka, która ma 3•43=192jednakowej długości boków. Rysunek poniżej pokazuje gwiazdkę po 5 krokach konstrukcyjnych. Gwiazdka ta ma teraz 3•45, czyli 3072 boki. Rysunek poniżej pokazuje piramidę po 5 krokach konstrukcyjnych.
Śnieżynka Kocha FRAKTALE http://nauczyciel.pl/page.php/resources/view_all?id=geometric_sequence_account_constant_ratio_common_page_9 http://shinemedia.pl/?page_id=298
Dywan Sierpińskiego FRAKTALE Dywan Sierpińskiego to fraktal otrzymany z kwadratu za pomocą podzielenia go na dziewięć mniejszych kwadratów (3x3), usunięcia środkowego kwadratu i ponownego rekurencyjnego zastosowania tej samej procedury do każdego z pozostałych ośmiu kwadratów. www.algorytmy.com/iteracyjne/*e2*97*8f+Dywany+Sierpi*c5*84skiego+(Opis)+*e2*97*8f
Jak konstruuje się Dywan Sierpińskiego? FRAKTALE Jak konstruuje się Dywan Sierpińskiego? Najpierw rysujemy kwadrat , który dzielimy na dziewięć równych części i usuwamy środkowy kwadrat. www.algorytmy.com/iteracyjne/
FRAKTALE Następnie … Każdy z pozostałych ośmiu mniejszych kwadratów dzielimy znowu na dziewięć równych części i usuwamy znowu środkowe kwadraciki. www.algorytmy.com/iteracyjne
Kolejne kroki są następujące: FRAKTALE Kolejne kroki są następujące: W kolejnych krokach postępujemy podobnie jak poprzednio. Po n krokach kwadrat będzie miał, aż 1+8+82+83+ .... +8n-1 dziur, którymi to dziurami są usunięte kwadraty, które są różnej wielkości. Rysunek poniżej pokazuje dywan po 5 krokach konstrukcyjnych. www.algorytmy.com/iteracyjne
Jak konstruuje się Trójkąt Sierpińskiego FRAKTALE Jak konstruuje się Trójkąt Sierpińskiego Najpierw rysujemy trójkąt równoboczny, o długości boku np. 1. Środki boków trójkąta łączymy odcinkami. Otrzymaliśmy cztery trójkąty równoboczne, każdy o długości boku 1/3. Usuwamy środkowy trójkąt. www.algorytmy.com/iteracyjne
FRAKTALE Następnie … Każdy z pozostałych trzech mniejszych trójkątów dzielimy znowu na cztery równe trójkąty. Ich wierzchołkami są środki boków trójkątów otrzymanych w pierwszym kroku. Usuwamy środkowe trójkąty. www.algorytmy.com/iteracyjne
Kolejne kroki są następujące: FRAKTALE Kolejne kroki są następujące: W kolejnych krokach postępujemy podobnie jak poprzednio. Po n krokach kwadrat będzie miał, aż 1+3+32+33+ .... +3n-1, dziur, którymi to dziurami są usunięte trójkąty, które są różnej wielkości. Rysunek poniżej pokazuje trójkąt po 5 krokach konstrukcyjnych. www.algorytmy.com/iteracyjne
Trójkąt Sierpińskiego FRAKTALE Trójkąt Sierpińskiego http://nauczyciel.pl/page.php/resources/view_all?id=geometric_sequence_account_constant_ratio_common_t_page_7 http://agn.oeiizk.waw.pl/index.php?option=com_content&view=article&id=9&Itemid=10
Dywany Sierpińskiego FRAKTALE www.algorytmy.com/iteracyjne/*e2*97*8f+Dywany+Sierpi*c5*84skiego+(Opis)+*e2*97*8f
Dywany Sierpińskiego FRAKTALE www.algorytmy.com/iteracyjne/*e2*97*8f+Dywany+Sierpi*c5*84skiego+(Opis)+*e2*97*8f
iteracja i rekurencja ALGORYTMY KLASYCZNE mmazur.eu.org
Algorytmy klasyczne Iteracja (łac. iteratio – powtarzanie) – czynność powtarzania (najczęściej wielokrotnego) tej samej instrukcji (albo wielu instrukcji) w pętli. Mianem iteracji określa się także operacje wykonywane wewnątrz takiej pętli. Rekurencja, zwana także rekursją to w logice, programowaniu i w matematyce odwoływanie się np. funkcji lub definicji do samej siebie. http://pl.wikipedia.org/
Algorytmy klasyczne Algorytm Euklidesa Wyszukiwanie największego wspólnego dzielnika (NWD) dwóch liczb naturalnych.
ZAPIS ALGORYTMU W C++ http://shinemedia.pl
Algorytm Euklidesa – sposób I Algorytmy klasyczne Algorytm Euklidesa – sposób I #include <iostream> #include<cstdlib> using namespace std; int main() { int a,b; cin >> a >> b; while(a != b) if(a > b) a -= b; else b -= a; cout << a << endl; system("pause"); } http://edu.i-lo.tarnow.pl/inf/utils/010_2010/0208.php
Algorytm Euklidesa – sposób II Algorytmy klasyczne #include <iostream> #include<cstdlib> using namespace std; int main() { int a,b,r; cin >> a >> b; while(b) r = a % b; a = b; b = r; } cout << a << endl; system("pause"); http://edu.i-lo.tarnow.pl/inf/utils/010_2010/0208.php
Metoda „dziel i zwyciężaj” Algorytmy klasyczne Metoda „dziel i zwyciężaj” Jest to algorytm sortowania szybkiego. DZIEL - problem główny zostaje podzielony na podproblemy ZWYCIĘŻAJ - znajdujemy rozwiązanie podproblemów POŁĄCZ - rozwiązania podproblemów zostają połączone w rozwiązanie problemu głównego http://edu.i-lo.tarnow.pl/inf/alg/003_sort/0018.php
Idea sortowania szybkiego jest następująca: Algorytmy klasyczne Idea sortowania szybkiego jest następująca: DZIEL : najpierw sortowany zbiór dzielimy na dwie części w taki sposób, aby wszystkie elementy leżące w pierwszej części (zwanej lewą partycją) były mniejsze lub równe od wszystkich elementów drugiej części zbioru (zwanej prawą partycją). ZWYCIĘŻAJ : każdą z partycji sortujemy rekurencyjnie tym samym algorytmem. POŁĄCZ : połączenie tych dwóch partycji w jeden zbiór daje w wyniku zbiór posortowany. http://edu.i-lo.tarnow.pl/inf/alg/003_sort/0018.php
Algorytmy klasyczne ZAPIS ALGORYTMU W C++ http://shinemedia.pl
Algorytmy klasyczne #include <iostream> #include <iomanip> #include <cstdlib> #include <time.h> using namespace std; const int N = 20; // Liczebność zbioru. int d[N]; // Procedura sortowania szybkiego //------------------------------- void Sortuj_szybko(int lewy, int prawy) { int i,j,piwot; i = (lewy + prawy) / 2; piwot = d[i]; d[i] = d[prawy]; for(j = i = lewy; i < prawy; i++) if(d[i] < piwot) swap(d[i], d[j]); j++; } d[prawy] = d[j]; d[j] = piwot; if(lewy < j - 1) Sortuj_szybko(lewy, j - 1); if(j + 1 < prawy) Sortuj_szybko(j + 1, prawy); http://edu.i-lo.tarnow.pl/inf/alg/003_sort/0018.php
Algorytmy klasyczne // Program główny //--------------- int main() { int i; srand((unsigned)time(NULL)); cout << "Przed sortowaniem:\n\n"; // Najpierw wypełniamy tablicę d[] liczbami pseudolosowymi // a następnie wyświetlamy jej zawartość for(i = 0; i < N; i++) d[i] = rand() % 100; for(i = 0; i < N; i++) cout << setw(4) << d[i]; cout << endl; // Sortujemy Sortuj_szybko(0,N - 1); // Wyświetlamy wynik sortowania cout << "Po sortowaniu:\n\n"; system("pause"); } http://edu.i-lo.tarnow.pl/inf/alg/003_sort/0018.php
Algorytmy klasyczne LICZBY FIBONACCIEGO Liczby naturalne tworzące ciąg o takiej własności, że kolejny wyraz (z wyjątkiem dwóch pierwszych) jest sumą dwóch poprzednich nazywa się liczbami Fibonacciego i pojawiają się w tak wielu sytuacjach, że wydaje się to niemożliwe. Leonardo Pisano Fibonacci eoearth.org
Algorytmy klasyczne Ciąg Fibonacciego to ciąg liczb określony rekurencyjnie w sposób następujący: F0 = 0 F1 = 1 Fn = Fn-1 + Fn-2, dla n ≥ 2 *** Początkowe wartości tego ciągu to: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, ... Podstawowy ciąg liczb Fibonacciego to: 1, 1, 2, 3, 5, 8, ... Każda liczba w ciągu jest sumą dwóch poprzednich (poza pierwszą i drugą). Mamy więc do czynienia z ciągiem rekurencyjnym.
Algorytmy klasyczne - przykład Przykład wykorzystania ciągu Fibonacciego
Algorytmy klasyczne ZAPIS ALGORYTMU W C++ http://shinemedia.pl
Ciąg Fibonacciego - iteracyjnie Algorytmy klasyczne Ciąg Fibonacciego - iteracyjnie #include <iostream> #include <conio.h> using namespace std; int main() { unsigned int ktora,w; cout<<"ktora liczbe z ciagu Fibonacciego chcesz zobaczyc"<<endl; cin>>ktora; int a=1,b=1; if (ktora==0) w=0; else if (ktora==1 || ktora==2) w=1; else for (int i=3;i<=ktora;i++) w=a+b; a=b; b=w; } cout<<"Fib("<<ktora<<") ="<<w; getch(); return 0;
Ciąg Fibonacciego - rekurencyjnie Algorytmy klasyczne Ciąg Fibonacciego - rekurencyjnie #include <iostream> #include <conio.h> using namespace std; int fib (int); int main() { int n; cout<<"Podaj wart. do ciagu fibonnacciego: "<<endl; cin>>n; cout<<"Fib("<<n<<") = "<<fib(n); getch(); return 0; } int fib(int n) if (n==0) return 0; else if (n==1) return 1; else if (n>1) return fib(n-1)+fib(n-2);
Zastosowanie ciągu Fibonacciego w przyrodzie Algorytmy klasyczne Zastosowanie ciągu Fibonacciego w przyrodzie http://www.youtube.com/watch?v=-WF6V9RQFz8&feature=player_embedded#! http://shinemedia.pl
Algorytmy klasyczne Schemat Hornera Schemat Hornera powiązany z nazwiskiem Hornera - brytyjskiego matematyka żyjącego na przełomie XVIII i XIX wieku. Schemat Hornera to sposób obliczania wartości wielomianu dla danej wartości argumentu wykorzystujący minimalną liczbę mnożeń. Jest to również algorytm dzielenia wielomianu W(x) przez dwumian x - c.
Algorytmy klasyczne Schemat Hornera pozwala na wyznaczenie ilorazu Q(x) z dzielenia wielomianu W(x) = anxn + an-1xn-1 + ... + a2x2 + a1x + a0 przez dwumian x - c.
Algorytmy klasyczne ZAPIS ALGORYTMU W C++ http://shinemedia.pl
Schemat Hornera #include <iostream> #include <conio.h> using namespace std; int main() { int n; cout<<"podaj stopien wielomianu"<<endl; cin>>n; int *a=new int [n]; cout<<"Podaj wartosci a"<<endl; for (int i=0;i<=n;i++) cout<<"a["<<i<<"] ="; cin>>a[i]; } int x; cout<<"Podaj x:"; cin>>x; int w; w=a[0]; for (int i=1;i<=n;i++) w=w*x+a[i]; cout<<"wynik to: "<<w; delete [] a; getch(); return 0;
Algorytmy klasyczne Sito Eratostenesa Sito Eratostenesa - przypisywany Eratostenesowi z Cyreny algorytm wyznaczania liczb pierwszych z zadanego przedziału [2, n] http://pl.wikipedia.org/wiki/Sito_Eratostenesa
Algorytmy klasyczne http://old.scholaris.pl/uruchom/faktoryzacja,liczby,naturalnej,i,sito,eratostenesa http://shinemedia.pl
Algorytmy klasyczne ZAPIS ALGORYTMU W C++
Sito Eratostenesa #include <iostream> #include <conio.h> using namespace std; int main() { bool tab[10000]; unsigned int i,ile,w; cout<<"Do jakiej liczby mam wypisywac liczby pierwsze?"<<endl; cin>>ile; if (ile>10000) cout<<"Podales ich za duzo"; else for (i=2;i<=ile;i++) tab[i]=true; for (i=2;i<=ile;i++) if ((i!=2) && (i%2==0)) i++; w=i+i; while (w<=ile) tab[w]=false; w+=i; } for (i=2;i<=ile;i++) if (tab[i]) cout<<i<<","; getch();
Algorytmy klasyczne Wieża Hanoi Łamigłówka polega na przełożeniu wszystkich krążków z środkowego drążka na dowolny sąsiedni drążek przestrzegając zasady, iż nie można położyć krążka większego na mniejszym oraz jednorazowo można przenieść tylko jeden krążek. Przekładanie nie jest trudne pod warunkiem, że odkryje się rekurencyjną zasadę przekładania. Zagraj! http://www.math.edu.pl/hanoi
Wieża Hanoi edu.i-lo.tarnow.pl
Koniec. Zakończenie styczeń 2013 r. Programowanie strukturalne i obiektowe styczeń 2013 r. http://shinemedia.pl