Wstęp do programowania

Podobne dokumenty
1 Granice funkcji. Definicja 1 (Granica w sensie Cauchy ego). Mówimy, że liczba g jest granicą funkcji f(x) w punkcie x = a, co zapisujemy.

Matematyka:Matematyka I - ćwiczenia/granice funkcji

DEMERO Automation Systems

W. Guzicki Zadanie 23 z Informatora Maturalnego poziom rozszerzony 1

Rozdział 6. Pakowanie plecaka. 6.1 Postawienie problemu

I. LOGICZNE STRUKTURY DRZEWIASTE

MATEMATYKA 9. INSTYTUT MEDICUS Kurs przygotowawczy do matury i rekrutacji na studia medyczne Rok 2017/2018 FUNKCJE WYKŁADNICZE, LOGARYTMY

Podstawowe działania w rachunku macierzowym

Zadania z parametrem

Zadanie 3 - (7 punktów) Iloczyn składników Jeśli zapis liczby 22 w postaci sumy zawiera składnik 1, lepiej pogrupować go z innym składnikiem

Zagadnienia transportowe

ROZWIĄZANIA ZADAŃ Zestaw P3 Odpowiedzi do zadań zamkniętych

Wykład 4 Wybrane zagadnienia programowania w C++

KONKURSY MATEMATYCZNE. Treść zadań

Architektura Systemów Komputerowych. Sterowanie programem skoki Przerwania

TWIERDZENIE PITAGORASA

TEST WIADOMOŚCI: Równania i układy równań

Odpowiedzi i schematy oceniania Arkusz 23 Zadania zamknięte. Wskazówki do rozwiązania. Iloczyn dwóch liczb ujemnych jest liczbą dodatnią, zatem

for (i=1; i<=10; i=i+1) instrukcja; instrukcja zostanie wykonana 10 razy for (inicjalizacja; test; aktualizacja) instrukcja;

Arkusz zawiera informacje prawnie chronione do momentu rozpocz cia egzaminu.

Test F- Snedecora. będzie zmienną losową chi-kwadrat o k 1 stopniach swobody a χ

SCHEMAT ZBIORNIKA HYDROFOROWEGO ZE STALI NIERDZEWNEJ

Rozdział 7. Wykorzystanie funkcji daty i czasu do analizy danych

KARTY PRACY UCZNIA. Twierdzenie Pitagorasa i jego zastosowanie. samodzielnej pracy ucznia. Zawarte w nich treści są ułożone w taki sposób,

ETAP I KONKURSU MATEMATYCZNEGO CONTINUUM

EGZAMIN MAGISTERSKI, 24 czerwca 2013 Matematyka w ekonomii i ubezpieczeniach

Polska-Warszawa: Usługi w zakresie doradztwa prawnego i reprezentacji prawnej 2015/S

Programowanie dynamiczne

Wojewódzki Konkurs Przedmiotowy z Matematyki dla uczniów gimnazjów województwa śląskiego w roku szkolnym 2011/2012

SCHEMATY STRON. Baner Nawigacja Nawigacja okruszkowa Prawa kolumna zobacz również Boksy Zwykła strona...

14.Rozwiązywanie zadań tekstowych wykorzystujących równania i nierówności kwadratowe.

WYKŁAD 8. Postacie obrazów na różnych etapach procesu przetwarzania

EGZAMIN MATURALNY Z MATEMATYKI MAJ 2011 POZIOM ROZSZERZONY. Czas pracy: 180 minut. Liczba punktów do uzyskania: 50 WPISUJE ZDAJĄCY

1. Rozwiązać układ równań { x 2 = 2y 1

Intellect. Business Intelligence. Biblioteka dokumentów Podręcznik. Business Intelligence od 2Intellect.com Sp. z o.o.

Arkusz kalkulacyjny MS Excel podstawy

Surowiec Zużycie surowca Zapas A B C D S 1 0,5 0,4 0,4 0, S 2 0,4 0,2 0 0, Ceny x

Temat: Funkcje. Własności ogólne. A n n a R a j f u r a, M a t e m a t y k a s e m e s t r 1, W S Z i M w S o c h a c z e w i e 1

2.Prawo zachowania masy

Funkcje składowe (metody)

Statystyki opisowe. Marcin Zajenkowski. Marcin Zajenkowski () Statystyki opisowe 1 / 57

0.1 Hierarchia klas Diagram Krótkie wyjaśnienie

STA T T A YSTYKA Korelacja

RAPORT Z 1 BADANIA POZIOMU SATYSFAKCJI KLIENTÓW URZĘDU MIEJSKIEGO W KOLUSZKACH

Efektywność nauczania w Gimnazjum w Lutyni

Oprogramowanie klawiatury matrycowej i alfanumerycznego wyświetlacza LCD

Test całoroczny z matematyki. Wersja A

Logika I. Wykład 2. Działania na zbiorach

Jan Olek. Uniwersytet Stefana Kardynała Wyszyńskiego. Procesy z Opóźnieniem. J. Olek. Równanie logistyczne. Założenia

Podstawowe oddziaływania w Naturze

ALGORYTMY I STRUKTURY DANYCH

PODSTAWY METROLOGII ĆWICZENIE 4 PRZETWORNIKI AC/CA Międzywydziałowa Szkoła Inżynierii Biomedycznej 2009/2010 SEMESTR 3

Joanna Kisielińska Szkoła Główna Gospodarstwa Wiejskiego w Warszawie

Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące.

Wartości domyślne, szablony funkcji i klas

WZORU UŻYTKOWEGO <9)PL m 63278

Udoskonalona wentylacja komory suszenia

Przykłady wybranych fragmentów prac egzaminacyjnych z komentarzami Technik ochrony fizycznej osób i mienia 515[01]

3b. Rozwiązywanie zadań ze skali mapy

STRONA GŁÓWNA SPIS TREŚCI. Zarządzanie zawartością stron... 2 Tworzenie nowej strony... 4 Zakładka... 4 Prawa kolumna... 9

WOJEWÓDZKI KONKURS MATEMATYCZNY DLA SZKÓŁ PODSTAWOWYCH W ROKU SZKOLNYM 2012/2013

Bazy danych. Andrzej Łachwa, UJ, /15

PROE wykład 7 kontenery tablicowe, listy. dr inż. Jacek Naruniec

ASD - ćwiczenia III. Dowodzenie poprawności programów iteracyjnych. Nieformalnie o poprawności programów:

Architektura komputerów

Populacja małych dzieci w Polsce

KWIECIEŃ 2008 RYNEK WTÓRNY I RYNEK NAJMU MIESZKAŃ W WYBRANYCH MIASTACH POLSKI RYNEK WTÓRNY I RYNEK NAJMU MIESZKAŃ W WYBRANYCH MIASTACH POLSKI

Pacjenci w SPZZOD w latach

Mikroekonomia Wykład 9

Wojewódzki Konkurs Przedmiotowy z Matematyki. dla uczniów szkół podstawowych - etap szkolny

BLOK I. 3. Korzystając z definicji pochodnej w punkcie, obliczyć pochodne podanych funkcji we wskazanych punktach:

Kurs wyrównawczy dla kandydatów i studentów UTP

7. OPRACOWYWANIE DANYCH I PROWADZENIE OBLICZEŃ powtórka

Statystyczna analiza danych w programie STATISTICA. Dariusz Gozdowski. Katedra Doświadczalnictwa i Bioinformatyki Wydział Rolnictwa i Biologii SGGW

Kurs z matematyki - zadania

UCHWAŁ A SENATU RZECZYPOSPOLITEJ POLSKIEJ. z dnia 18 października 2012 r. w sprawie ustawy o zmianie ustawy o podatku dochodowym od osób fizycznych

Geometria Wykreślna Wykład 3

Metoda LBL (ang. Layer by Layer, pol. Warstwa Po Warstwie). Jest ona metodą najprostszą.

UCHWAŁA NR... RADY MIASTA KIELCE. z dnia r.

SPRAWOZDANIE Z DZIAŁALNOŚCI RADY NADZORCZEJ SPÓŁKI PATENTUS S.A. ZA OKRES

ZESPÓŁ DO SPRAW ORGANIZACYJNO- GOSPODARCZYCH

Badania skuteczności działania filtrów piaskowych o przepływie pionowym z dodatkiem węgla aktywowanego w przydomowych oczyszczalniach ścieków

Pomiary geofizyczne w otworach

BIOMETRIA 3. Wprowadzenie do pakietu SAS

Opis programu do wizualizacji algorytmów z zakresu arytmetyki komputerowej

Plan naprawczy. Sokółka 2006/2007. Opracowanie: Urszula Bronowicz Henryka Sarosiek ElŜbieta Plichta Katarzyna Dykiel Tomasz Mucuś

cennik usługi Centrala DIATONIS

Wiedza niepewna i wnioskowanie (c.d.)

Programowanie 2. Język C++. Wykład 2.

Waldemar Szuchta Naczelnik Urzędu Skarbowego Wrocław Fabryczna we Wrocławiu

Gruntowy wymiennik ciepła PROVENT- GEO

Modele i narzędzia optymalizacji w systemach informatycznych zarządzania

MATEMATYKA 4 INSTYTUT MEDICUS FUNKCJA KWADRATOWA. Kurs przygotowawczy na studia medyczne. Rok szkolny 2010/2011. tel

Konfiguracja programu Outlook 2007 do pracy z nowym serwerem poczty (Exchange)

AUTOR MAGDALENA LACH

NUMER IDENTYFIKATORA:

FIZYKA Kolokwium nr 3 (e-test), część II

Wojewódzki Konkurs Przedmiotowy z Matematyki dla uczniów gimnazjów województwa śląskiego w roku szkolnym 2013/2014

PAKIET MathCad - Część III

KONSPEKT LEKCJI OTWARTEJ Z MATEMATYKI w klasie II gimnazjum. Temat: Przed nami powtórki materiału działania na potęgach i pierwiastkach

Transkrypt:

Wieczorowe Studia Licencjackie Wrocław, 4..2006 Wstęp do programowania Wykład nr 7 (w oparciu o notatki K. Lorysia, z modyfikacjami) Obliczanie współczynnika dwumianowego Newtona. Definicja. n = m n! m!( n m)! Algorytm korzystający wprost z definicji byłby mało efektywny, ponieważ w trakcie obliczeń powstawałyby bardzo duże liczby. Można by co prawda dokonywać skracania przez wspólne dzielniki licznika i mianownika, ale jest to kłopotliwe. Własność. n n n = + m m m W oparciu o tę własność obliczany jest trójkąt Pascala, w którym i-ty wiersz zawiera wszystkie współczynniki dla k=0,,...,i. i k 2 3 3 4 6 4

Program nierekurencyjny Wersja 0 Obliczamy trójkąt Pascala i umieszczamy go w dwuwymiarowej tablicy a, jak pokazano poniżej 0 0 0 0 0.. 0 0 0 0.. 2 0 0 0.. 3 3 0 0.. 4 6 4 0................ Jako wynik zwracamy k-ty element n-tego wiersza. Uwaga: Z podobnych względów co poprzednio zmienne i, j, a są lokalne w funkcji. Tym razem dochodzi jeszcze argument ekonomiczny gdyby tablica a była globalna, zajmowałaby pamięć przez cały czas wykonywania programu. Zmienne lokalne zajmują pamięć tylko na czas wykonywania funkcji. #define m 30 long newton(int n, int k) { int a[m][m]; int i, j; for (i=0; i<m; i++) for (j=0; j<m; j++) a[i][j]=0; a[0][0]=; for (i=; i<=n; i++) { a[i][0]=; for (j=; j<i; j++) a[i][j]=a[i-][j-]+a[i-][j]; a[i][i]=; return a[n][k];

Wersja Zauważamy, że do obliczenia kolejnego wiersza wystarczy pamiętać tylko wiersz poprzedni. Używamy wobec tego dwóch tablic: st do pamiętania poprzedniego wiersza oraz nowy do pamiętania aktualnie obliczanego wiersza. Po obliczeniu nowego wiersza, jest on kopiowany do tablicy st. #define k 200 { int i, j; long st[k],nowy[k]; st[0]=; for (i=0;i<n;i++) { nowy[0]=; for (j=; j<=i; j++) nowy[j]=st[j-]+st[j]; nowy[i+]=; for (j=0;j<=i+;j++) { st[j]=nowy[j]; nowy[j]=0; return(st[m]); Uwaga: W pętli for (i=0;...) używamy dwóch pętli wewnętrznych for (j=...). Pierwsza z nich oblicza i-ty wiersz trójkąta Pascala i umieszcza go w tablicy nowy; druga kopiuje go z tablicy nowy do tablicy st i zeruje tablicę nowy. Ten fragment zaprogramowany jest nieco nieporadnie. W szczególności zerowanie tablicy nowy nie jest konieczne. Wersja 2 Dokonujemy drobnych poprawek:. nie zerujemy tablicy nowy; 2. kopiujemy do st tylko elementy od -ego do (i-)-ego, 3. nie używamy nowy[i+]. { int i, j; long st[k],nowy[k]; st[0]=; nowy[0]=; for (i=0;i<n;i++) { for (j=; j<=i; j++) nowy[j]=st[j-]+st[j]; for (j=;j<=i+;j++) st[j]=nowy[j]; st[i+]=; return(st[m]);

Wersja 3 Zauważamy, że obliczenia można wykonać używając tylko jednej tablicy. Musimy jednak zmodyfikować sposób jej wypełniania teraz robimy to od prawej do lewej strony. Poniższa ilustracja pokazuje jak zmieniać się będzie zawartość tablicy st podczas obliczania piątego wiersza trójkąta Pascala. 4 6 4 0 0 0 0 0 4 6 4 5 0 0 0 0 4 6 0 5 0 0 0 0 4 0 0 5 0 0 0 0 5 0 0 5 0 0 0 0 { int i, j; long st[k]; st[0]=; for (i=0;i<n;i++) { st[i+]=; for (j=i; j>0; j--) st[j]=st[j-]+st[j]; return(st[m]); Komentarz do instrukcji: Zamiast st[j]=st[j-]+st[j]; możemy napisać st[j]+=st[j-]; Program rekurencyjny: { if ((m==0) (m==n)) return ; else return newton(n-,m-)+newton(n-,m); Podobnie jak w przypadku liczb Fibonacciego, wersja ta jest nieefektywna nawet dla niezbyt dużych wartości n i m. Przyczyną jest wielokrotne wywoływanie funkcji dla tych samych wartości parametrów.

Jednoczesne szukanie minimum i maksimum W ciągu liczb umieszczonym w tablicy a[0..n-] chcemy znaleźć element najmniejszy i największy: - Najprostsze rozwiązanie polegałoby na zastosowaniu standardowej metody wyszukiwania minimum oraz standardowej metody wyszukiwania maksimum void maxmin(int *a, int n, int *min, int *max) { int k; *max=*min=a[0]; for (k=; k<n; k++) if (*min>a[k]) *min=a[k]; if (*max<a[k]) *max=a[k]; Uwaga: Wynikiem działania funkcji mają być dwie liczby. Dlatego wprowadziliśmy parametry, które nie są elementami typu int lecz int *. Oznacza to, że zmienne min i max są wskaźnikami na elementy typu int. Analogicznie do adresowania pośredniego w kodzie RAM, *min i *max to elementy typu int, na które wskazują zmienne min i max. Poniżej znajduje się przykład programu głównego wywołującego funkcję maxmin: main() { int b[]={, 2,,-3,7,-4; int mx,mn; maxmin(b,6,&mn,&mx); printf("\n%d %d\n",mn,mx); Jak widać, wskazanie na zmienne mx, mn typu int uzyskujemy za pomocą operatora &: &mn, &mx. - Drobne usprawnienie możemy uzyskać w oparciu o obserwację, że element mniejszy od dotychczasowego minimum na pewno nie jest kandydatem na maksimum void maxmin(int *a, int n, int *min, int *max) { int k; *max=*min=a[0]; for (k=; k<n; k++) if (*min>a[k]) *min=a[k]; else if (*max<a[k]) *max=a[k];

- Oba powyższe rozwiązania wymagają w najgorszym przypadku 2n-2 porównań. Możemy jednak rozwiązać ten problem inaczej: o Dla ciągu o długości jeden, minimum i maksimum równe są jedynemu elementowi ciągu. o Dla ciągu o długości n>, dzielimy ten ciąg na dwa podciągi (mniej więcej) równej długości. Niech M i m oznaczają odpowiednio maksimum i minimum pierwszego podciągu, a M2 i m2 maksimum i minimum drugiego podciągu. Wówczas maksimum całego ciągu jest równe większej z liczb M i M2 a minimum mniejszej z liczb m i m2 maxmin(int *a, int l,int p, int *min, int *max) { int mi,mi2,ma,ma2; if (l==p) *min=*max=a[l]; else if (p-l==){ if (a[l]<a[p]) {*max=a[p]; *min=a[l]; else {*max=a[l]; *min=a[p]; else { maxmin(a,l,(l+p)/2, &mi,&ma); maxmin(a,(l+p)/2+,p, &mi2,&ma2); *min=mi<mi2? mi :mi2; *max=ma>ma2? ma :ma2; Oznaczmy przez T(n) liczbę porównań wykonywanych przez powyższą funkcję dla danych o rozmiarze n. Wówczas zachodzi następująca zależność rekurencyjna: T ( n) = T ( 0 n = n / 2 ) + T ( n / 2 ) + 2 n > Dla n będących potęgami dwójki (n=2, 4, 8, 6, 32, 64,...) zależność powyższa przyjmuje postać T(n)=2T(n/2)+2 dla n>, której rozwiązaniem jest postać T(n)=3n/2-2. Liczba porównań dla n nie będących potęgą dwójki jest również istotnie mniejsza od 2n (wynosi nie więcej niż 5n/3-2).