Składnia funkcji i Rekurencja w języku Haskell

Wielkość: px
Rozpocząć pokaz od strony:

Download "Składnia funkcji i Rekurencja w języku Haskell"

Transkrypt

1 Składnia funkcji i w języku Haskell Tomasz Ostrowski, Adrian Niechciał, Michał Workiewicz, Marcin Wilk 26 marca 2015 Składnia funkcji i w języku Haskell

2 Spis treści Składnia funkcji Tomasz Ostrowski Adrian Niechciał Michał Workiewicz Marcin Wilk Składnia funkcji i w języku Haskell

3 Tomasz Ostrowski Dopasowywanie wzorców (pattern matching) W języku Haskell możliwe jest zdefiniowanie kilku różnych ciał funkcji, których wywołanie będzie zależne od konkretnych parametrów odpowiadających zadanym wzorcom. 1 f u n k c j a : : ( I n t e g r a l a ) => a > S t r i n g 2 f u n k c j a 1 = Wywołano parametr p i e r w s z y. 3 f u n k c j a 2 = Wywołano parametr d r u g i. 4 f u n k c j a x = Nie rozpoznano parametru. W takim wypadku wszystkie możliwości są sprawdzane od góry do dołu, i kiedy podany na wejściu parametr odpowiada jednemu z wzorców, wtedy zostaje wywołane odpowiadające mu ciało funkcji Składnia funkcji i w języku Haskell

4 Tomasz Ostrowski Kiedy możliwe jest wprowadzenie wartości nie występującej w żadnym z wzorców, korzysta się z wzorca który przyjmuje każdy parametr. 1 t a r c z a : : ( I n t e g r a l a ) => a > S t r i n g 2 t a r c z a 1 = T r a f i l e s 1 punkt. 3 t a r c z a 2 = T r a f i l e s 2 punkty. 4 t a r c z a 3 = T r a f i l e s 3 punkty. 5 t a r c z a 4 = T r a f i l e s 4 punkty. 6 t a r c z a 5 = T r a f i l e s 5 punktow. 7 t a r c z a 6 = T r a f i l e s 6 punktow. 8 t a r c z a 7 = T r a f i l e s 7 punktow. 9 t a r c z a 8 = T r a f i l e s 8 punktow. 10 t a r c z a 9 = T r a f i l e s 9 punktow. 11 t a r c z a 10 = G r a t u l a c j e! T r a f i l e s w 1 0! 12 t a r c z a x = Nie t r a f i l e s w t a r c z e! UWAGA: Ponieważ Haskell sprawdza możliwości zaczynając od góry, w przypadku użycia takiego wzorca musimy umieścić go na końcu kodu. W innym wypadku wzorce znajdujące się po nim nie zostaną w ogóle sprawdzone. Składnia funkcji i w języku Haskell

5 Tomasz Ostrowski Jeżeli nie przewidzimy możliwości występowania dowolnego parametru, na przykład: 1 charname : : Char > S t r i n g 2 charname a = A l b e r t 3 charname b = Broseph 4 charname c = C e c i l I wywołamy nieznany parametr: 1 g h c i > charname h Haskell wyświetli następujący błąd: 1 E x c e p t i o n : t u t. hs : ( 5 3, 0) (55, 21) : Non e x h a u s t i v e p a t t e r n s i n f u n c t i o n charname Najbezpieczniejsze jest więc stosowanie zawsze na koniec takiej funkcji wzorca akceptującego dowolny parametr. Składnia funkcji i w języku Haskell

6 Tomasz Ostrowski Krotki Wzorce można także stosować na krotkach. Poniższy przykład ilustruje funkcję, która dodaje do siebie wektory. 1 dodajwektory : : ( Num a ) = > ( a, a ) > ( a, a ) > ( a, a ) 2 dodajwektory ( x1, y1 ) ( x2, y2 ) = ( x1 + x2, y1 + y2 ) Tak skonstruowana funkcja przyjmuje na wejście dowolne zmienne i zwraca wynik w postaci dwóch par liczb (wektorów). Jest również możliwe stosowanie wzorców na listach. W tym przykładzie wyszukiwane i sumowane są elementy listy odpowiadające zadanemu wzorcowi (a, b). 1 g h c i > l e t x s = [ ( 1, 3 ), ( 4, 3 ), ( 2, 4 ), ( 5, 3 ), ( 5, 6 ), ( 3, 1 ) ] 2 g h c i > [ a+b ( a, b ) < x s ] 3 [ 4, 7, 6, 8, 1 1, 4 ] W przypadku kiedy dopasowanie wzorca jest niemożliwe, funkcja przechodzi do następnego elementu listy. Składnia funkcji i w języku Haskell

7 Tomasz Ostrowski Dopuszczalne jest także użycie listy pustej w określaniu wzorca. Tu na przykładzie zmodyfikowanej funkcji head: 1 h e a d : : [ a ] > a 2 h e a d [ ] = e r r o r Nie da s i ę wyznaczyc glowy p u s t e j l i s t y! 3 h e a d ( x : ) = x I z zastosowaniem rekurencji, w zmodyfikowanej wersji funkcji sum, która dodaje do siebie wszystkie elementy listy: 1 s u m : : ( Num a ) => [ a ] > a 2 s u m [ ] = 0 3 s u m ( x : x s ) = x + s u m x s Można również za pomocą wzorca odwołać się do całości dowolnej listy, bez potrzeby przepisywania w każdym miejscu jej nazwy lub definicji. W tym celu stosuje się wstawiany bezpośrednio przed wzorcem. 1 p i e r w s z a L i t e r a : : S t r i n g > S t r i n g 2 p i e r w s z a L i t e r a wyraz@ ( x : x s ) = P i e r w s z a l i t e r a s l o w a ++ wyraz ++ j e s t ++ [ x ] Składnia funkcji i w języku Haskell

8 Tomasz Ostrowski Osłony (guards) Osłony spełniają taką samą funkcję jak wyrażenie if służą do stwierdzenia czy postawiony warunek został spełniony. W odróżnieniu jednak od składni if, osłony są bardziej czytelne przy dużej liczbie warunków dla jednego wyrażenia oraz dobrze współgrają z haskellowymi wzorcami. 1 t a r c z a : : ( I n t e g e r a ) => a > S t r i n g 2 t a r c z a c e l 3 c e l <= 3 = S l a b i u t k o, m u s i s z s i ę b a r d z i e j p o s t a r a c. 4 c e l <= 5 = Troche l e p i e j, a l e j e s z c z e d a l e k o do i d e a l u. 5 c e l <= 8 = Prawie c i s i ę u d a l o. 6 c e l <= 10 = Znakomicie! T r a f i l e s w d z i e s i a t k e! 7 o t h e r w i s e = Porazka! Nie t r a f i l e s w t a r c z e! Składnia funkcji i w języku Haskell

9 Tomasz Ostrowski Osłony oznacza się znakiem, każda osłona jest wyrażeniem typu boolean przyjmującym wartość True lub False. Znajdujące się na końcu wyrażenie otherwise jest odpowiednikiem else znanego z konstrukcji if-else. Inny przykład zastosowania: 1 max : : ( Ord a ) => a > a > a 2 max a b 3 a > b = a 4 o t h e r w i s e = b Składnia funkcji i w języku Haskell

10 Adrian Niechciał Klauzula where Miejsce, w którym wyrażeniom lub wartościom przypisuje się nazwę, tworząc stałe. Umieszcza się ją po osłonach. Jest przydatna, gdy funkcja zawiera obliczenia, które muszą być kilkakrotnie powtarzane. //przykład 1 Składnia funkcji i w języku Haskell

11 Adrian Niechciał Klauzula where c.d. Możemy pójść o krok dalej i przekształcić naszą funkcję w następujący sposób: //przykład 2 Wszystkie wartości zdefiniowane w where są widoczne tylko w obrębie danej funkcji. Składnia funkcji i w języku Haskell

12 Adrian Niechciał Klauzula where c.d. Sekcja where pozwala również na dopasowywanie wzorców. //przykład 3 Lepiej jednak robić to, definiując ciała funkcji, ale ten przykład pokazuje, że takie coś jest możliwe. Składnia funkcji i w języku Haskell

13 Adrian Niechciał Klauzula where c.d. Tak jak wcześniej definiowaliśmy za pomocą where stałe, istnieje również możliwość definiowania funkcji. Stwórzmy funkcję, która przyjmuje listę par (waga, wzrost) i dla każdej takiej pary zwraca BMI. //przykład 4 Składnia funkcji i w języku Haskell

14 Adrian Niechciał Klauzula let Jest podobna do klauzuli where, co widać na przykładzie: //przykład 5 Składnia funkcji i w języku Haskell

15 Adrian Niechciał Klauzula let c.d. Jest jednak między nimi istotna różnica. Otóż where jest tylko częścią składni i nie może istnieć samodzielnie, natomiast klauzula let jest wyrażeniem, więc możemy używać jej gdziekolwiek zechcemy. Składnia funkcji i w języku Haskell

16 Adrian Niechciał Klauzula let c.d. Przykłady użycia let Składnia funkcji i w języku Haskell

17 Adrian Niechciał Klauzula let c.d. Przykłady użycia let 1. Wstawienie funkcji do listy: 1 [ l e t kwadrat x = x x i n ( kwadrat 5, kwadrat 3, kwadrat 2) ] Składnia funkcji i w języku Haskell

18 Adrian Niechciał Klauzula let c.d. Przykłady użycia let 1. Wstawienie funkcji do listy: 1 [ l e t kwadrat x = x x i n ( kwadrat 5, kwadrat 3, kwadrat 2) ] 2. Rozbicie krotki na komponenty i przypisanie im nazw: 1 ( l e t ( a, b, c ) = ( 1, 2, 3) i n a + b + c ) 100 Składnia funkcji i w języku Haskell

19 Adrian Niechciał Klauzula let c.d. Przykłady użycia let 1. Wstawienie funkcji do listy: 1 [ l e t kwadrat x = x x i n ( kwadrat 5, kwadrat 3, kwadrat 2) ] 2. Rozbicie krotki na komponenty i przypisanie im nazw: 1 ( l e t ( a, b, c ) = ( 1, 2, 3) i n a + b + c ) Uniknięcie tworzenia funkcji pomocniczych: //przykład 6 Składnia funkcji i w języku Haskell

20 Adrian Niechciał Klauzula let c.d. Przykłady użycia let 1. Wstawienie funkcji do listy: 1 [ l e t kwadrat x = x x i n ( kwadrat 5, kwadrat 3, kwadrat 2) ] 2. Rozbicie krotki na komponenty i przypisanie im nazw: 1 ( l e t ( a, b, c ) = ( 1, 2, 3) i n a + b + c ) Uniknięcie tworzenia funkcji pomocniczych: //przykład 6 4. Tworzenie w konsoli zmiennych i funkcji, do których mamy dostęp do momentu zamknięcia konsoli: 1 l e t z o o t x y z = x y + z Składnia funkcji i w języku Haskell

21 Adrian Niechciał Wyrażenie warunkowe case Jest oparte na dopasowywaniu do wzorca i rozszerza je, bo dopasowywanie do wzorca mogło być użyte tylko w definicji funkcji, a wyrażeń warunkowych możemy użyć tam, gdzie to potrzebne. //przykład 7 Składnia funkcji i w języku Haskell

22 Michał Workiewicz zwana również rekursją, polega na wywołaniu przez funkcję samej siebie. Algorytmy rekurencyjne zastępują w pewnym sensie iteracje. Zazwyczaj zadania rozwiązywane tą techniką są wolniejsze od iteracyjnego odpowiednika, natomiast rozwiązanie niektórych problemów jest znacznie wygodniejsze. Składnia funkcji i w języku Haskell

23 Michał Workiewicz c.d. Rekursja odgrywa podczas programowania w Haskellu bardzo dużą rolę. Nie istnieją w tym języku instrukcje takie jak pętla for czy do-while. Implementacja często powtarzających się czynności musi zatem zostać rozwiązana przez rekurencję. Dobrymi przykładami rekurencji są ciąg Fibonacciego oraz silnia. Składnia funkcji i w języku Haskell

24 Michał Workiewicz Ciąg Fibonacciego 1 f i b 0 = 0 2 f i b 1 = 1 3 f i b n = f i b ( n 1) + f i b ( n 2) Składnia funkcji i w języku Haskell

25 Michał Workiewicz Silnia 1 f a c t o r i a l n = i f n < 2 then 1 e l s e n f a c t o r i a l ( n 1) lub 1 f a c t o r i a l 0 = 1 2 f a c t o r i a l n = n f a c t o r i a l ( n 1) Składnia funkcji i w języku Haskell

26 Michał Workiewicz Maximum Funkcja maximum zwraca największy element z zadanego zbioru, dlatego też musi być zabezpieczona na wypadek gdyby zbiór był pusty, lub zawierał tylko jeden element. By ułatwić funkcji działanie, dzielimy ją na 3 wzorce. Składnia funkcji i w języku Haskell

27 Michał Workiewicz Maximum c.d. 1 maximum : : ( Ord a ) => [ a ] > a 2 maximum [ ] = e r r o r maximumof empty l i s t 1 3 maximum [ x ] = x 2 4 maximum ( x : x s ) 3 5 x > maxtail = x 6 o t h e r w i s e = maxtail 7 wheremaxtail = maximum x s Składnia funkcji i w języku Haskell

28 Michał Workiewicz Maximum c.d. 1 maximum : : ( Ord a ) => [ a ] > a 2 maximum [ ] = e r r o r maximumof empty l i s t 1 3 maximum [ x ] = x 2 4 maximum ( x : x s ) 3 5 x > maxtail = x 6 o t h e r w i s e = maxtail 7 wheremaxtail = maximum x s 1. Zbiór jest pusty zwracamy błąd o podanej treści. Składnia funkcji i w języku Haskell

29 Michał Workiewicz Maximum c.d. 1 maximum : : ( Ord a ) => [ a ] > a 2 maximum [ ] = e r r o r maximumof empty l i s t 1 3 maximum [ x ] = x 2 4 maximum ( x : x s ) 3 5 x > maxtail = x 6 o t h e r w i s e = maxtail 7 wheremaxtail = maximum x s 1. Zbiór jest pusty zwracamy błąd o podanej treści. 2. Zbiór jest jednoelementowy funkcja zwraca jedyny element tablicy. Składnia funkcji i w języku Haskell

30 Michał Workiewicz Maximum c.d. 1 maximum : : ( Ord a ) => [ a ] > a 2 maximum [ ] = e r r o r maximumof empty l i s t 1 3 maximum [ x ] = x 2 4 maximum ( x : x s ) 3 5 x > maxtail = x 6 o t h e r w i s e = maxtail 7 wheremaxtail = maximum x s 1. Zbiór jest pusty zwracamy błąd o podanej treści. 2. Zbiór jest jednoelementowy funkcja zwraca jedyny element tablicy. 3. Zbiór wieloelementowy podana funkcji tablica ma więcej niż jeden element. W tym miejscu działa rekurencja. Składnia funkcji i w języku Haskell

31 Michał Workiewicz Maximum c.d. 1 maximum : : ( Ord a ) => [ a ] > a 2 maximum [ ] = e r r o r maximumof empty l i s t 1 3 maximum [ x ] = x 2 4 maximum ( x : x s ) 3 5 x > maxtail = x 6 o t h e r w i s e = maxtail 7 wheremaxtail = maximum x s 1. Zbiór jest pusty zwracamy błąd o podanej treści. 2. Zbiór jest jednoelementowy funkcja zwraca jedyny element tablicy. 3. Zbiór wieloelementowy podana funkcji tablica ma więcej niż jeden element. W tym miejscu działa rekurencja. Funkcja dzieli listę na head i tail, aż do momentu otrzymania listy jednoelementowej i porównuje head, z maximum tail (czyli wywołuje funkcje maximum dla tail). Składnia funkcji i w języku Haskell

32 Michał Workiewicz Maximum c.d. Możemy też uprościć sobie tę funkcję poprzez zastosowanie funkcji max, pobierającej dwa argumenty i zwracającej większy z nich. 1 maximum : : ( Ord a ) => [ a ] > a 2 maximum [ ] = e r r o r maximum o f empty l i s t 3 maximum [ x ] = x 4 maximum ( x : x s ) = max x (maximum x s ) Składnia funkcji i w języku Haskell

33 Michał Workiewicz Przeanalizujmy teraz działanie rekurencji na podstawie funkcji maximum. Weźmy tablicę liczb całkowitych [2,1,5]. Składnia funkcji i w języku Haskell

34 Michał Workiewicz Przeanalizujmy teraz działanie rekurencji na podstawie funkcji maximum. Weźmy tablicę liczb całkowitych [2,1,5]. Tablicę dzielimy na head(2) i tail([1,5]) i wywołujemy funkcję maximum na tail. Składnia funkcji i w języku Haskell

35 Michał Workiewicz Przeanalizujmy teraz działanie rekurencji na podstawie funkcji maximum. Weźmy tablicę liczb całkowitych [2,1,5]. Tablicę dzielimy na head(2) i tail([1,5]) i wywołujemy funkcję maximum na tail. Tail jest dzielony znów na head i tail. Otrzymujemy 1 i 5 czyli dwa zbiory jednoelementowe został spełniony warunek końca rekurencji. Składnia funkcji i w języku Haskell

36 Michał Workiewicz Przeanalizujmy teraz działanie rekurencji na podstawie funkcji maximum. Weźmy tablicę liczb całkowitych [2,1,5]. Tablicę dzielimy na head(2) i tail([1,5]) i wywołujemy funkcję maximum na tail. Tail jest dzielony znów na head i tail. Otrzymujemy 1 i 5 czyli dwa zbiory jednoelementowe został spełniony warunek końca rekurencji. Porównujemy 1 i 5, funkcja zwraca 5 jako większe. Składnia funkcji i w języku Haskell

37 Michał Workiewicz Przeanalizujmy teraz działanie rekurencji na podstawie funkcji maximum. Weźmy tablicę liczb całkowitych [2,1,5]. Tablicę dzielimy na head(2) i tail([1,5]) i wywołujemy funkcję maximum na tail. Tail jest dzielony znów na head i tail. Otrzymujemy 1 i 5 czyli dwa zbiory jednoelementowe został spełniony warunek końca rekurencji. Porównujemy 1 i 5, funkcja zwraca 5 jako większe. Porównujemy zwróconą wartość z head naszej tablicy. 5 jest oczywiście większe niż 2, zatem funkcja zwraca 5 jako największą wartość. Składnia funkcji i w języku Haskell

38 Michał Workiewicz Łączenie łańcuchów na przemian 1 polacznaprzemian : : [ a] >[a] >[a ] 2 polacznaprzemian [ ] = [ ] 3 polacznaprzemian [ ] = [ ] 4 polacznaprzemian ( x : x s ) ( y : y s ) = [ x, y ] ++ polacznaprzemian x s y s Składnia funkcji i w języku Haskell

39 Michał Workiewicz Przykłady c.d. Mnożenie przez dodawanie: 1 m u l t i p l y a 0 = 0 2 m u l t i p l y a b = a + m u l t i p l y a ( b 1) Potęgowanie: 1 i n v o l u t i o n a 0 = 0 2 i n v o l u t i o n a b = a i n v o l u t i o n a ( b 1) Składnia funkcji i w języku Haskell

40 Marcin Wilk QuickSort w Haskellu Załóżmy, że mamy listę elementów typu Ord do posortowania. Najefektywniej można to osiągnąć za pomocą popularnego algorytmu QuickSort. O ile jednak w językach imperatywnych taki algorytm zajmować może nawet kilkanaście linijek kodu, to jego implementacja w Haskellu jest dużo krótsza i bardziej przejrzysta. Składnia funkcji i w języku Haskell

41 Marcin Wilk QuickSort w Haskellu c.d. Nagłówek funkcji wygląda tak: 1 q u i c k s o r t : : ( Ord a ) => [ a ] > [ a ] Warunek końca określa sytuację, kiedy do posortowania zostaje pusta lista (co jest równoznaczne z tym, że jest już posortowana): 1 q u i c k s o r t [ ] = [ ] Składnia funkcji i w języku Haskell

42 Marcin Wilk QuickSort w Haskellu c.d. Później przychodzi pora na główny algorytm, który działa w ten sposób: Elementy listy, które są mniejsze lub równe headowi są sortowane i umieszczane na początku listy, następnie wstawiany jest head, a po nim posortowane elementy większe lub równe headowi. Składnia funkcji i w języku Haskell

43 Marcin Wilk QuickSort w Haskellu c.d. Warto zaznaczyć, że w tym algorytmie sortowanie wykonywane jest dwukrotnie (dla elementów mniejszych i większych od head). Tak więc do użycia QuickSorta potrzebne będzie skorzystanie z rekurencji, która jest jednym z najważniejszych elementów programowania funkcyjnego. Do sprawdzenia, które elementy listy są większe, a które mniejsze od head zastosujemy porównanie dwóch list. Składnia funkcji i w języku Haskell

44 Marcin Wilk QuickSort w Haskellu c.d. Całość funkcji QuickSort w języku Haskell wygląda tak: 1 q u i c k s o r t : : ( Ord a ) => [ a ] > [ a ] 2 q u i c k s o r t [ ] = [ ] 3 q u i c k s o r t ( x : x s ) = 4 l e t s m a l l e r S o r t e d = q u i c k s o r t [ a a < x s, a <= x ] 5 b i g g e r S o r t e d = q u i c k s o r t [ a a < x s, a > x ] 6 i n s m a l l e r S o r t e d ++ [ x ] ++ b i g g e r S o r t e d Przykłady działania: 1 g h c i > q u i c k s o r t [ 1 0,2,5,3,1,6,7,4,2,3,4,8, 9 ] 2 [ 1,2,2,3,3,4,4,5,6,7,8,9, 1 0 ] 1 g h c i > q u i c k s o r t t h e q u i c k brown f o x jumps o v e r t h e l a z y dog 2 a b c d e e e f g h h i j k l m n o o o o p q r r s t t u u v w x y z Składnia funkcji i w języku Haskell

45 Marcin Wilk Myślenie rekurencyjne Chociaż wiele problemów można rozwiązać za pomocą stosowania rekurencji, istnieją także przypadki skrajne, w których użycie rekursji nie ma sensu. Na przykład: w przypadku list, takim skrajnym przypadkiem jest pusta lista, natomiast w przypadku drzewa będzie. To drzewo nie posiadające żadnych dzieci. Składnia funkcji i w języku Haskell

46 Marcin Wilk Myślenie rekurencyjne c.d. Na podobne przypadki można się natknąć podczas rekurencyjnego operowania na liczbach. Zazwyczaj dochodzi do tego przy stosowaniu funkcji działających na liczbach poddawanych modyfikacjom. Przykładem takiej funkcji jest silnia, która nie zadziała na rekurencyjnie na liczbach począwszy od zera, ponieważ silnię można obliczyć jedynie dla całkowitych liczb dodatnich. Składnia funkcji i w języku Haskell

47 Marcin Wilk Myślenie rekurencyjne c.d. Często również przypadkiem skrajnym może okazać się identyczność. Na przykład identycznością dla mnożenia jest liczba 1, ponieważ jakakolwiek liczba pomnożona przez 1 da tę samą liczbę. W przypadku sumowania list, sytuacją skrajną może być dodawanie pustej listy, której suma jest równa 0. Składnia funkcji i w języku Haskell

48 Marcin Wilk Myślenie rekurencyjne c.d. Podsumowując: Kiedy próbujemy rozwiązać rekurencyjnie jakiś problem, dobrze jest wiedzieć jakie są przypadki, w których nie da się dobrze zastosować rekurencji, żeby użyć ich jako przypadków skrajnych pomocnych w rozwiązaniu danego problemu. Składnia funkcji i w języku Haskell

49 Marcin Wilk Dziękujemy za uwagę. Składnia funkcji i w języku Haskell

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

REKURENCJA W JĘZYKU HASKELL. Autor: Walczak Michał REKURENCJA W JĘZYKU HASKELL Autor: Walczak Michał CZYM JEST REKURENCJA? Rekurencja zwana rekursją, polega na wywołaniu przez funkcję samej siebie. Algorytmy rekurencyjne zastępują w pewnym sensie iteracje.

Bardziej szczegółowo

Prezentacja o Haskell u(rozdział 3 i 4)

Prezentacja o Haskell u(rozdział 3 i 4) 9 marca 2017 Spis treści 1 2 Wprowadzenie Każda wartość jak i funkcja ma w haskellu ściśle określony typ. Jawne definiowanie typów nie jest konieczne, ponieważ Haskell sam rozpoznaje typ wartości. Warto

Bardziej szczegółowo

Typy, klasy typów, składnie w funkcji

Typy, klasy typów, składnie w funkcji Typy, klasy typów, składnie w funkcji Typy w Haskell Każde wyrażenie w Haskell posiada zdefiniowany typ. Dzięki temu już na etapie kompilacji kodu następuje sprawdzenie poprawności kodu i zabezpiecza nas

Bardziej szczegółowo

Rekurencja (rekursja)

Rekurencja (rekursja) Rekurencja (rekursja) Rekurencja wywołanie funkcji przez nią samą wewnątrz ciała funkcji. Rekurencja może być pośrednia funkcja jest wywoływana przez inną funkcję, wywołaną (pośrednio lub bezpośrednio)

Bardziej szczegółowo

Paradygmaty programowania

Paradygmaty programowania Paradygmaty programowania Jacek Michałowski, Piotr Latanowicz 15 kwietnia 2014 Jacek Michałowski, Piotr Latanowicz () Paradygmaty programowania 15 kwietnia 2014 1 / 12 Zadanie 1 Zadanie 1 Rachunek predykatów

Bardziej szczegółowo

Podstawy programowania funkcjonalnego

Podstawy programowania funkcjonalnego Podstawy programowania funkcjonalnego haskell.mariuszrozycki.pl Mariusz Różycki Churchill College, University of Cambridge rev. 2014.03.27.1 Wprowadzenie Materiały haskell.mariuszrozycki.pl Slajdy (w tym

Bardziej szczegółowo

Zaawansowane algorytmy i struktury danych

Zaawansowane algorytmy i struktury danych Zaawansowane algorytmy i struktury danych u dr Barbary Marszał-Paszek Opracowanie pytań praktycznych z egzaminów. Strona 1 z 12 Pytania praktyczne z kolokwium zaliczeniowego z 19 czerwca 2014 (studia dzienne)

Bardziej szczegółowo

HASKELL 2 R O Z D Z I A Ł 4 SKŁADNIA W FUNKCJACH R O Z D Z I A Ł 5 REKURENCJA. Learn You a Haskell for Great Good! Miran Lipovac

HASKELL 2 R O Z D Z I A Ł 4 SKŁADNIA W FUNKCJACH R O Z D Z I A Ł 5 REKURENCJA. Learn You a Haskell for Great Good! Miran Lipovac HASKELL 2 R O Z D Z I A Ł 4 SKŁADNIA W FUNKCJACH R O Z D Z I A Ł 5 REKURENCJA Learn You a Haskell for Great Good! Miran Lipovac ROZDZIAŁ 4 ODNAJDYWANIE WZORCA (P ATTERN MATCHING) CZYM JEST PATTERN MATCHING?

Bardziej szczegółowo

ALGORYTMY I STRUKTURY DANYCH

ALGORYTMY I STRUKTURY DANYCH KATEDRASYSTEMÓWOBLICZENIOWYCH ALGORYTMY I STRUKTURY DANYCH 1.Rekurencja Rekurencja inaczej rekursja (ang. recursion) to wywołanie z poziomu metody jej samej. Programowanie z wykorzytaniem rekurencji pozwala

Bardziej szczegółowo

Strategia "dziel i zwyciężaj"

Strategia dziel i zwyciężaj Strategia "dziel i zwyciężaj" W tej metodzie problem dzielony jest na kilka mniejszych podproblemów podobnych do początkowego problemu. Problemy te rozwiązywane są rekurencyjnie, a następnie rozwiązania

Bardziej szczegółowo

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

Podstawy programowania. Wykład: 13. Rekurencja. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD Podstawy programowania Wykład: 13 Rekurencja 1 dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD Podstawy programowania Rekurencja - pojęcie 2 Rekurencja - pojęcie Rekurencja (rekursja) wywołanie

Bardziej szczegółowo

Analiza algorytmów zadania podstawowe

Analiza algorytmów zadania podstawowe Analiza algorytmów zadania podstawowe Zadanie 1 Zliczanie Zliczaj(n) 1 r 0 2 for i 1 to n 1 3 do for j i + 1 to n 4 do for k 1 to j 5 do r r + 1 6 return r 0 Jaka wartość zostanie zwrócona przez powyższą

Bardziej szczegółowo

Programowanie Funkcyjne. Marcin Kubica Świder,

Programowanie Funkcyjne. Marcin Kubica Świder, Programowanie Funkcyjne Marcin Kubica Świder, 28-04-2015 Czym jest programowanie funkcyjne? Obliczalne pojęcia matematyczne. Definicje stałych i funkcji i relacji. Wszystkie definicje są konstruktywne,

Bardziej szczegółowo

- nawiasy kwadratowe oznaczają, że to lista

- nawiasy kwadratowe oznaczają, że to lista Haskell jest statycznym typem języka: - wszystkie typy i wyrażenia są znane w czasie kompilacji ( zwiększa to bezpieczeństwo kodu). Podawanie typów zmiennych i argumentów funkcji jest zbędne, gdyż Haskel

Bardziej szczegółowo

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

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja

Bardziej szczegółowo

Języki programowania zasady ich tworzenia

Języki programowania zasady ich tworzenia Strona 1 z 18 Języki programowania zasady ich tworzenia Definicja 5 Językami formalnymi nazywamy każdy system, w którym stosując dobrze określone reguły należące do ustalonego zbioru, możemy uzyskać wszystkie

Bardziej szczegółowo

; B = Wykonaj poniższe obliczenia: Mnożenia, transpozycje etc wykonuję programem i przepisuję wyniki. Mam nadzieję, że umiesz mnożyć macierze...

; B = Wykonaj poniższe obliczenia: Mnożenia, transpozycje etc wykonuję programem i przepisuję wyniki. Mam nadzieję, że umiesz mnożyć macierze... Tekst na niebiesko jest komentarzem lub treścią zadania. Zadanie. Dane są macierze: A D 0 ; E 0 0 0 ; B 0 5 ; C Wykonaj poniższe obliczenia: 0 4 5 Mnożenia, transpozycje etc wykonuję programem i przepisuję

Bardziej szczegółowo

Teoretyczne podstawy informatyki

Teoretyczne podstawy informatyki Teoretyczne podstawy informatyki Wykład 4a: Rozwiązywanie rekurencji http://kiwi.if.uj.edu.pl/~erichter/dydaktyka2010/tpi-2010 Prof. dr hab. Elżbieta Richter-Wąs 1 Czas działania programu Dla konkretnych

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania Wstęp do programowania Rekurencja, metoda dziel i zwyciężaj Paweł Daniluk Wydział Fizyki Jesień 2014 P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 1 / 27 Rekurencja Recursion See Recursion. P. Daniluk(Wydział

Bardziej szczegółowo

Podstawy Programowania C++

Podstawy Programowania C++ Wykład 3 - podstawowe konstrukcje Instytut Automatyki i Robotyki Warszawa, 2014 Wstęp Plan wykładu Struktura programu, instrukcja przypisania, podstawowe typy danych, zapis i odczyt danych, wyrażenia:

Bardziej szczegółowo

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

Opis zagadnieo 1-3. Iteracja, rekurencja i ich realizacja Opis zagadnieo 1-3 Iteracja, rekurencja i ich realizacja Iteracja Iteracja to czynnośd powtarzania (najczęściej wielokrotnego) tej samej instrukcji (albo wielu instrukcji) w pętli. Mianem iteracji określa

Bardziej szczegółowo

Rekurencja. Przykład. Rozważmy ciąg

Rekurencja. Przykład. Rozważmy ciąg Rekurencja Definicje rekurencyjne Definicja: Mówimy, iż ciąg jest zdefiniowany rekurencyjnie, jeżeli: (P) Określony jest pewien skończony zbiór wyrazów tego ciągu, zwykle jest to pierwszy wyraz tego ciągu

Bardziej szczegółowo

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Pętle. Programowanie komputerowe

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Pętle. Programowanie komputerowe Wydział Zarządzania AGH Katedra Informatyki Stosowanej Pętle 1 Program wykładu Pojęcie pętli Pętla FOR Pętla DO LOOP Pętle zagnieżdżone 2 Pojęcie pętli Suma lub iloczyn dowolnych n liczb wprowadzanych

Bardziej szczegółowo

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH ĆWICZENIE NR 9 WYRAŻENIA LOGICZNE, INSTRUKCJE WARUNKOWE I INSTRUKCJE ITERACYJNE W PROGRAMIE KOMPUTEROWYM MATLAB Dr inż. Sergiusz Sienkowski ĆWICZENIE NR

Bardziej szczegółowo

Bloki anonimowe w PL/SQL

Bloki anonimowe w PL/SQL Język PL/SQL PL/SQL to specjalny język proceduralny stosowany w bazach danych Oracle. Język ten stanowi rozszerzenie SQL o szereg instrukcji, znanych w proceduralnych językach programowania. Umożliwia

Bardziej szczegółowo

Blockly Kodowanie pomoc.

Blockly Kodowanie pomoc. 1 Blockly Kodowanie pomoc. Słowniczek: Zmienna posiada nazwę wywoływaną w programie oraz miejsce na przechowywanie wartości. Instrukcja warunkowa pozwala na wykonanie instrukcji w zależności od warunku

Bardziej szczegółowo

Algorytmy i struktury danych

Algorytmy i struktury danych Algorytmy i struktury danych 4. Łódź 2018 Suma szeregu harmonicznego - Wpisz kod programu w oknie edycyjnym - Zapisz kod w pliku harmonic.py - Uruchom skrypt (In[1]: run harmonic.py) - Ten program wykorzystuje

Bardziej szczegółowo

Języki programowania Haskell

Języki programowania Haskell Języki programowania Haskell zadanie projektowe nr. 4 2014/15 K. Turowski, T. Goluch 1. Kompilacja, uruchamianie i Hello world Kompilacja i uruchamianie: ghc --make hello.hs./hello Interaktywny interpreter:

Bardziej szczegółowo

Programowanie funkcyjne wprowadzenie Specyfikacje formalne i programy funkcyjne

Programowanie funkcyjne wprowadzenie Specyfikacje formalne i programy funkcyjne Programowanie funkcyjne wprowadzenie Specyfikacje formalne i programy funkcyjne dr inż. Marcin Szlenk Politechnika Warszawska Wydział Elektroniki i Technik Informacyjnych m.szlenk@elka.pw.edu.pl Paradygmaty

Bardziej szczegółowo

TEORETYCZNE PODSTAWY INFORMATYKI

TEORETYCZNE PODSTAWY INFORMATYKI 1 TEORETYCZNE PODSTAWY INFORMATYKI 16/01/2017 WFAiS UJ, Informatyka Stosowana I rok studiów, I stopień Repetytorium złożoność obliczeniowa 2 Złożoność obliczeniowa Notacja wielkie 0 Notacja Ω i Θ Rozwiązywanie

Bardziej szczegółowo

Programowanie strukturalne i obiektowe. Funkcje

Programowanie strukturalne i obiektowe. Funkcje Funkcje Często w programach spotykamy się z sytuacją, kiedy chcemy wykonać określoną czynność kilka razy np. dodać dwie liczby w trzech miejscach w programie. Oczywiście moglibyśmy to zrobić pisząc trzy

Bardziej szczegółowo

Definicja. Ciąg wejściowy: Funkcja uporządkowująca: Sortowanie polega na: a 1, a 2,, a n-1, a n. f(a 1 ) f(a 2 ) f(a n )

Definicja. Ciąg wejściowy: Funkcja uporządkowująca: Sortowanie polega na: a 1, a 2,, a n-1, a n. f(a 1 ) f(a 2 ) f(a n ) SORTOWANIE 1 SORTOWANIE Proces ustawiania zbioru elementów w określonym porządku. Stosuje się w celu ułatwienia późniejszego wyszukiwania elementów sortowanego zbioru. 2 Definicja Ciąg wejściowy: a 1,

Bardziej szczegółowo

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

Podstawy programowania 2. Temat: Funkcje i procedury rekurencyjne. Przygotował: mgr inż. Tomasz Michno Instrukcja laboratoryjna 6 Podstawy programowania 2 Temat: Funkcje i procedury rekurencyjne Przygotował: mgr inż. Tomasz Michno Wstęp teoretyczny Rekurencja (inaczej nazywana rekursją, ang. recursion)

Bardziej szczegółowo

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno Instrukcja laboratoryjna 5 Podstawy programowania 2 Temat: Drzewa binarne Przygotował: mgr inż. Tomasz Michno 1 Wstęp teoretyczny Drzewa są jedną z częściej wykorzystywanych struktur danych. Reprezentują

Bardziej szczegółowo

Szablony funkcji i klas (templates)

Szablony funkcji i klas (templates) Instrukcja laboratoryjna nr 3 Programowanie w języku C 2 (C++ poziom zaawansowany) Szablony funkcji i klas (templates) dr inż. Jacek Wilk-Jakubowski mgr inż. Maciej Lasota dr inż. Tomasz Kaczmarek Wstęp

Bardziej szczegółowo

Podstawy Programowania Podstawowa składnia języka C++

Podstawy Programowania Podstawowa składnia języka C++ Podstawy Programowania Podstawowa składnia języka C++ Katedra Analizy Nieliniowej, WMiI UŁ Łódź, 3 października 2013 r. Szablon programu w C++ Najprostszy program w C++ ma postać: #include #include

Bardziej szczegółowo

Definicje wyższego poziomu

Definicje wyższego poziomu Definicje wyższego poziomu Interpreter Scheme-a nie będzie narzekad w przypadku wystąpienia niezdefionowanej zmiennej w ciele wyrażenia lambda dopóki nie będzie zastosowana Przykład braku informacji o

Bardziej szczegółowo

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

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 i cz. 2 Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 i cz. 2 2 i cz. 2 3 Funkcje i cz. 2 typ nazwa ( lista-parametrów ) { deklaracje instrukcje } i cz. 2 typ nazwa ( lista-parametrów ) { deklaracje

Bardziej szczegółowo

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie. Część XXII C++ w Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie. Ćwiczenie 1 1. Utwórz nowy projekt w Dev C++ i zapisz go na

Bardziej szczegółowo

W przeciwnym wypadku wykonaj instrukcję z bloku drugiego. Ćwiczenie 1 utworzyć program dzielący przez siebie dwie liczby

W przeciwnym wypadku wykonaj instrukcję z bloku drugiego. Ćwiczenie 1 utworzyć program dzielący przez siebie dwie liczby Część XI C++ W folderze nazwisko36 program za każdym razem sprawdza oba warunki co niepotrzebnie obciąża procesor. Ten problem można rozwiązać stosując instrukcje if...else Instrukcja if wykonuje polecenie

Bardziej szczegółowo

Algorytmy sortujące i wyszukujące

Algorytmy sortujące i wyszukujące Algorytmy sortujące i wyszukujące Zadaniem algorytmów sortujących jest ułożenie elementów danego zbioru w ściśle określonej kolejności. Najczęściej wykorzystywany jest porządek numeryczny lub leksykograficzny.

Bardziej szczegółowo

Zaawansowane algorytmy i struktury danych

Zaawansowane algorytmy i struktury danych Zaawansowane algorytmy i struktury danych u dr Barbary Marszał-Paszek Opracowanie pytań teoretycznych z egzaminów. Strona 1 z 12 Pytania teoretyczne z egzaminu pisemnego z 25 czerwca 2014 (studia dzienne)

Bardziej szczegółowo

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie Część X C++ Typ znakowy służy do reprezentacji pojedynczych znaków ASCII, czyli liter, cyfr, znaków przestankowych i innych specjalnych znaków widocznych na naszej klawiaturze (oraz wielu innych, których

Bardziej szczegółowo

Podstawą w systemie dwójkowym jest liczba 2 a w systemie dziesiętnym liczba 10.

Podstawą w systemie dwójkowym jest liczba 2 a w systemie dziesiętnym liczba 10. ZAMIANA LICZB MIĘDZY SYSTEMAMI DWÓJKOWYM I DZIESIĘTNYM Aby zamienić liczbę z systemu dwójkowego (binarnego) na dziesiętny (decymalny) należy najpierw przypomnieć sobie jak są tworzone liczby w ww systemach

Bardziej szczegółowo

Matlab Składnia + podstawy programowania

Matlab Składnia + podstawy programowania Matlab Składnia + podstawy programowania Matlab Matrix Laboratory środowisko stworzone z myślą o osobach rozwiązujących problemy matematyczne, w których operuje się na danych stanowiących wielowymiarowe

Bardziej szczegółowo

Podstawowe algorytmy i ich implementacje w C. Wykład 9

Podstawowe algorytmy i ich implementacje w C. Wykład 9 Wstęp do programowania 1 Podstawowe algorytmy i ich implementacje w C Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 9 Element minimalny i maksymalny zbioru Element minimalny

Bardziej szczegółowo

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

FUNKCJA REKURENCYJNA. function s(n:integer):integer; begin if (n>1) then s:=n*s(n-1); else s:=1; end; Rekurencja Wykład: rekursja, funkcje rekurencyjne, wywołanie samej siebie, wyznaczanie poszczególnych liczb Fibonacciego, potęgowanie, algorytm Euklidesa REKURENCJA Rekurencja (z łac. recurrere), zwana

Bardziej szczegółowo

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char Programowanie C++ Informacje wstępne #include - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char = -128 do 127, unsigned char = od

Bardziej szczegółowo

Podstawy i języki programowania

Podstawy i języki programowania Podstawy i języki programowania Laboratorium 3 - operatory oraz instrukcje warunkowe i wyboru mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 19 października 2018 1 / 35 mgr inż. Krzysztof

Bardziej szczegółowo

Programowanie komputerowe. Zajęcia 3

Programowanie komputerowe. Zajęcia 3 Programowanie komputerowe Zajęcia 3 Instrukcje przypisania Poza zwykłą instrukcją przypisania, powodującą ustawienie wartości zmiennej na podane wyrażenie, istnieje wiele innych, np. += dodaj, a+=b jest

Bardziej szczegółowo

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?

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ęść XVIII C++ Funkcje 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? Umiemy już podzielić nasz

Bardziej szczegółowo

5. Rekurencja. Przykłady

5. Rekurencja. Przykłady 5. Rekurencja Uwaga! W tym rozdziale nie są omówione żadne nowe konstrukcje języka C++. Omówiona jest za to technika wykorzystująca funkcje, która pozwala na rozwiązanie pewnych nowych rodzajów zadań.

Bardziej szczegółowo

Rekurencja. Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów.

Rekurencja. Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów. Rekurencja Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów. Zgodnie ze znaczeniem informatycznym algorytm rekurencyjny to taki który korzysta z samego

Bardziej szczegółowo

Programowanie - wykład 4

Programowanie - wykład 4 Programowanie - wykład 4 Filip Sośnicki Wydział Fizyki Uniwersytet Warszawski 20.03.2019 Przypomnienie Prosty program liczący i wyświeltający wartość silni dla wprowadzonej z klawiatury liczby: 1 # include

Bardziej szczegółowo

Algorytm. a programowanie -

Algorytm. a programowanie - Algorytm a programowanie - Program komputerowy: Program komputerowy można rozumieć jako: kod źródłowy - program komputerowy zapisany w pewnym języku programowania, zestaw poszczególnych instrukcji, plik

Bardziej szczegółowo

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI Wprowadzenie do środowiska Matlab 1. Podstawowe informacje Przedstawione poniżej informacje maja wprowadzić i zapoznać ze środowiskiem

Bardziej szczegółowo

Konstrukcje warunkowe Pętle

Konstrukcje warunkowe Pętle * Konstrukcje warunkowe Pętle *Instrukcja if sposób na sprawdzanie warunków *Konstrukcja: if(warunek) else { instrukcje gdy warunek spełniony} {instrukcje gdy warunek NIE spełniony} * 1. Wylicz całkowity

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania wykład 8 Agata Półrola Wydział Matematyki i Informatyki UŁ semestr zimowy 2018/2019 Podprogramy Czasami wygodnie jest wyodrębnić jakiś fragment programu jako pewną odrębną całość umożliwiają to podprogramy.

Bardziej szczegółowo

Wskazówki dotyczące zmiennych, tablic i procedur 1

Wskazówki dotyczące zmiennych, tablic i procedur 1 Wskazówki dotyczące zmiennych, tablic i procedur 1 Spis treści 1. Tworzenie zmiennych i tablic 1 2. Procedury i zmienne, przekazywanie zmiennych do procedur 5 3. Zakończenie działania procedury 9 1. Tworzenie

Bardziej szczegółowo

Wstęp do Programowania potok funkcyjny

Wstęp do Programowania potok funkcyjny i programowanie dynamiczne Wstęp do Programowania potok funkcyjny Marcin Kubica 2010/2011 i programowanie dynamiczne Outline 1 i programowanie dynamiczne i programowanie dynamiczne Rekurencyjny zapis rozwiązania

Bardziej szczegółowo

4. Funkcje. Przykłady

4. Funkcje. Przykłady 4. Funkcje Przykłady 4.1. Napisz funkcję kwadrat, która przyjmuje jeden argument: długość boku kwadratu i zwraca pole jego powierzchni. Używając tej funkcji napisz program, który obliczy pole powierzchni

Bardziej szczegółowo

Programowanie obiektowe i C++ dla matematyków

Programowanie obiektowe i C++ dla matematyków Programowanie obiektowe i C++ dla matematyków Bartosz Szreder szreder (at) mimuw... 04 X 2011 Wszelkie uwagi, poprawki, braki czy sugestie najlepiej wysyłać na maila. 1. wprowadzenie do Linuksa: kompilacja

Bardziej szczegółowo

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

Komentarze w PHP (niewykonywane fragmenty tekstowe, będące informacją dla programisty) Komentarze w PHP (niewykonywane fragmenty tekstowe, będące informacją dla programisty) // to jest pojedynczy komentarz (1-linijkowy) to jest wielolinijkowy komentarz Budowa "czystego" skryptu PHP (tak

Bardziej szczegółowo

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych 1. Wstawianie skryptu na stroną: Laboratorium 1 Do umieszczenia skryptów na stronie służy znacznik: //dla HTML5 ...instrukcje skryptu //dla HTML4 ...instrukcje

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

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

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018 Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy

Bardziej szczegółowo

Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny Algorytm to przepis; zestawienie kolejnych kroków prowadzących do wykonania określonego zadania; to uporządkowany sposób postępowania przy rozwiązywaniu zadania, problemu, z uwzględnieniem opisu danych

Bardziej szczegółowo

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

Język C, tablice i funkcje (laboratorium, EE1-DI) Język C, tablice i funkcje (laboratorium, EE1-DI) Opracował: Tomasz Mączka (tmaczka@kia.prz.edu.pl) Wstęp (tablice) Tablica to uporządkowany ciąg elementów tego samego typu, zajmujących ciągły obszar pamięci.

Bardziej szczegółowo

Zapisywanie algorytmów w języku programowania

Zapisywanie algorytmów w języku programowania Temat C5 Zapisywanie algorytmów w języku programowania Cele edukacyjne Zrozumienie, na czym polega programowanie. Poznanie sposobu zapisu algorytmu w postaci programu komputerowego. Zrozumienie, na czym

Bardziej szczegółowo

Sortowanie danych. Jolanta Bachan. Podstawy programowania

Sortowanie danych. Jolanta Bachan. Podstawy programowania Sortowanie danych Podstawy programowania 2013-06-06 Sortowanie przez wybieranie 9 9 9 9 9 9 10 7 7 7 7 7 10 9 1 3 3 4 10 7 7 10 10 10 10 4 4 4 4 4 4 3 3 3 3 2 2 2 2 2 2 2 3 1 1 1 1 1 1 Gurbiel et al. 2000

Bardziej szczegółowo

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

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje. Podstawowe elementy proceduralne w C++ Program i wyjście Zmienne i arytmetyka Wskaźniki i tablice Testy i pętle Funkcje Pierwszy program // Niezbędne zaklęcia przygotowawcze ;-) #include using

Bardziej szczegółowo

1 Powtórzenie wiadomości

1 Powtórzenie wiadomości 1 Powtórzenie wiadomości Zadanie 1 Napisać program, który w trybie dialogu z użytkownikiem przyjmie liczbę całkowitą, a następnie wyświetli informację czy jest to liczba parzysta czy nieparzysta oraz czy

Bardziej szczegółowo

1 Wprowadzenie do algorytmiki

1 Wprowadzenie do algorytmiki Teoretyczne podstawy informatyki - ćwiczenia: Prowadzący: dr inż. Dariusz W Brzeziński 1 Wprowadzenie do algorytmiki 1.1 Algorytm 1. Skończony, uporządkowany ciąg precyzyjnie i zrozumiale opisanych czynności

Bardziej szczegółowo

ALGORYTMY Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

ALGORYTMY Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny ALGORYMY Algorytm to przepis; zestawienie kolejnych kroków prowadzących do wykonania określonego zadania; to uporządkowany sposób postępowania przy rozwiązywaniu zadania, problemu, z uwzględnieniem opisu

Bardziej szczegółowo

Zapis algorytmów: schematy blokowe i pseudokod 1

Zapis algorytmów: schematy blokowe i pseudokod 1 Zapis algorytmów: schematy blokowe i pseudokod 1 Przed przystąpieniem do napisania kodu programu należy ten program najpierw zaprojektować. Projekt tworzącego go algorytmu może być zapisany w formie schematu

Bardziej szczegółowo

Wstęp do programowania. Dziel i rządź. Piotr Chrząstowski-Wachtel

Wstęp do programowania. Dziel i rządź. Piotr Chrząstowski-Wachtel Wstęp do programowania Dziel i rządź Piotr Chrząstowski-Wachtel Divide et impera Starożytni Rzymianie znali tę zasadę Łatwiej się rządzi, jeśli poddani są podzieleni Nie chodziło im jednak bynajmniej o

Bardziej szczegółowo

Instrukcje sterujące

Instrukcje sterujące Podstawy programowania w C++ Bibliografia: Instrukcje sterujące Nauka programowania dla początkujących; A. Struzińska-Walczak / K. Walczak CPA: PROGRAMMING ESSENTIALS IN C++ https://www.netacad.com Opracował:

Bardziej szczegółowo

Metody Kompilacji Wykład 7 Analiza Syntaktyczna

Metody Kompilacji Wykład 7 Analiza Syntaktyczna Metody Kompilacji Wykład 7 Analiza Syntaktyczna Parsowanie Parsowanie jest to proces określenia jak ciąg terminali może być generowany przez gramatykę. Włodzimierz Bielecki WI ZUT 2/57 Parsowanie Dla każdej

Bardziej szczegółowo

Programowanie - instrukcje sterujące

Programowanie - instrukcje sterujące Instytut Informatyki Uniwersytetu Śląskiego Laborki środowisko NetBeans, tworzenie nowego projektu; okno projekty; główne okno programu; package - budowanie paczek z klas; public class JavaApplication

Bardziej szczegółowo

Liczby losowe i pętla while w języku Python

Liczby losowe i pętla while w języku Python Liczby losowe i pętla while w języku Python Mateusz Miotk 17 stycznia 2017 Instytut Informatyki UG 1 Generowanie liczb losowych Na ogół programy są spójne i prowadzą do przewidywanych wyników. Czasem jednak

Bardziej szczegółowo

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe Algorytmy i złożoności Wykład 3. Listy jednokierunkowe Wstęp. Lista jednokierunkowa jest strukturą pozwalającą na pamiętanie danych w postaci uporzadkowanej, a także na bardzo szybkie wstawianie i usuwanie

Bardziej szczegółowo

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

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy. PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy. 1. Instrukcję case t of... w przedstawionym fragmencie programu moŝna zastąpić: var t : integer; write( Podaj

Bardziej szczegółowo

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

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński WYKŁAD 8 Funkcje i algorytmy rekurencyjne Proste przykłady Programy: c3_1.c..., c3_6.c Tomasz Zieliński METODY REKURENCYJNE (1) - program c3_1 ======================================================================================================

Bardziej szczegółowo

Informacja o języku. Osadzanie skryptów. Instrukcje, komentarze, zmienne, typy, stałe. Operatory. Struktury kontrolne. Tablice.

Informacja o języku. Osadzanie skryptów. Instrukcje, komentarze, zmienne, typy, stałe. Operatory. Struktury kontrolne. Tablice. Informacja o języku. Osadzanie skryptów. Instrukcje, komentarze, zmienne, typy, stałe. Operatory. Struktury kontrolne. Tablice. Język PHP Język interpretowalny, a nie kompilowany Powstał w celu programowania

Bardziej szczegółowo

Wstęp do programowania. Listy. Piotr Chrząstowski-Wachtel

Wstęp do programowania. Listy. Piotr Chrząstowski-Wachtel Wstęp do programowania Listy Piotr Chrząstowski-Wachtel Do czego stosujemy listy? Listy stosuje się wszędzie tam, gdzie występuje duży rozrzut w możliwym rozmiarze danych, np. w reprezentacji grafów jeśli

Bardziej szczegółowo

Funkcje i tablice. Elwira Wachowicz. 23 maja 2013

Funkcje i tablice. Elwira Wachowicz. 23 maja 2013 Funkcje i tablice Elwira Wachowicz elwira@ifd.uni.wroc.pl 23 maja 2013 Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Funkcje i tablice 23 maja 2013 1 / 22 Największy wspólny dzielnik: algorytm Euklidesa Problem:

Bardziej szczegółowo

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek]. ABAP/4 Instrukcja IF Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek]. [ELSEIF warunek. ] [ELSE. ] ENDIF. gdzie: warunek dowolne wyrażenie logiczne o wartości

Bardziej szczegółowo

Cw.12 JAVAScript w dokumentach HTML

Cw.12 JAVAScript w dokumentach HTML Cw.12 JAVAScript w dokumentach HTML Wstawienie skryptu do dokumentu HTML JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.skrypty Java- Script mogą być zagnieżdżane

Bardziej szczegółowo

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

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD programowania Wykład: 4 Instrukcje sterujące, operatory 1 programowania w C++ Instrukcje sterujące 2 Pętla for for ( instrukcja_ini ; wyrazenie_warunkowe ; instrukcja_krok ) tresc_petli ; instrukcja_ini

Bardziej szczegółowo

Algorytm selekcji Hoare a. Łukasz Miemus

Algorytm selekcji Hoare a. Łukasz Miemus Algorytm selekcji Hoare a Łukasz Miemus 1 lutego 2006 Rozdział 1 O algorytmie 1.1 Problem Mamy tablicę A[N] różnych elementów i zmienną int K, takie że 1 K N. Oczekiwane rozwiązanie to określenie K-tego

Bardziej szczegółowo

Laboratorium nr 1. i 2.

Laboratorium nr 1. i 2. Laboratorium nr 1. i 2. Celem laboratorium jest zapoznanie się ze zintegrowanym środowiskiem programistycznym, na przykładzie podstawowych aplikacji z obsługą standardowego wejścia wyjścia, podstawowych

Bardziej szczegółowo

Algorytmy i Struktury Danych, 2. ćwiczenia

Algorytmy i Struktury Danych, 2. ćwiczenia Algorytmy i Struktury Danych, 2. ćwiczenia 2015-10-09 Spis treści 1 Szybkie potęgowanie 1 2 Liczby Fibonacciego 2 3 Dowód, że n 1 porównań jest potrzebne do znajdowania minimum 2 4 Optymalny algorytm do

Bardziej szczegółowo

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania 1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja nie ma parametru i zwraca wartość na zewnątrz. nie ma parametru i nie zwraca wartości na zewnątrz. ma parametr o nazwie void i zwraca

Bardziej szczegółowo

6. Pętle while. Przykłady

6. Pętle while. Przykłady 6. Pętle while Przykłady 6.1. Napisz program, który, bez użycia rekurencji, wypisze na ekran liczby naturalne od pewnego danego n do 0 włącznie, w kolejności malejącej, po jednej liczbie na linię. Uwaga!

Bardziej szczegółowo

LibreOffice Calc VBA

LibreOffice Calc VBA LibreOffice Calc VBA LibreOffice Calc umożliwia tworzenie własnych funkcji i procedur przy użyciu składni języka VBA. Dostęp do edytora makr: Narzędzia->Makra->Zarządaj makrami->libreoffice Calc Aby rozpocząć

Bardziej szczegółowo

Instrukcje pętli przykłady. Odgadywanie hasła. 1) Program pyta o hasło i podaje adres, gdy hasło poprawne lub komunikat o błędnym haśle.

Instrukcje pętli przykłady. Odgadywanie hasła. 1) Program pyta o hasło i podaje adres, gdy hasło poprawne lub komunikat o błędnym haśle. Instrukcje pętli przykłady. Odgadywanie hasła. 1) Program pyta o hasło i podaje adres, gdy hasło poprawne lub komunikat o błędnym haśle. Sub Hasla1() Dim wzor_hasla As String Dim haslo As String Dim adres

Bardziej szczegółowo

Bash - wprowadzenie. Bash - wprowadzenie 1/39

Bash - wprowadzenie. Bash - wprowadzenie 1/39 Bash - wprowadzenie Bash - wprowadzenie 1/39 Bash - wprowadzenie 2/39 Czym jest bash? Rysunek : Zadanie powłoki to ukrycie wywołań systemowych Bash - wprowadzenie 3/39 Czym jest bash? Przykład polecenia:

Bardziej szczegółowo

Metody numeryczne Laboratorium 2

Metody numeryczne Laboratorium 2 Metody numeryczne Laboratorium 2 1. Tworzenie i uruchamianie skryptów Środowisko MATLAB/GNU Octave daje nam możliwość tworzenia skryptów czyli zapisywania grup poleceń czy funkcji w osobnym pliku i uruchamiania

Bardziej szczegółowo