Wstęp do programowania

Podobne dokumenty
Wstęp do programowania

Programowanie i projektowanie obiektowe

Spis treści. Funkcje. 1 Funkcje 1.1 Zadanie Zadanie Zadanie Zadanie Zadanie Zadanie Zadanie 7

Wstęp do programowania

Wstęp do programowania

Wstęp do programowania

Wstęp do programowania

Wstęp do programowania

Wstęp do programowania

Algorytmy i Struktury Danych

Wstęp do programowania

Programowanie i projektowanie obiektowe

Podstawy programowania w Pythonie

Zaawansowane algorytmy i struktury danych

Spis treści. Dekoratory. 1 Dekoratory 1.1 Zadanie Zadanie Zadanie Zadanie 4

Zaawansowany kurs języka Python

Podstawy programowania 2. Temat: Funkcje i procedury rekurencyjne. Przygotował: mgr inż. Tomasz Michno

Podstawy programowania. Wykład: 13. Rekurencja. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

FUNKCJA REKURENCYJNA. function s(n:integer):integer; begin if (n>1) then s:=n*s(n-1); else s:=1; end;

Technologie informacyjne Wykład VII-IX

Kurs języka Python. Wykład 11. Marcin Młotkowski. 4 stycznia Kontrola poprawności podczas biegu programu. 2 Testowanie oprogramowania

REKURENCJA W JĘZYKU HASKELL. Autor: Walczak Michał

Testy jednostkowe Wybrane problemy testowania metod rekurencyjnych

Wstęp do programowania

Algorytmy i struktury danych

Teoretyczne podstawy informatyki

Programowanie i projektowanie obiektowe

Wykład 3. Metoda dziel i zwyciężaj

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

Rekurencja (rekursja)

Rekurencja. Przygotowała: Agnieszka Reiter

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

Składnia funkcji i Rekurencja w języku Haskell

Teoretyczne podstawy informatyki

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

Programowanie dynamiczne

Język Python (2) Język Python (2) 1/36

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści

Technologie Informatyczne Wykład VII

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

Warsztaty dla nauczycieli

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

TEORETYCZNE PODSTAWY INFORMATYKI

Podstawy Pythona. Krzysztof Gdawiec. Instytut Informatyki Uniwersytet Śląski

ALGORYTMY I STRUKTURY DANYCH

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny

PROGRAMOWANIE W PYTHONIE OD PIERWSZYCH KROKÓW

Obliczenia na stosie. Wykład 9. Obliczenia na stosie. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 266 / 303

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje w roku akademickim 2012/2013. Projektowanie i analiza algorytmów

Zaawansowany kurs języka Python

Projektowanie i analiza algorytmów

Algorytmy i Struktury Danych

KARTA MODUŁU KSZTAŁCENIA

Rozdział 4. Algorytmy sortowania 73 Rozdział 5. Typy i struktury danych 89 Rozdział 6. Derekursywacja i optymalizacja algorytmów 147

Kurs rozszerzony języka Python

Podstawy algorytmiki i programowania - wykład 2 Tablice dwuwymiarowe cd Funkcje rekurencyjne

Python. Wprowadzenie. Jolanta Bachan

Sortowanie przez scalanie

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

Wykład z Technologii Informacyjnych. Piotr Mika

Elementy projektowania inzynierskiego Przypomnienie systemu Mathcad

Sylabus modułu: Matematyczne podstawy informatyki (kod modułu:03-mo2n-12-mpln)

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Funkcje. Piotr Zierhoffer. 7 października Institute of Computer Science Poznań University of Technology

Algorytmy i struktury danych. wykład 2

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

Język Python. Język Python 1/35

6. Pętle while. Przykłady

Zaprojektować i zaimplementować algorytm realizujący następujące zadanie.

Przetwarzanie i analiza danych w języku Python / Marek Gągolewski, Maciej Bartoszuk, Anna Cena. Warszawa, Spis treści

Dekoratora używa się wstawiając linijkę zaczynającą się przed definicją dekorowanego obiektu (klasy czy funkcji).

koordynator modułu dr hab. Michał Baczyński rok akademicki 2012/2013

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

Język skryptowy: Laboratorium 1. Wprowadzenie do języka Python

TEORETYCZNE PODSTAWY INFORMATYKI

Technologia informacyjna Algorytm Janusz Uriasz

Wstęp do informatyki Ćwiczenia. Piotr Fulmański

Informatyka wprowadzenie do algorytmów (II) dr hab. inż. Mikołaj Morzy

Wstęp do Informatyki i Programowania (kierunek matematyka stosowana)

Programowanie - wykład 4

Wprowadzenie do szablonów szablony funkcji

Programowanie strukturalne i obiektowe. Funkcje

Ćwiczenie 5. Python 3: Programowanie obiektowe i dziedziczenie

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

Algorytmika i pseudoprogramowanie

Języki i metody programowania

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

Wykresy i interfejsy użytkownika

Wprowadzenie do programowania

Zaawansowany kurs języka Python

Elektrotechnika I stopień (I stopień / II stopień) Ogólnoakademicki (ogólno akademicki / praktyczny) Niestacjonarne (stacjonarne / niestacjonarne)

Laboratorium nr 1. i 2.

Modelowanie rynków finansowych z wykorzystaniem pakietu R

1. Algorytmika. WPROWADZENIE DO ALGORYTMIKI Wprowadzenie do algorytmów. Pojęcie algorytmu.

Wstęp do programowania

Laboratorium kryptograficzne dla licealistów 6

Metody iteracyjne rozwiązywania układów równań liniowych (5.3) Normy wektorów i macierzy (5.3.1) Niech. x i. i =1

Teraz bajty. Informatyka dla szkół ponadpodstawowych. Zakres rozszerzony. Część 1.

Wstęp do Programowania potok funkcyjny

Transkrypt:

Wstęp do programowania Funkcje Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk(Wydział Fizyki) WP w. V Jesień 2013 1 / 32

Funkcje Funkcje w matematyce f : D W D dziedzina W zbiór wartości Funkcja może być wieloargumentowa f : D 1 D 2 D n W P. Daniluk(Wydział Fizyki) WP w. V Jesień 2013 2 / 32

Funkcje w Pythonie def f ( arg1, arg2,..., argn ) : compute compute... compute return r e s u l t P. Daniluk(Wydział Fizyki) WP w. V Jesień 2013 3 / 32

Podawanie argumentów Domyślne wartości argumentów def work ( name=" Jack " ) : p r i n t " A l l work and no p l a y makes", name, "a d u l l boy. " Jeżeli w wywołaniu funkcji nie zostanie podany argument zostanie użyta domyślna wartość. >>> work("kevin") All work and no play makes Kevin a dull boy. >>> work() All work and no play makes Jack a dull boy. >>> P. Daniluk(Wydział Fizyki) WP w. V Jesień 2013 4 / 32

Podawanie argumentów c.d. Argumenty nazwane d ef p a r r o t ( v o l t a g e, s t a t e= a s t i f f, a c t i o n= voom, t y p e= Norwegian Blue ) : p r i n t " This p a r r o t wouldn t ", a c t i o n, p r i n t " i f you put ", v o l t a g e, " v o l t s through i t. " p r i n t " L o v e l y plumage, the ", t y p e p r i n t " I t s ", s t a t e, "! " p a r r o t ( 1 000) # 1 p o s i t i o n a l argument p a r r o t ( v o l t a g e =1000) # 1 keyword argument p a r r o t ( v o l t a g e =1000000, a c t i o n= VOOOOOM ) # 2 keyword a r g s p a r r o t ( a c t i o n= VOOOOOM, v o l t a g e =1000000) # 2 keyword a r g s p a r r o t ( a m i l l i o n, b e r e f t o f l i f e, jump ) # 3 p o s i t i o n a l arguments p a r r o t ( a thousand, s t a t e= p u s h i n g up t h e d a i s i e s ) # 1 p o s i t i o n a l, 1 keyword Argumenty pozycyjne nie mogą następować po nazwanych. P. Daniluk(Wydział Fizyki) WP w. V Jesień 2013 5 / 32

Podawanie argumentów c.d. Dowolna liczba argumentów pozycyjnych def fun ( a r g s ) : p r i n t a r g s args jest krotką zawierającą wszystkie argumenty pozycyjne. >>> fun() () >>> fun( aa ) ( aa,) >>> fun(1, aa,2, bb,3, cc ) (1, aa, 2, bb, 3, cc ) >>> fun(1,par=2) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: fun() got an unexpected keyword argument par P. Daniluk(Wydział Fizyki) WP w. V Jesień 2013 6 / 32

def fun ( par1, a=0, args, kwargs ) :.... P. Daniluk(Wydział Fizyki) WP w. V Jesień 2013 7 / 32 Podawanie argumentów c.d. Dowolna liczba argumentów nazwanych def fun ( kwargs ) : p r i n t kwargs kwargs jest słownikiem zawierającym wszystkie argumenty nazwane. >>> fun(a=1,b=2,c=3) a : 1, c : 3, b : 2 >>> fun(1,2) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: fun() takes exactly 0 arguments (2 given) Wszystkie metody specyfikowania argumentów można łączyć

Podawanie argumentów c.d. >>> def fun(a,b):... print a,b... >>> l=range(2) >>> fun(*l) 0 1 >>> fun(*(range(3))) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: fun() takes exactly 2 arguments (3 given) >>> d= b :3, a :2 >>> fun(**d) 2 3 >>> fun(*d) a b >>> P. Daniluk(Wydział Fizyki) WP w. V Jesień 2013 8 / 32

Argumenty przez wartość, czy przez referencję? Przekazywanie przez wartość Zmiana wartości argumentu wewnątrz funkcji nie propaguje się na zewnątrz. Przekazywanie przez referencję Zmiana wartości argumentu wewnątrz funkcji powoduje zmianę wartości zmiennej podanej jako argument. P. Daniluk(Wydział Fizyki) WP w. V Jesień 2013 9 / 32

Argumenty przez wartość, czy przez referencję? c.d. Przykład (język E) def modify(var p, &q) { p := 27 # passed by value - only the local parameter is modified q := 27 # passed by reference - variable used in call is modified }? var a := 1 # value: 1? var b := 2 # value: 2? modify(a,&b)? a # value: 1? b # value: 27 P. Daniluk(Wydział Fizyki) WP w. V Jesień 2013 10 / 32

Argumenty przez wartość, czy przez referencję? Przykład (Python) >>> def f(l):... l.append(1)... >>> m = [] >>> f(m) >>> print m [1] >>> def f(l):... l += [1]... >>> m = [] >>> f(m) >>> print m [1] >>> def f(l):... l = l + [1]... >>> m = [] >>> f(m) >>> print m [] P. Daniluk(Wydział Fizyki) WP w. V Jesień 2013 11 / 32

Zwracana wartość Instrukcja return result powoduje natychmiastowe wyjście z funkcji. Funkcja zwraca wartość result. Aby zwrócić wiele wartości na raz, trzeba zwrócić krotkę. Można korzystać z pakowania/rozpakowywania krotek. Przykład >>> def f ( ) :... return 1,2,3... >>> f ( ) ( 1, 2, 3) >>> a, b, c=f ( ) P. Daniluk(Wydział Fizyki) WP w. V Jesień 2013 12 / 32

Funkcje mogą wywoływać kolejne funkcje def f ( ) : p r i n t " Jestem f. " def g ( ) : f ( ) p r i n t " Jestem g. "...albo siebie same def f ( ) : f ( ) p r i n t " Jestem f. " P. Daniluk(Wydział Fizyki) WP w. V Jesień 2013 13 / 32

Rekurencja Recursion See Recursion. P. Daniluk(Wydział Fizyki) WP w. V Jesień 2013 14 / 32

Rekurencja Recursion If you still don t get it, see Recursion. P. Daniluk(Wydział Fizyki) WP w. V Jesień 2013 14 / 32

Efekt Droste P. Daniluk(Wydział Fizyki) WP w. V Jesień 2013 15 / 32

Silnia silnia(i) = n! = 1 2... n { 1 i = 1 silnia(i 1) i w p.p. P. Daniluk(Wydział Fizyki) WP w. V Jesień 2013 16 / 32

Silnia silnia(i) = Rozwiązanie rekurencyjne def s i l n i a ( n ) : i f n==1: return 1 e l s e : return n! = 1 2... n { 1 i = 1 silnia(i 1) i s i l n i a ( n 1) n w p.p. P. Daniluk(Wydział Fizyki) WP w. V Jesień 2013 17 / 32

Silnia c.d. Rozwiązanie rekurencyjne def s i l n i a ( n ) : i f n==1: return 1 e l s e : return s i l n i a ( n 1) n Rozwiązanie iteracyjne def s i l n i a ( n ) : r e s =1 f o r i in range ( 1, n +1): r e s = i return r e s P. Daniluk(Wydział Fizyki) WP w. V Jesień 2013 18 / 32

Uwagi Zalety rekurencji prostota implementacji dobra do rozwiązywania problemów, które wymagają stosu często stosowana w metodzie dziel i zwyciężaj P. Daniluk(Wydział Fizyki) WP w. V Jesień 2013 19 / 32

Uwagi Zalety rekurencji prostota implementacji dobra do rozwiązywania problemów, które wymagają stosu często stosowana w metodzie dziel i zwyciężaj Wady rekurencji wywołanie funkcji jest drogie w językach preferujących konstrukcje iteracyjne może łatwo nastąpić przepełnienie P. Daniluk(Wydział Fizyki) WP w. V Jesień 2013 19 / 32

Uwagi Zalety rekurencji prostota implementacji dobra do rozwiązywania problemów, które wymagają stosu często stosowana w metodzie dziel i zwyciężaj Wady rekurencji wywołanie funkcji jest drogie w językach preferujących konstrukcje iteracyjne może łatwo nastąpić przepełnienie Iteracja i rekurencja są wzajemnie równoważne. P. Daniluk(Wydział Fizyki) WP w. V Jesień 2013 19 / 32

Uwagi c.d. Sensowne zastosowania Quicksort obchodzenie drzew (grafów) wieże Hanoi (ćw.) algorytmy dziel i zwyciężaj P. Daniluk(Wydział Fizyki) WP w. V Jesień 2013 20 / 32

Uwagi c.d. Sensowne zastosowania Quicksort obchodzenie drzew (grafów) wieże Hanoi (ćw.) algorytmy dziel i zwyciężaj Istnieją również rekurencyjne struktury danych (np. listy, drzewa). P. Daniluk(Wydział Fizyki) WP w. V Jesień 2013 20 / 32

Funkcje jako wartości W Pythonie funkcje są traktowane jak wartości... >>> f() par: default >>> f( aa ) par: aa >>> >>> g=f >>> g() par: default >>> g( bb ) par: bb >>> g <function f at 0x10e5dc410> >>> f <function f at 0x10e5dc410> >>> g <function f at 0x10e5dc410> >>> del f >>> g() par: default P. Daniluk(Wydział Fizyki) WP w. V Jesień 2013 21 / 32

Funkcje jako wartości c.d.... i mogą być argumentami innych funkcji. >>> def h(n, fun):... for i in range(n):... fun(i)... >>> h(5,f) par: 0 par: 1 par: 2 par: 3 par: 4 >>> Przykładowe zastosowania aplikowanie operacji do elementów sekwencji kryterium porównujące w sortowaniu P. Daniluk(Wydział Fizyki) WP w. V Jesień 2013 22 / 32

Projektowanie dwie strategie Top-down Problem jest rozbijany na podproblemy, które można rozwiązać niezależnie. Podproblemy są dalej sukcesywnie dzielone do poziomu łatwo implementowalnych funkcji. Bottom-up Najpierw definiowane są podstawowe elementy, następnie składane są z nich coraz większe komponenty. P. Daniluk(Wydział Fizyki) WP w. V Jesień 2013 23 / 32

Projektowanie dwie strategie c.d. Top-down Brakujące elementy całości trzeba tymczasowo uzupełnić przed uruchomieniem. W naturalny sposób przechodzi od ogólnego zarysu do szczegółowych rozwiązań. Wymaga kompletnego projektu. Ułatwia delegowanie zadań i programowanie zespołowe. Pozwala poprawnie zaprojektować system od podstaw. Bottom-up Szybko uzyskuje się fragmenty, które można testować. Trzeba z góry przewidzieć jakie komponenty są niezbędne. Można rozpocząć kodowanie bez ostatecznej koncepcji. Zwiększa prawdopodobieństwo, że bloki funkcjonalne będą uniwersalne. Pozwala rozwijać istniejący program. P. Daniluk(Wydział Fizyki) WP w. V Jesień 2013 24 / 32

Przykłady Top-down 1 Wczytaj dane 2 Przetwórz 1 Sprawdź poprawność danych 2 Wykonaj obliczenie 3 Zapisz wynik P. Daniluk(Wydział Fizyki) WP w. V Jesień 2013 25 / 32

Przykłady Bottom-up 1 Proste operacje (np. jakaś algebra - dodawanie wektorów, iloczyn skalarny) 2 Operacje na podzbiorach dziedziny (mnożenie wektora przez macierz, mnożenie macierzy, wyznacznik) 3 Bardziej złożone operacje (rozkłady macierzy) 4 Program rozwiązujący równania liniowe P. Daniluk(Wydział Fizyki) WP w. V Jesień 2013 26 / 32

Zadanie 1 Zaimplementuj funkcję obliczającą k-tą liczbę Fibonacciego. P. Daniluk(Wydział Fizyki) WP w. V Jesień 2013 27 / 32

Zadanie 2 Napisz program losujący k liczb Fibonacciego nie większych od n. P. Daniluk(Wydział Fizyki) WP w. V Jesień 2013 28 / 32

Zadanie 3 Zadanie Zaimplementuj algorytm rozwiązujący problem przenoszenia n krążków z pierwszego kołka na trzeci zgodnie z regułami. P. Daniluk(Wydział Fizyki) WP w. V Jesień 2013 29 / 32

Zadanie 4 Zaimplementuj sortowanie według zadanego porządku. P. Daniluk(Wydział Fizyki) WP w. V Jesień 2013 30 / 32

Zadanie 5 Zaimplementuj sortowanie według zadanego porządku algorytmem Quicksort. P. Daniluk(Wydział Fizyki) WP w. V Jesień 2013 31 / 32

Strona wykładu http://bioexploratorium.pl/wiki/wstęp_do_programowania 2013z P. Daniluk(Wydział Fizyki) WP w. V Jesień 2013 32 / 32