Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

ALGORYTMY KLASYCZNE ________ FRAKTALE

Podobne prezentacje


Prezentacja na temat: "ALGORYTMY KLASYCZNE ________ FRAKTALE"— Zapis prezentacji:

1 ALGORYTMY KLASYCZNE ________ FRAKTALE

2 Zastosowanie algorytmów iteracyjnych w rysowaniu fraktali
FRAKTALE Zastosowanie algorytmów iteracyjnych w rysowaniu fraktali

3 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).

4 FRAKTALE

5 FRAKTALE

6 Ś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.

7 Śnieżynka Kocha

8 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

9 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.

10 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.

11 Śnieżynka Kocha FRAKTALE

12 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.

13 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.

14 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.

15 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ż n-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.

16 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.

17 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.

18 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ż n-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.

19

20 Trójkąt Sierpińskiego
FRAKTALE Trójkąt Sierpińskiego

21 Dywany Sierpińskiego FRAKTALE

22 Dywany Sierpińskiego FRAKTALE

23 iteracja i rekurencja ALGORYTMY KLASYCZNE mmazur.eu.org

24 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.

25 Algorytmy klasyczne Algorytm Euklidesa Wyszukiwanie największego wspólnego dzielnika (NWD) dwóch liczb naturalnych.

26

27 ZAPIS ALGORYTMU W C++

28 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"); }

29 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");

30 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

31 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.

32 Algorytmy klasyczne ZAPIS ALGORYTMU W C++

33 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);

34 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"); }

35 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

36 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.

37 Algorytmy klasyczne - przykład
Przykład wykorzystania ciągu Fibonacciego

38 Algorytmy klasyczne ZAPIS ALGORYTMU W C++

39 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;

40 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);

41 Zastosowanie ciągu Fibonacciego w przyrodzie
Algorytmy klasyczne Zastosowanie ciągu Fibonacciego w przyrodzie

42 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.

43 Algorytmy klasyczne Schemat Hornera pozwala na wyznaczenie ilorazu Q(x) z dzielenia wielomianu W(x) = anxn + an-1xn a2x2 + a1x + a0     przez dwumian x - c.

44 Algorytmy klasyczne ZAPIS ALGORYTMU W C++

45 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;

46 Algorytmy klasyczne Sito Eratostenesa Sito Eratostenesa - przypisywany Eratostenesowi z Cyreny algorytm wyznaczania liczb pierwszych z zadanego przedziału [2, n]

47 Algorytmy klasyczne

48 Algorytmy klasyczne ZAPIS ALGORYTMU W C++

49 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();

50 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!

51 Wieża Hanoi edu.i-lo.tarnow.pl

52 Koniec. Zakończenie styczeń 2013 r.
Programowanie strukturalne i obiektowe styczeń 2013 r.


Pobierz ppt "ALGORYTMY KLASYCZNE ________ FRAKTALE"

Podobne prezentacje


Reklamy Google