Funkcje. Funkcje. liczba rzeczywista r punkt, w którym wartość wielomianu nas interesuje. Szukane: liczba rzeczywista

Podobne dokumenty
Programowanie komputerowe. Zajęcia 2

Wstęp do programowania

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

W większości języków programowania(nie we wszystkich) wymaga się, żeby użyte w programie zmienne były wcześniej zadeklarowane:

Deklaracje. W większości języków programowania(nie we wszystkich) wymaga się, żeby użyte w programie zmienne były wcześniej zadeklarowane:

ZAAWANSOWANE JĘZYKI PROGRAMOWANIA

Wstęp do programowania

Rekurencja. Przygotowała: Agnieszka Reiter

Programowanie strukturalne i obiektowe. Funkcje

Błędy leksykalne są na ogół nietrudne do znalezienia.

Rodzaje błędów w programach. Wykład9.UWAGIOGÓLNE,str.1

Programowanie - wykład 4

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 6. Karol Tarnowski A-1 p.

Wykład 8. Rekurencja. Iterować jest rzeczą ludzką, wykonywać rekursywnie boską. L. Peter Deutsch

12. Rekurencja. UWAGA Trzeba bardzo dokładnie ustalić <warunek>, żeby mieć pewność, że ciąg wywołań się zakończy.

4. Funkcje. Przykłady

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Anatomia definicji rekursywnej. Anatomia definicji rekursywnej. int silnia(intn){ if(n==0) return 1; else return n*silnia(n-1); }

Lab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur.

Programowanie komputerowe. Zajęcia 1

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

Podstawy programowania C. dr. Krystyna Łapin

Poprawność semantyczna

Funkcje. Deklaracja funkcji. Definicja funkcji. Wykorzystanie funkcji w programie.

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

5. Rekurencja. Przykłady

Wstęp do programowania

Podstawy programowania skrót z wykładów:

Komentarze w PHP (niewykonywane fragmenty tekstowe, będące informacją dla programisty)

typ_zwracanej_wartości nazwa_funkcji(lista deklaracji argumentów) { ciało(treść) funkcji return Val; //zwracana wartość }

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Tablice, funkcje - wprowadzenie

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

Etapy kompilacji. Wykład 7. Przetwarzanie wstępne, str. 1. #define ILE for(i=0; i<ile; i++)...

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

7. Pętle for. Przykłady

Wstęp do informatyki- wykład 11 Funkcje

5 Przygotował: mgr inż. Maciej Lasota

Wstęp do informatyki- wykład 9 Funkcje

Język C zajęcia nr 11. Funkcje

Wskaźniki w C. Anna Gogolińska

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Matematyka dyskretna. Andrzej Łachwa, UJ, a/15

Zmienne, stałe i operatory

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

2 Przygotował: mgr inż. Maciej Lasota

Ćwiczenie nr 3. Temat: Definicje i wykorzystanie funkcji, parametry funkcji

Wskaznik. Przekazywanie wyniku funkcji przez return. Typy i zmienne wskaznikowe. Zmienna wskazywana. typ * nazwa_wkaznika

Podstawy programowania. Wykład: 6. Tablice statyczne. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Lab 9 Podstawy Programowania

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Część 4 życie programu

część 8 wskaźniki - podstawy Jarosław Gramacki Instytut Informatyki i Elektroniki Podstawowe pojęcia

Wstęp do Programowania, laboratorium 02

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

Funkcje przeciążone, konstruktory kopiujące, argumenty domyślne

Wykład IV PASCAL - łańcuch znaków, - procedury i funkcje, - sortowanie bąbelkowe

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u

Programowanie Obiektowe i C++

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Opis zagadnieo 1-3. Iteracja, rekurencja i ich realizacja

Programowanie komputerowe. Zajęcia 3

Funkcje. Spotkanie 5. Tworzenie i używanie funkcji. Przekazywanie argumentów do funkcji. Domyślne wartości argumentów

Wykład 5: Klasy cz. 3

Tablice, funkcje, wskaźniki - wprowadzenie

Język C, tablice i funkcje (laboratorium, EE1-DI)

Język C++ zajęcia nr 2

Programowanie Komputerów

Podstawy programowania. Wykład 3 Konstrukcje sterujące. Krzysztof Banaś Podstawy programowania 1

Podstawy Programowania C++

3. Instrukcje warunkowe

Przekazywanie argumentów wskaźniki

Język ludzki kod maszynowy

ALGORYTMY I STRUKTURY DANYCH

Pojęcie szeregu nieskończonego:zastosowania do rachunku prawdopodobieństwa wykład 1

main( ) main( void ) main( int argc, char argv[ ] ) int MAX ( int liczba_1, liczba_2, liczba_3 ) źle!

Laboratorium nr 10. Temat: Funkcje cz.2.

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

Podstawy programowania. Wykład: 7. Funkcje Przekazywanie argumentów do funkcji. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Personal Home Page PHP: Hypertext Preprocessor

Rekurencja (rekursja)

Szablony funkcji i szablony klas

Programowanie obiektowe w C++ Wykład 12

Różne właściwości. Różne właściwości. Różne właściwości. C++ - klasy. C++ - klasy C++ - KLASY

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

ZAAWANSOWANEJĘZYKI PROGRAMOWANIA

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

1 Podstawy c++ w pigułce.

Wskaźniki. Informatyka

Sposoby przekazywania parametrów w metodach.

Transkrypt:

Funkcje Przykład: (wartość wielomianu w punkcie) M Dane: liczba naturalna N liczba współczynników wielomianu (= stopień wielomianu +1) tablicaliczbrzeczywistycha 0,a 1,a 2,...,a N 1 współczynnikiwielomianu liczba rzeczywista r punkt, w którym wartość wielomianu nas interesuje Szukane: liczba rzeczywista N 1 i=0 a i r i =a 0 +a 1 r+a 2 r 2 +...+a N 1 r N 1 Funkcje Wykład 6. FUNKCJE, str. 2 Przykład: (wartość wielomianu w punkcie) M #definen6 main(){ double a[n],r,wart; inti; /*wczytanietablicy a orazliczby r */ wart=0.0; for(i=0; i<n; i=i+1) wart = wart + a[i]*potega(r,i); /*wydrukliczby wart */ Jakzrobić,żeby potega(r,i) prawidłowoobliczałar i?

Funkcje Przykład: (definicja funkcji realizującej potęgowanie) M nagłówek ciało wartość wynikowa doublepotega(doubler,inti) { double p; p=1.0; while(i>0) { p=p*r;i=i-1; return p; Nagłówek: typ wynikowy, nazwa, deklaracje parametrów. Ciało: deklaracje lokalne, komendy. Wynik: wyrażenie, którego wartość ma być wartością wywołania. Funkcje Wykład 6. FUNKCJE, str. 4 Fragmenty obliczeń można wyodrębnić w t.zw. funkcje. Definicja funkcji składa się z nagłówka postaci typ nazwa( deklaracje parametrów) (lista parametrów może być pusta), ciała składającego się z deklaracji zmiennych lokalnych oraz instrukcji, nadania wartości. Funkcjestosujesiępoto,żeby: niepisaćwprogramiewielerazytegosamegokodu, rozdzielić problem na mniejsze, logicznie zamknięte fragmenty, móc te fragmenty użyć ponownie, w innym programie.

Funkcje definicja a wywołania Nagłówek definicji funkcji: parametry są zawsze zmiennymi. Wywołanie funkcji w programie: argumenty są wyrażeniami. Liczba i typy argumentów wywołania muszą zgadzać się z liczbą i typami parametrów definicji. Przykład: MNagłówek definicji: double aaa(int n+1) ZŁY parametrmusibyćzmiennąawyrażenien+1niąniejest Nagłówek definicji: double bbb(int n, double x) DOBRY Wywołanie: bbb(5) ZŁE w definicji są dwa parametry a w wywołaniu jeden argument Wywołanie: bbb(5.3*pi,-2) ZŁE pierwszy argument wywołania jest rzeczywisty a zgodnie z definicją miał być całkowity Wywołanie: bbb(-2, 5.3*pi) DOBRE Funkcje definicja a wywołania Wykład 6. FUNKCJE, str. 6 Typwartościfunkcjimożebyćm.in. int, double, char. Funkcja nie może mieć wartości typu tablicowego. Typ wyrażenia nadającego wartość(komenda return) musi być taki sam jak typ funkcji w nagłówku. Funkcję można wywołać tylko w takim miejscu programu, gdzie dopuszczalne jest wyrażenie tego typu. Przykład: MDefinicja: char ccc(int n) {...return 2.0*x; ZŁA typ funkcji(char) nie jest taki sam jak typ nadania wartości(double) Definicja: double ddd(int n) {...return 2.0*x; DOBRA Wywołanie: printf("%c",ddd(2)); ZŁE ddd(2) jest rzeczywiste, nie można go drukować w formacie znakowym Wywołanie: tab[12] = ddd(2*n)/ddd(7); DOBRE

Układ programu z funkcjami Postać definicji funkcji: typ nazwa(listaparametrów){ ciało funkcji return wyrażenie; definicjafunkcji 1 definicjafunkcji 2 definicjafunkcji n main(){ program główny Układ programu z funkcjami Wykład 6. FUNKCJE, str. 8 deklaracje zm. globalnych definicja funkcji 1 definicja funkcji 2 definicja funkcji n main() { deklaracje zm. lokalnych instrukcje zmienne globalne są widoczne w programie głównym i we wszystkich definicjach funkcji o ile nie zostały zasłonięte przez deklaracje lokalne; zmienne lokalne są widoczne tylko w programie głównym; zmienne zadeklarowane w ciele funkcjisąwidocznetylkowtejfunkcji; parametry funkcji również są widoczne tylko w tej funkcji; mainjestjednązfunkcji.

Funkcje zasłanianie zmiennych.......................... deklaracja globalna x; funkcja1(...) { deklaracja lokalna x;...x...; funkcja2(...) { deklaracja lokalna x;...x...; funkcja3(...) { deklaracja lokalna x;...x...; Zmienna, której nazwy użyto w ciele funkcji, pochodzi z deklaracji lokalnej w ciele (lub w nagłówku) tej funkcji. Jeśli zmienna nie posiada deklaracji lokalnej, to pochodzi z deklaracji globalnej na początku programu. Jeśli zmienna nie posiada deklaracji lokalnej ani globalnej, to jest niezadeklarowana; w wielu językach (np. w C) kompilator sygnalizuje wtedy błąd. Funkcje eksponens Wykład 6. FUNKCJE, str. 10 Przykład: MWiadomo z analizy, że e x = + i=0 x i i! Możemy policzyć przybliżoną wartość tej funkcji, urywając obliczenie na jakiejś skończonej liczbie składników: e x n 1 i=0 x i i! Im większe n tym lepsza dokładność.

Funkcje eksponens int silnia(int n){ int i,s; s=1; for(i=2; i<=n; i=i+1) s=s*i; return s; doublepot(doublex,intn){ inti;doublep; p=1.0; for(i=0; i<n; i=i+1) p=p*x; return p; main(){ double x, suma; int n,i; printf("przyblizone e^x\n"); printf("podajx:"); scanf("%lf",&x); printf("ileskladnikow?"); scanf("%i",&n); suma=0.0; for(i=0; i<n; i=i+1) suma = suma + pot(x,i)/silnia(i); printf("\ne^%lf =~=%lf\n\n", x,suma); Uwaga Wykład 6. FUNKCJE, str. 12 Uwaga: Oba podane wyżej programy na wartość wielomianu w punkcie, oraz naprzybliżonąwartośće x zostały napisane bardzo nieoptymalnie.

Oszczędniejszy eksponens suma=0.0;skladnik=1.0; // skladnik= x0 0! for(i=0;i<n;i=i+1) { i 1 x j // suma= & skladnik= xi j=0j! i! suma=suma+skladnik; skladnik=skladnik*x/(i+1); Funkcje organizują program i ułatwiają programiście panowanie nad nim. Ale nieostrożne użycie funkcji może prowadzić do nieoptymalności. Rekursja Wykład 6. FUNKCJE, str. 14

Rekursja double potega(doublea,intn){ if(n==0) return1.0; else return a* potega(a, n-1); main(){ printf("%lf\n",potega(4.0,3)); potega(4.0, 3) = 4.0 potega(4.0, 2) =4.0 4.0 potega(4.0,1) =4.0 4.0 4.0 potega(4.0,0) =4.0 4.0 4.0 1.0 =64.0 Rekursja Wykład 6. FUNKCJE, str. 16 W ciele definicji funkcji może znajdować się wywołanie tej samej funkcji. Definicję zawierającą takie wywołanie nazywa się rekursywną. Wykonanie funkcji zdefiniowanej rekursywnie odbywa się tak, jakby każde wywołanie wewnątrz ciała było zastąpione całym ciałem definicji z parametrami odpowiednio zastąpionymi przez argumenty wywołania. Uwaga: Obliczenie funkcji zdefiniowanej rekursywnie może nigdy się nie skończyć: Przykład: Mdoublepotega(doublea,intn){ if(n==0) return 1.0; else return a*potega(a,n-1); potega(4.0, 1) =4.0 potega(4.0, 2) =4.0 4.0 potega(4.0, 3) =

Rekursja Przykład: (potęga binarna) double potega2(double a, int n) { if(n==0) return 1.0; else if(n%2==0)/*czylinjestparzyste*/ M return potega2(a*a, n/2); else return a* potega2(a, n-1); potega2(2.0, 22) = potega2(4.0, 11) = 4.0 potega2(4.0, 10) =4.0 potega2(16.0,5)=4.0 16.0 potega2(16.0,4) =64.0 potega2(256.0,2)=64.0 potega2(65536.0,1) =64.0 65536.0 potega2(65536.0,0) =4194304 1.0 =4194304 Rekursja Wykład 6. FUNKCJE, str. 18 Przykład: (wieże w Hanoi) M 1 2 3 mamy przełożyć wszystkie krążki z pałeczki 1 na pałeczkę 3, używając pomocniczo pałeczki 2, na raz wolno przełożyć tylko jeden krążek, nigdy nie wolno kłaść krążka większego na mniejszy.

Rekursja Przykład: (wieże w Hanoi) M void Hanoi(intn,inta,intb,intc) { /*nkrążkówzpałeczkianapałeczkęc*/ if(n>0) { Hanoi(n-1, a, c, b); przełóżkrążekzanac; Hanoi(n-1, b, a, c); Rekursja Wykład 6. FUNKCJE, str. 20 Przykład: (wieże w Hanoi) M Hanoi(3,1,2,3) = Hanoi(2,1,3,2); Hanoi(2,2,1,3); = Hanoi(1,1,2,3); 1 2; Hanoi(1,3,1,2); Hanoi(1,2,3,1); 2 3; Hanoi(1,1,2,3); = Hanoi(0,1,3,2); Hanoi(0,2,1,3); 1 2; Hanoi(0,3,2,1); 3 2; Hanoi(0,1,3,2); Hanoi(0,2,1,3); 2 1; Hanoi(0,3,2,1); 2 3; Hanoi(0,1,3,2); Hanoi(0,2,1,3); = 1 2; 3 2; 2 1; 2 3;

Rekursja Przykład: (wieże w Hanoi) MIle ruchów potrzeba, żeby przełożyć n krążków? { R(0)=0 R(n+1)=R(n)+1+R(n) Łatwo sprawdzić przez indukcję, że te dwie równości są spełnione przez funkcję R(n) def =2 n 1 Jeśli ruch trwa sekundę a krążków jest 64, to przekładanie trwa 2 64 sek. 1.8 10 19 sek. 5.85 10 11 lat =585000000000lat (wiekwszechwiata 013750000000lat) Rekursja Wykład 6. FUNKCJE, str. 22 Przykład: (funkcja Ackermanna) M int Ack(intm,intn) { if(m==0) returnn+1; else if(n==0) return Ack(m-1,1); else return Ack(m-1, Ack(m,n-1)); to jest przykład funkcji zdefiniowanej rekursywnie, bardzo szybko rosnącej.

Rekursja Przykład: (funkcja Ackermanna) MAck(0,n)=n+1 Ack(1,0)=Ack(0,1)=2 Ack(1,1)=Ack(0,Ack(1,0))=Ack(0,2)=3 Ack(1,2)=Ack(0,Ack(1,1))=Ack(0,3)=4 Ack(1,n)=n+2 Ack(2,0)=Ack(1,1)=3 Ack(2,1)=Ack(1,Ack(2,0))=Ack(1,3)=5 Ack(2,2)=Ack(1,Ack(2,1))=Ack(1,5)=7 Ack(2,n)=2n+3 Ack(3,0)=Ack(2,1)=5 Ack(3,1)=Ack(2,Ack(3,0))=Ack(2,5)=13 Ack(3,2)=Ack(2,Ack(3,1))=Ack(2,13)=29 Ack(3,n)=2 (n+3) 3 Ack(4,n)=2 2...2 3 n+3dwójki