HASKELL. Higher order functions, Modules. Janusz Bugajny Piotr Rogulski Łukasz Antoszkiewicz

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

Download "HASKELL. Higher order functions, Modules. Janusz Bugajny Piotr Rogulski Łukasz Antoszkiewicz"

Transkrypt

1 HASKELL Higher order functions, Modules Janusz Bugajny Piotr Rogulski Łukasz Antoszkiewicz

2 Higher order functions Funkcje wyższego rzędu

3 Funkcja wyższego rzędu funkcja, która spełnia przynajmniej jeden z Przyjmuje jedną lub więcej funkcji jako parametr dwóch warunków: Zwraca funkcję

4 Funkcje wyższego rzędu są podstawowym elementem programowania funkcyjnego! Jeżeli chcemy definiowad tylko wynik działania naszego programu, a nie jego konkretne kroki i stany jak w tradycyjnym programowaniu, szybko przekonamy się, że funkcje wyższego rzędu są niezastąpione to technika bardzo przydatna w rozwiązywaniu problemów.

5 Curried functions Oficjalnie, każda funkcja w Haskellu przyjmuje tylko jeden parametr. Oczywiście programista może zdefiniowad funkcję z wieloma parametrami, ale wtedy pod spodem tworzy się tak naprawdę kilka funkcji, z których każda przyjmuje po jednym parametrze. Funkcje z więcej niż jednym parametrem to tzw. funkcje rozwijane curried functions. Termin ten pochodzi od nazwiska amerykaoskiego logika Haskella Curry ego (na jego cześd zostały też nazwane języki Haskell i Curry)

6 Curried functions - przykład Napiszmy prostą funkcję zwracającą iloczyn trzech liczb multthree :: ( Num a) => a -> a -> a -> a multthree x y z = x * y * z Pamiętajmy, że możemy wywoład metodę ze zbyt małą liczbą parametrów (uzyskujemy wtedy efekt podobny przeciążania metod albo ustalenia parametrów domyślnych w C++/Javie/C#) Zapis multthree jest jednoznaczy z ((multthree 3) 5) 9 Na początku do funkcji jest przekazywana liczba 3. Tworzy to funkcję, która przyjmie jeden parametr i przemnoży go przez 3. Potem przekazywana jest 5. Ponownie tworzona jest funkcja, która przyjmuje jeden parametr i przemnoży go przez 15 (3*5). Do tej drugiej funkcji przekazywana jest 9 i zwrócony jest wynik 135.

7 Curried functions przykład c.d. Typ naszej funkcji równie dobrze więc mógłby byd zapisany w ten sposób: multthree :: ( Num a) => a -> (a -> (a -> a)) Przed każdym -> występuje typ przyjmowany, a po nim typ zwracany Nasza funkcja zatem przyjmuje jakiś typ liczbowy a i zwraca funkcję typu (Num a) =>a -> (a -> a). Analogicznie, ta funkcja bierze a i zwraca funkcję typu (Num a) =>a -> a. A ta ostatnia funkcja po prostu bierze a i zwraca a.

8 Curried functions przykład 2 Rozważmy prostą funkcję dzielenia liczby przez 10. dividebyten :: (Floating a) => a -> a dividebyten x = x/10 Okazuje się, że dokładnie ten sam efekt możemy osiągnąd nie podając w ogóle parametru do deklaracji funkcji dividebyten = (/10) Co to za czary?

9 Curried functions przykład 2 c.d. Otóż zapis (/10) zwraca nam nie liczbę, a funkcję dzielenia przez 10 Inaczej mówiąc, stworzyliśmy sobie nową funkcję dzielenia, w której po prawej stronie dzielnika będzie 10, a drugi argument jest dostarczany przy wowływaniu funkcji dividebyten. Main> dividebyten

10 Higher-orderism in action Funkcje mogą przyjmowad funkcje jako parametr i zwracad funkcje. Przykład: funkcja która przyjmuje funkcję i aplikuje ją dwukrotnie do czegoś applytwice :: (a -> a) -> a -> a applytwice f x = f (f x) Pierwszy parametr jest funkcją, która przyjmuje coś i zwraca ten sam typ (dlatego jest w nawiasach) Drugi parametr też musi byd tego samego typu, abyśmy mogli zaaplikowad do niego funkcję z pierwszego parametru Typ zwracany to również ten sam typ. *Main> applytwice (+10) 10 30

11 Higher-orderism c.d. funkcja zipwith Ciekawym przykładem jest standardowa funkcja zipwith zipwith ' :: (a -> b -> c) -> [a] -> [b] -> [c] zipwith ' _ [] _ = [] zipwith ' [] = [] zipwith ' f (x:xs) (y:ys) = f x y : zipwith ' f xs ys Pierwszym parametrem jest funkcja która dostaje dwa cosie i zwraca trzeci typ. Mogą to byd trzy te same typy, ale nie muszą. Jeśli w deklaracji mamy a -> b -> c, to zaakceptowana zostanie też funkcja typu a -> a -> a, ale nie odwrotnie! Drugi parametr to lista typu a, ponieważ funkcja łącząca przyjmuje a jako pierwszy parametr. Trzeci to lista b, ponieważ funkcja łącząca przyjmuje b jako drugi parametr. Rezultatem jest lista c.

12 zipwith przykłady użycia ghci > zipwith ' (+) [4,2,5,6] [2,6,2,3] [6,8,7,9] ghci > zipwith ' max [6,3,2,1] [7,3,1,5] [7,3,2,5] ghci > zipwith ' (++) ["foo ", " bar ", " baz "] [" fighters ", "hoppers "," aldrin "] [" foo fighters ","bar hoppers "," baz aldrin "] ghci > zipwith ' (*) ( replicate 5 2) [1..] [2,4,6,8,10] ghci > zipwith ' ( zipwith ' (*)) [[1,2,3],[3,5,6],[2,3,4]] [[3,2,2],[3,4,5],[5,4,3]] [[3,4,6],[9,20,30],[10,12,12]]

13 zipwith c.d. Jak widzimy, pojedyncza funkcja wyższego rzędu może mied bardzo wiele zastosowao. Programowanie funkcyjne używa funkcji wyższego rzędu aby wyabstrahowad od kontekstu typowe, często powtarzające się działania takie jak filtrowanie list, przetwarzanie ich elementów itp.

14 Map Funkcja map dostaje funkcję oraz listę i aplikuję tę funkcję do każdego elementu listy. map :: (a -> b) -> [a] -> [b] To samo można osiągnąd wyrażeniami lamba jednak przeważnie map jest znacznie czytelniejszy, szczególnie przy mapach map. ghci > map (+3) [1,5,3,1,6] [4,8,6,4,9] ghci > map (++ "!") [" BIFF ", " BANG ", " POW "] [" BIFF!"," BANG!","POW!"] ghci > map ( replicate 3) [3..6] [[3,3,3],[4,4,4],[5,5,5],[6,6,6]] ghci > map ( map (^2)) [[1,2],[3,4,5,6],[7,8]] [[1,4],[9,16,25,36],[49,64]] ghci > map fst [(1,2),(3,5),(6,3),(2,6),(2

15 Filter Funkcja filter bierze predykat (funkcja zwracająca prawdę lub fałsz) oraz listę i zwraca listę elementów spełniających ten warunek. filter :: (a -> Bool ) -> [a] -> [a] ghci > filter ( >3) [1,5,3,2,1,6,4,3,2,1] [5,6,4] ghci > filter (==3) [1,2,3,4,5] [3] ghci > filter even [1..10] [2,4,6,8,10]

16 takewhile Dostaje predykat i listę, a następnie zwraca elementy od początku listy dopóki predykat jest prawdziwy. takewhile :: (a -> Bool) -> [a] -> [a] *Main> takewhile (/=' ') "Ala ma kota" "Ala *Main> takewhile (<10) [1,2..100] [1,2,3,4,5,6,7,8,9] *Main> sum ( takewhile (<10000) [1, ] )

17 Lambdy Lambdy to funkcje anonimowe, których używamy gdy potrzebujemy z danej funkcji skorzystad tylko raz. Z reguły piszemy je z celem podstawienia do funkcji wyższego rzędu Lambdę zapisujemy w następujący sposób: najpierw \, potem parametry, strzałka -> i ciało funkcji, całośd umieszczamy w nawiasach Prelude> let matrix = [ [1,2,3],[4,5,6],[7,8,9,0] ] Prelude> filter (\xs -> length xs > 3) matrix [[7,8,9,0]] Prelude> zipwith (\a b -> (a * 10 + b)) [5,4,3,2,1] [1,2,3,4,5] [51,42,33,24,15]

18 Folds Folds funkcje podobne do map, z tym, że redukują listę do pojedynczej wartości Funkcja typu fold przyjmuje funkcję binarną, jakąś wartośd startową (zwaną accumulatorem) i listę do zwinięcia. Funkcja binarna przyjmuje wartośd startową oraz pierwszy (lub ostatni) element z listy i zwraca nową wartośd accumulatora Potem funkcja jest wywoływana z accumulatorem i drugim w kolejności (lub przedostatnim) elementem listy itd. aż do przejścia całej listy. Przykład implementacji funkcji sumy z użyciem foldl (left fold)

19 Folds c.d. Podobnie działają funkcje foldl1 i foldr1 Różnica polega na tym, że nie podajemy w nich wartości początkowej Wartością początkową jest pierwszy (bądź ostatni) element listy Prelude> foldl1 (\x acc -> x - acc) [1,2,3,4,5] -13

20 Scans Scanl, scanr, scanl1, scanr1 funkcje podobne do foldów, z tym, że zwracają wszystkie kolejne wartości accumulatora w formie listy Prelude> scanl (\x acc -> x + acc) 0 [1,2,3,4,5] [0,1,3,6,10,15]

21 Kompozycja funkcji W matematyce kompozycja funkcji jest zdefiniowana w następujący sposób: co oznacza wywołanie funkcji f z rezultatem funkcji g. W Haskellu do tego służy operator. (.) :: (b -> c) -> (a -> b) -> a -> c f. g = \x -> f (g x) Zwródmy uwagę na typy. Funkcja f musi przyjmowad ten sam typ, który zwraca funkcja g. Więc funkcja wynikowa przyjmuje ten sam typ co g i zwraca typ zwracany przez f. Prelude> let f = negate. (^3) Prelude> f

22 Moduły w Haskellu Moduł - jest to pewien zbiór powiązaznych ze sobą funkcji i klas. Program zaś jest kolekcją modułów. Dzięki podziałowi na moduły zyskujemy pewne rozgraniczenie funkcjonalności tzn. że poszczególne moduły dostarczają nam specyficzne funkcje przeznaczone do operowania na rożnego rodzaju danych. Moduły z reguły powinny być jaknajbardziej ogólne oraz luźno powiązane dzięki czemu zawarte w nich funkcjonalności można wykorzystac później w wielu programach (wielokrotne wykorzystanie kodu). Z drugiej jednak strony jeśli funkcje z poszczególnych modułów służą wspólnym celom (np. Do Manipulacji listami) są w pewien sposób odgórnie powiązane( ze wzgledu na przeznaczenie) jedna funkcjonalność z jednego modułu, dla konkretnego przypadku potrzebuje innej funkcjonalności z innego modułu. Standardowa biblioteka Haskella jest podzielona na moduły a każdy z nich zawiera funkcje i typy, które sa powiązane z innymi.

23 Importowanie modułu Aby zaimortować moduł wykorzysujemy komendę import np: import Data. List Takie użycie jest oczywiście rozpoznawane w środowisku GHCi, nie mniej jednak jest ono niezbędne i bardziej charakterystyczne podczas pisana skryptów umieszczonych w plikach, jeśli chcemy odwołać się do konkretnych funkcjonalności pochodzących z określonych modułów. Bardziej charakterystycznym dla środowiska GHCi jest dodawanie modułów za pośrednictwem komendy: :m <nazwa moudułu> np :m + Data. List, co nie zmienia faktu że jedna i druga komenda dodaje funkcje do globalnej przestrzeni nazw, przez to ich działanie staje się jednakowe.

24 Jeśli chcemy dodać kilka modułów możemy to zrobić poprzez pisanie ich w linij jeden po drugim: :m + Data. List Data. Map Data. Set itd. Jeśli używamy skryptu, który zawiera już wewnątrz zaimportowane moduły nie musimy tego robić z poziomu GHCi Aby opuścić poszczególny moduł używamy komendy: :m

25 Selekcja funkcjonalności zawartych w module Jeśli interesuje nas konkretna funkcja/funkcje pochodząca(e) z określonego modułu bez potrzeby jego całego ładowania wykorzystujemy konstrukcję typu: import Data. List ( nub, sort ) Jeśli zaś interesują nas wszystkie funkcje z wyjatkiem którejś korzystamy z konstrukcji: import Data. List hiding ( nub )

26 "Sposób na konflikty" Wyobraźmy sobie sytuację w której dwa moduły, z których korzystamy zawierają funkcje nazwane w ten sam sposób. Podczas jej wywołania Haskell "nie wie", z którego modułu funkcją ma do czynienia. Rozwiązaniem problemu jest zapis: import qualified nazwa_modułu dołączenie modułu nazwa_modulu.nazwa_funkcji użycie To samo w 'wersji skróconej': import qualified nazwa_modulu as nazwa_referencji nazwa_referencji.nazwa_funkcji

27 Data.List Moduł ten oczywiście (jak sama nazwa wskazuje) dostarcza typ Listowy oraz szereg operacji, których na tym typie bedziemy mogli używać. Intersperse Postępowanie Weź pewien element oraz listę. Umieść wspomniany element pomiędzy każdą parą elementów pochodzących z listy. Przykład: komenda: intersperse '.' "MONKEY" wynik:"m. O.N.K.E.Y " komenda: intersperse 0 [1,2,3,4,5,6] wynik:[1,0,2,0,3,0,4,0,5,0,6]

28 Data.List Transpose jest pewną odmianą permutacji Postępowanie Niech dana będzie pewna lista list. Weź element z pewnej listy będacej wewnątrz innej( stojący na odpowiedniej pozycji) i zestaw go z elementami, z inych list(będących wewnątrz tej samej listy) stojacymi na tej samej pozycji co on, tak aby powstał nowa lista.ponów działanie dla kolejnych elementów z określonych pozycji. Lepiej może widać to n aprzykładzie :) Przykład komenda: transpose [[1,2,3],[4,5,6],[7,8,9]] wynik: [[1,4,7],[2,5,8],[3,6,9]]

29 Data.List Intercalate jest pewną odmianą permutacji Postępowanie Weź listę (A) oraz listę list(b). Wstaw listę(a) pomiędzy pary list na liście list(b) utwórz nową listę powstałą na skutek tej operacji. Przykład komenda: intercalate " " [" hey "," there "," guys " ] wynik: " hey there guys "

30 Data.List Zadanie (transpose) Co zwróci poniższy zapis? transpose ["Op","lis","gjo","aek"]

31 Data.List concat Postępowanie Połącz elementy z listy list w jedną listę Przykład komenda: concat["za","gad","ka"] wynik: " zagadka"

32 Data.List??? Zagadka Mając daną listę list : [[1,4,7],[2,5],[3,6,8]] Przekształć ją do pojedyńczej listy postaci: [1,2,3,4,5,6,7,8].Jakich funkcji spośród pozananych należy użyć?

33 Data.List concatmap Postępowanie Zrób tosamo co Map :) i połącz listę list w jedną. A co robi map? Wykonuje dla wszystkich elementów listy operację podaną jako argument. Przykład komenda: concatmap(replicate 4)[[1,2],[3,4]] wynik: [[1,2],[1,2],[1,2],[1,2],[3,4],[3,4],[3,4],[3,4]] A co zwróciłby map?

34 Data.List and,or Postępowanie Weź wyrażenie logiczne i zwróc jego wynik=>true lub false. Końcowy wynik jest uzależniony od wartości true lub false dla poszczególnych elementów.tworzona jest tablica wartości logicznych. Przykłady komenda: and $ map ( >4) [5,6,7,8] wynik: True komenda: or $ map (==4) [2,3,4,5,6,1] wynik: True

35 Data.List Any,all Postępowanie Weź wyrażenie logiczne i sprawdź czy conajmniej jeden(any) lub wszystkie(all) elementy spełniają zapisany warunek. Przykłady komenda: any (==4) [2,3,5,6,1,4] wynik: True komenda: all (==4) [2,3,5,6,1,4] wynik: False

36 Data.List iterate Postępowanie Ustal wyrażenie i wartość początkową, od której zaczniesz je wykonywać.pamiętaj o ograniczeniu operacji, bo wpadniesz w petlę nieskończoną. Przykłady komenda: take 10 $ iterate (*3) 1 wynik: [1,3,9,27,81,243,729,2187,6561,19683] komenda: iterate (*3) 1 wynik: pętla nieskończona

37 Data.List Split Postępowanie Weź listę i liczbę, rozdziel listę na tyle elementów na ile wskazuje podana liczba. Przykłady komenda: splitat 3 " heyman " wynik: (" hey "," man " ) komenda: splitat ( -3) " heyman " wynik: (""," heyman " )

38 Data.List takewhile Postępowanie Wybierz elementy z listy spęłniające warunek. Działanie to wykonaj dla pojedyńczych egzemplaży w przypadku gdy istnieją powtórzenia. Przykłady komenda: takewhile ( >3) [6,5,4, 1] wynik: [6,5,4]

39 Data.List dropwhile Postępowanie Weź listę i usuń z niej elementy spełniające warunek. Działanie to wykonaj dla pojedyńczych egzemplaży w przypadku gdy istnieją powtórzenia. Przykłady komenda: dropwhile ( <3) [1,2,2,2,3,4,5,4,3,2,1] wynik: [3,4,5,4,3,2,1]

40 Data.List span Postępowanie Sprawdź warunek w span,dokonaj podziału. Przykłady komenda:span(/=4)[1,2,3,4,5,6,7] wynik: ([1,2,3],[4,5,6,7])

41 Data.List break Postępowanie Wykonaj z zaprzeczeniem warunek inaczej niż w span. Przykłady komenda:break (==4) [1,2,3,4,5,6,7] wynik: ([1,2,3],[4,5,6,7])

42 Data.List sort Postępowanie Sortuje listę w kolejności rosnącej Przykłady komenda:sort [8,5,3,2,1,6,4,2] wynik: [1,2,2,3,4,5,6,8]

43 Data.List group Postępowanie Utwórz grupy jednakowych elementów.z listy wybierz jednakowe elementy i umieść je w osobnych listach,utwórz listę list. Przykłady komenda: group [1,1,1,1,2,2,2,2,3,3,2,2,2,5] wynik: [[1,1,1,1],[2,2,2,2],[3,3],[2,2,2],[5]]

44 Data.List tails vs tail Postępowanie tails-weź listę, utwórz z niej podciągi ciągów(liste list) usuwając kolejno elementy z początku. tail-tworzy pojedyńczy podzbiór zbioru Przykłady komenda: tails[1,2,3,4] wynik: [[1,2,3,4],[2,3,4],[3,4],[4],[]] komenda: tail[1,2,3,4] wynik: [2,3,4]

45 Data.List inits Postępowanie Weź listę, utwórz z niej listy poprzez kolejne "odcinanie" jej elementów począwszy od piewrwszego.pierwszym elementem jest lista pusta. Przykłady komenda: inits[1,2,3,4] wynik: [[],[1],[1,2],[1,2,3],[1,2,3,4]] komenda:inits[1,2,3,4] wynik: [2,3,4]

46 Data.List Inne funkcje: IsPrefixOf IsSufixOf Elem NotElem Partition Find ElemIndex FindIndex FindIndices Zip4 ZipWith3

47 Data.List ZipWith4 Lines Unlines Words Delete Nub Union Intersect Index...

48 Data.Char Jest modułem, który dostarcza nam zbiór funkcjonalności, dzięki którym możemy przeprowadzać operacje na pojedyńczych symbolach. Daje nam to szerokie możliwości w kontekście przetwarzania ciągów znakowych(strings),gdyż są one poprostu listami symboli.

49 Data.Char Zbiór funkcji operujących na pojdyńczych symbolach i sprawdzających czy warunek z mimi związany jest prawdziwy bądź nie. iscontrol sprawdza czy symbol jest znakiem kontrolnym isspace sprawdza czy symbol jest białym znakiem islower sprawdza czy synbol jest napisany z małej litery isupper sprawdza czy synbol jest napisany z wielkiej litery isalpha sprawdza czy synbol jest literą czy cyfrą -cyfra(false) isalphanum sprawdza czy synbol jest literą czy cyfrą -cyfra(true) isprint sprawdza czy symbol ma możliwość wydrukowania(wypisania). isdigit sprawdza czy symbol jest cyfrą. isoctdigit sprawdza czy symbol jest zapisany w systemie

50 Data.Char ishexdigit sprawdza czy symbol jest zapisany w systemie szesnastkowym. isletter sprawdza czy symbol jest literą ismark sprawdza czy symbol posiada swój odpowiednik w Unicode isnumber sprawdza czy symbol jest cyfrą ispunctuation sprawdza czy symbol jest znakiem interpunkcyjnym issymbol sprawdza czy symbol jest znakiem matematycznym lub znakiem waluty

51 Data.Char isseparator sprawdza czy symbol jest separatorem bądź białym znakiem isascii sprawdza, czy symbol wpada do pierwszych 128 znaków z zestawu znaków Unicode. islatin1 sprawdza, czy bohater wpada do pierwszych 256 znaków z zestawu znaków Unicode. isasciiupper sprawdza czy symol jest 'wielkim' znakiem ASCII. isasciilower sprawdza czy symol jest 'małym' znakiem ASCII Ogólna sygnatura funkcji przyjmuje postać: Char -> Bool.

52 Data.Char words Postępowanie Weź ciąg znakowy i podziel go na podciągi w zależności od występowania białego znaku.na tej podstawie utwórz listę (lista string). Przykłady komenda: words "Ala ma kota" wynik:["ala","ma","kota"]

53 Data.Char Funkcje konwersji inttodigit,digittoint Postępowanie Weź typ wyjściowy i zamień go na inny. Przykłady komenda: map digittoint " " wynik:[3,4,5,3,8] komenda:inttodigit 5 wynik: '5' ograniczenie:zakres 1..15

54 Data.Char ord,chr Postępowanie Weź symbol i zamień go na jego cyfrowy odpowiednik (ord) i na odwrót(chr). Przykłady komenda:ord 'a' wynik: 97 komenda:chr 90 wynik: 'Z'

55 Data.Map Tablica asocjacyjna (tablica skojarzeniowa, mapa, słownik, ang. associative array, map, dictionary) nazwa dla powszechnie stosowanego w informatyce abstrakcyjnego typu danych, który przechowuje pary (unikatowy klucz, wartośd) i umożliwia dostęp do wartości poprzez podanie klucza.

56 W Haskell mapy dostępne są w module Data.Map, ich implementacja opiera się na drzewach, dlatego znalezienie wartości dla danego klucza odbywa się o wiele szybciej, niż w przypadku list, ponieważ w liście trzeba przechodzid wszystkie elementy, aż do momentu napotkania klucza Jeśli chcemy używad tego modułu musimy go zaimportowad import qualified Data.Map as Map

57 Tworzenie mapy Map.empty reprezentuje pustą mape let map = Map.empty Metoda fromlist przyjmuje liste i zwraca mape, jeśli w liście są powtórzenia, zostają one pominięte let map = Map.fromList [(1,21), (2,32), (3,5)]

58 Jeśli chcemy, by powtórzenia w liście nie były tylko pomijane, możemy użyd funkcji Map.fromListWith, która przyjmuje funkcje opisującą co ma zrobid, gdy napotka powtórzenie, oraz liste let mapa = Map.fromListWith (+) [(2,3),(2,5),(4,8)] Map.toList mapa Output: [(2,8), (4,8)] let mapa = Map.fromListWith (\x y -> y) [(1,2),(1,3),(2,4)] Map.toList mapa Output: [(1,3),(2,4)]

59 Wstawianie wartości do mapy Map.insert przyjmuje klucz, wartośd i mape, i zwraca nową mape utworzoną na podstawie przekazanej mapy, wraz z nowym elementem let mapa = Map.insert klucz wartosc Map.empty let mapa2 = Map.insert klucz2 wartosc2 mapa Map.insertWith analogiczna funkcja do Map.fromListWith

60 Usuwanie wartości z mapy Delete - przyjmuje klucz i mape, zwraca nową mape bez elementu, który znajdował się pod przekazanym kluczem let mapa = Map.fromList *(1, wartosc ),(2, wartosc )+ let mapa2 = Map.delete 2 mapa Map.toList mapa2 Output: *(1, wartosc )+

61 Map.member przyjmuje klucz i mape, zwraca wartośd logiczną czy mapa zawiera dany klucz Map.member 3 $ Map.fromList [(3,6),(4,3),(6,9)] Output: True Map.lookup przyjmuje klucz i mape, zwraca wartośd przypisaną do klucza let mymap = Map.fromList[(3,6),(4,2)] Map.lookup 3 mymap Output: Just 6

62 Map.size przyjmuje mape i zwraca ilośd jej elementów let mymap = Map.fromList [(1,2),(2,3)] Map.size mymap Output: 2 Map.null przyjmuje mape i zwraca wartośd logiczną czy mapa jest nullem Map.null mymap Output: False

63 Map.map pozwala modyfikowad całą mape w określony sposób let mymap = Map.map (*100) $ Map.fromList[(1,1),(2,4),(3,9)] w tym przypadku wszystkie wartości zostaną pomnożone * 100, mapa będzie wyglądad następująco: [(1,100),(2,400),(3,900)]

64 Map.keys przyjmuje mape i zwraca wszystkie klucze w niej zawarte Map.keys Map.fromList [(1,21),(2,22),(2,13)] Output:[1,2,3] Map.elems przyjmuje mape i zwraca wszystkie jej wartości

65 Data.Set Data.Set jest to moduł oferujący nam strukture danych, w której każdy element jest unikalny. Można wykonywad na nim takie operacje m.in. jak, wstawianie, usuwanie, sprawdzanie czy coś należy już do setu oraz konwersje do listy. Jego implementacja oparta jest na drzewach Aby używad tego modułu musimy dokonad importu: import qualified Data.Set as Set

66 Tworzenie Setu fromlist przyjmuje liste, a zwraca set let myset = Set.fromList przykladowy tekst Po wypisaniu zawartości tego setu, zobaczymy: Output: adekloprstwyz Widzimy, że wartości setu są unikalne i posortowane

67 Intersection funkcja przyjmuje dwa sety, i zwraca ich częśd wspólną let set1 = Set.fromList abcdefgh let set2 = Set.fromList azcdefgk Set.intersection set1 set Output: acdefg Difference funkcja przyjmuje dwa sety, i zwraca elementy które są w pierwszym secie, ale nie ma ich w drugim Set.difference set1 set2 Output: bh

68 Union funkcja przyjmuje dwa sety, i zwraca set ze wszystkimi elementami pierwszego i drugiego setu let set1 = Set.fromList abcdefgh let set2 = Set.fromList azcdefgk Set.union set1 set2 Output: abcdefghkz

69 Moduł Data.Set oferuje nam jeszcze funkcje null, size, member, empty, insert, delete, tolist działające analogicznie jak w module Data.Map Sety są często używane do wyodrębnienia powtórzeo z listy poprzez zamiane listy na set, a później z powrotem na liste. Funkcja nub z Data.List robi tą czynnośd, jednak zamiana na set i z powrotem, działa o wiele szybciej, co przy dużej liście, może byd istotne.

70 Moduły Moduł - jest to pewien zbiór powiązanych ze sobą funkcji i klas. Program zaś jest kolekcją modułów. Dzięki podziałowi na moduły zyskujemy pewne rozgraniczenie funkcjonalności tzn. że poszczególne moduły dostarczają nam specyficzne funkcje przeznaczone do operowania na rożnego rodzaju danych. Moduły pozwalają nam na to, że raz napisane funkcje, czy definicje typów, łatwo używad w innych programach, bo wystarczy dany moduł zaimportowad.

71 Tworzenie swojego modułu Moduły zapisujemy w plikach o rozszerzeniu.hs Nazwa modułu powinna byd taka sama jak pliku Moduł powinniśmy przechowywad w folderze o takiej samej nazwie jak nazwa modułu Szkielet modułu: module Nazwa ( -- metody danego modułu ) where --definicje metod

72 Przykładowy moduł module Geometria ( polekwadratu, obwodkwadratu, poleokregu, obwodokregu ) where polekwadratu :: Float -> Float polekwadratu bok = bok * bok obwodkwadratu :: Float -> Float obwodkwadratu bok = bok * 4 poleokregu :: Float -> Float poleokregu promien = pi * (promien^2) obwodokregu :: Float -> Float obwodokregu promien = 2 * pi * promien

73 Jeśli chcemy, aby nasz moduł opisywał tylko konkretną figurę, wtedy jeden duży moduł można napisad w postaci podmodułów. module Geometria.Kwadrat ( pole, obwod )where pole :: Float -> Float pole bok = bok * bok obwod :: Float -> Float obwod bok = bok * 4

74 module Geometria.Okrag ( pole, obwod )where pole :: Float -> Float pole promien = pi * (promien^2) obwod :: Float -> Float obwod promien = 2 * pi * promien Moduły powinniśmy móc użyd w następujący sposób: - ścieżkę pracy programu powinniśmy mied na tym samym poziomie co folder, w którym znajduje się nasz moduł, a następnie poleceniem: import Geometria.Kwadrat, zaimportowad moduł. Gdybyśmy chcieli używad kilka modułów naraz to musimy użyd polecenia import qualified import qualified Geometria.Kwadrat as Kwadrat import qualified Geometria.Okrag as Okrag

75 Wkorzystane materiały: Learn You a Haskell for Great Good! Miran Lipovaca

Haskell Moduły Ładowanie

Haskell Moduły Ładowanie Haskell Moduły Moduł zestaw powiązanych funkcji, typów, typeclass. Program w Haskellu często jest modułem, który ładuje inne moduły a następnie wykorzystuje zdefiniowane w nich funkcje w celu realizacji

Bardziej szczegółowo

Moduły. Źródło: a) Wczytywanie modułów. interparse rozdziela każdy element listy wcześniej podanym znakiem

Moduły. Źródło:  a) Wczytywanie modułów. interparse rozdziela każdy element listy wcześniej podanym znakiem Autor: Roman Gęsiarz Moduły Źródło: http://learnyouahaskell.com/modules a) Wczytywanie modułów b) Data.List c) Data.Char d) Data.Map e) Data.Set f) Tworzenie własnych modułów Łódź, dnia 25.03.2017 r. Ad.

Bardziej szczegółowo

Moduł to zbiór powiązanych ze sobą funkcji, typów i klas typu. Język Haskell stanowi zbiór modułów, gdzie moduł główny załącza pozostałe moduły w

Moduł to zbiór powiązanych ze sobą funkcji, typów i klas typu. Język Haskell stanowi zbiór modułów, gdzie moduł główny załącza pozostałe moduły w Haskell Moduły Moduł to zbiór powiązanych ze sobą funkcji, typów i klas typu. Język Haskell stanowi zbiór modułów, gdzie moduł główny załącza pozostałe moduły w celu użycia zawartych w nich funkcji dla

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

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

Podstawy programowania. Podstawy C# Tablice

Podstawy programowania. Podstawy C# Tablice Podstawy programowania Podstawy C# Tablice Tablica to indeksowany zbiór elementów Tablica jest typem referencyjnym (deklaracja tworzy tylko referencję, sama tablica musi być utworzona oddzielnie, najprościej

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

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

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

Podstawy programowania skrót z wykładów: Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace

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

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

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody Obiektowy PHP Czym jest obiekt? W programowaniu obiektem można nazwać każdy abstrakcyjny byt, który programista utworzy w pamięci komputera. Jeszcze bardziej upraszczając to zagadnienie, można powiedzieć,

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

8. Wektory. Przykłady Napisz program, który pobierze od użytkownika 10 liczb, a następnie wypisze je w kolejności odwrotnej niż podana.

8. Wektory. Przykłady Napisz program, który pobierze od użytkownika 10 liczb, a następnie wypisze je w kolejności odwrotnej niż podana. 8. Wektory Przykłady 8.1. Napisz program, który pobierze od użytkownika 10 liczb, a następnie wypisze je w kolejności odwrotnej niż podana. Uwaga! Kod poniżej. To zadanie można rozwiązać przy użyciu wiedzy

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

WYRAŻENIA ALGEBRAICZNE

WYRAŻENIA ALGEBRAICZNE WYRAŻENIA ALGEBRAICZNE Wyrażeniem algebraicznym nazywamy wyrażenie zbudowane z liczb, liter, nawiasów oraz znaków działań, na przykład: Symbole literowe występujące w wyrażeniu algebraicznym nazywamy zmiennymi.

Bardziej szczegółowo

WEJŚCIE/WYJŚCIE HASKELL ŁUKASZ PAWLAK DARIUSZ KRYSIAK

WEJŚCIE/WYJŚCIE HASKELL ŁUKASZ PAWLAK DARIUSZ KRYSIAK WEJŚCIE/WYJŚCIE HASKELL ŁUKASZ PAWLAK DARIUSZ KRYSIAK W Haskellu funkcje nie mogą zmieniać stanów (w tym np. zmieniać wartości zmiennej). Funkcja wywołana z pewnymi ustalonymi argumentami musi zwracać

Bardziej szczegółowo

Wstęp do Programowania potok funkcyjny

Wstęp do Programowania potok funkcyjny Wstęp do Programowania potok funkcyjny Marcin Kubica 2010/2011 Outline Procedury wyższych rzędów 1 Procedury wyższych rzędów jako abstrakcje konstrukcji programistycznych Intuicje Procedury wyższych rzędów

Bardziej szczegółowo

Programowanie i struktury danych

Programowanie i struktury danych Programowanie i struktury danych 1 / 30 STL Standard Template Library, STL (ang. = Standardowa Biblioteka Wzorców) biblioteka C++ zawierająca szablony (wzorce), które umożliwiają wielokrotne użycie. Główne

Bardziej szczegółowo

Definicje. Algorytm to:

Definicje. Algorytm to: Algorytmy Definicje Algorytm to: skończony ciąg operacji na obiektach, ze ściśle ustalonym porządkiem wykonania, dający możliwość realizacji zadania określonej klasy pewien ciąg czynności, który prowadzi

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

Urządzenia Techniki. Klasa I TI. System dwójkowy (binarny) -> BIN. Przykład zamiany liczby dziesiętnej na binarną (DEC -> BIN):

Urządzenia Techniki. Klasa I TI. System dwójkowy (binarny) -> BIN. Przykład zamiany liczby dziesiętnej na binarną (DEC -> BIN): 1. SYSTEMY LICZBOWE UŻYWANE W TECHNICE KOMPUTEROWEJ System liczenia - sposób tworzenia liczb ze znaków cyfrowych oraz zbiór reguł umożliwiających wykonywanie operacji arytmetycznych na liczbach. Do zapisu

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

Wstęp do programowania

Wstęp do programowania Wstęp do programowania Programowanie funkcyjne Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk(Wydział Fizyki) WP w. XIV Jesień 2013 1 / 25 Paradygmaty programowania Programowanie imperatywne Program

Bardziej szczegółowo

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

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki Informatyka I Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2019 1 Plan wykładu

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

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

Systemy operacyjne. Laboratorium 9. Perl wyrażenia regularne. Jarosław Rudy Politechnika Wrocławska 28 lutego 2017

Systemy operacyjne. Laboratorium 9. Perl wyrażenia regularne. Jarosław Rudy Politechnika Wrocławska 28 lutego 2017 Systemy operacyjne Laboratorium 9 Perl wyrażenia regularne Jarosław Rudy Politechnika Wrocławska 28 lutego 2017 Temat obejmuje wykorzystanie wyrażeń regularnych w perlu. Wyrażenia same w sobie są w zasadzie

Bardziej szczegółowo

Pętla for. Matematyka dla ciekawych świata -19- Scilab. for i=1:10... end. for k=4:-1:1... end. k=3 k=4. k=1. k=2

Pętla for. Matematyka dla ciekawych świata -19- Scilab. for i=1:10... end. for k=4:-1:1... end. k=3 k=4. k=1. k=2 Pętle wielokrotne wykonywanie ciągu instrukcji. Bardzo często w programowaniu wykorzystuje się wielokrotne powtarzanie określonego ciągu czynności (instrukcji). Rozróżniamy sytuacje, gdy liczba powtórzeń

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

Ok. Rozbijmy to na czynniki pierwsze, pomijając fragmenty, które już znamy:

Ok. Rozbijmy to na czynniki pierwsze, pomijając fragmenty, które już znamy: Kurs C++ częśd II Podstawowa obsługa konsoli + zmienne. Autor: Dawid Chróścielski. Wprowadzanie i wyprowadzanie danych z/do konsoli. Jak wyprowadzad dane dowiedzieliśmy się już wcześniej (metoda cout z

Bardziej szczegółowo

PHP: bloki kodu, tablice, obiekty i formularze

PHP: bloki kodu, tablice, obiekty i formularze 1 PHP: bloki kodu, tablice, obiekty i formularze SYSTEMY SIECIOWE Michał Simiński 2 Bloki kodu Blok if-else Switch Pętle Funkcje Blok if-else 3 W PHP blok if i blok if-else wyglądają tak samo i funkcjonują

Bardziej szczegółowo

Programowanie w VB Proste algorytmy sortowania

Programowanie w VB Proste algorytmy sortowania Programowanie w VB Proste algorytmy sortowania Sortowanie bąbelkowe Algorytm sortowania bąbelkowego polega na porównywaniu par elementów leżących obok siebie i, jeśli jest to potrzebne, zmienianiu ich

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

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu. Część XIX C++ w Każda poznana do tej pory zmienna może przechowywać jedną liczbę. Jeśli zaczniemy pisać bardziej rozbudowane programy, okaże się to niewystarczające. Warto więc poznać zmienne, które mogą

Bardziej szczegółowo

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA Python wprowadzenie Warszawa, 24 marca 2017 Python to język: nowoczesny łatwy w użyciu silny można pisać aplikacje Obiektowy klejący może być zintegrowany z innymi językami np. C, C++, Java działający

Bardziej szczegółowo

Dla człowieka naturalnym sposobem liczenia jest korzystanie z systemu dziesiętnego, dla komputera natomiast korzystanie z zapisu dwójkowego

Dla człowieka naturalnym sposobem liczenia jest korzystanie z systemu dziesiętnego, dla komputera natomiast korzystanie z zapisu dwójkowego Arytmetyka cyfrowa Dla człowieka naturalnym sposobem liczenia jest korzystanie z systemu dziesiętnego, dla komputera natomiast korzystanie z zapisu dwójkowego (binarnego). Zapis binarny - to system liczenia

Bardziej szczegółowo

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

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main. Część XVI C++ Funkcje Jeśli nasz program rozrósł się już do kilkudziesięciu linijek, warto pomyśleć o jego podziale na mniejsze części. Poznajmy więc funkcje. Szybko się przekonamy, że funkcja to bardzo

Bardziej szczegółowo

Wykresy i interfejsy użytkownika

Wykresy i interfejsy użytkownika Wrocław, 07.11.2017 Wstęp do informatyki i programowania: Wykresy i interfejsy użytkownika Wydział Matematyki Politechniki Wrocławskiej Andrzej Giniewicz Dzisiaj na zajęciach... Instrukcje sterujące Biblioteka

Bardziej szczegółowo

12. Wprowadzenie Sygnały techniki cyfrowej Systemy liczbowe. Matematyka: Elektronika:

12. Wprowadzenie Sygnały techniki cyfrowej Systemy liczbowe. Matematyka: Elektronika: PRZYPOMNIJ SOBIE! Matematyka: Dodawanie i odejmowanie "pod kreską". Elektronika: Sygnały cyfrowe. Zasadę pracy tranzystorów bipolarnych i unipolarnych. 12. Wprowadzenie 12.1. Sygnały techniki cyfrowej

Bardziej szczegółowo

Systemy GIS Tworzenie zapytań w bazach danych

Systemy GIS Tworzenie zapytań w bazach danych Systemy GIS Tworzenie zapytań w bazach danych Wykład nr 6 Analizy danych w systemach GIS Jak pytać bazę danych, żeby otrzymać sensowną odpowiedź......czyli podstawy języka SQL INSERT, SELECT, DROP, UPDATE

Bardziej szczegółowo

SUM Edukacja Techniczno Informatyczna Języki i Systemy Programowania. Wykład 3. dr Artur Bartoszewski - WYKŁAD: Języki i Systemy Programowania,

SUM Edukacja Techniczno Informatyczna Języki i Systemy Programowania. Wykład 3. dr Artur Bartoszewski - WYKŁAD: Języki i Systemy Programowania, SUM Edukacja Techniczno Informatyczna Języki i Systemy Programowania Wykład 3 1 SUM Edukacja Techniczno Informatyczna Języki i Systemy Programowania Przykład Bingo 2 Treść przykładu Jak wygląda karta do

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

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

Java Podstawy. Michał Bereta

Java Podstawy. Michał Bereta Prezentacja współfinansowana przez Unię Europejską ze środków Europejskiego Funduszu Społecznego w ramach projektu Wzmocnienie znaczenia Politechniki Krakowskiej w kształceniu przedmiotów ścisłych i propagowaniu

Bardziej szczegółowo

KOTLIN. Język programowania dla Androida

KOTLIN. Język programowania dla Androida KOTLIN Język programowania dla Androida Historia Kotlin został opracowany przez firmę JetBrains Prace rozpoczęto w 2011 r., od 2012 r. dostępny na licencji Apache 2. Nazwa pochodzi od wyspy koło Petersburga

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

SQL (ang. Structured Query Language)

SQL (ang. Structured Query Language) SQL (ang. Structured Query Language) SELECT pobranie danych z bazy, INSERT umieszczenie danych w bazie, UPDATE zmiana danych, DELETE usunięcie danych z bazy. Rozkaz INSERT Rozkaz insert dodaje nowe wiersze

Bardziej szczegółowo

Programowanie w Baltie klasa VII

Programowanie w Baltie klasa VII Programowanie w Baltie klasa VII Zadania z podręcznika strona 127 i 128 Zadanie 1/127 Zadanie 2/127 Zadanie 3/127 Zadanie 4/127 Zadanie 5/127 Zadanie 6/127 Ten sposób pisania programu nie ma sensu!!!.

Bardziej szczegółowo

Wykład 3 Składnia języka C# (cz. 2)

Wykład 3 Składnia języka C# (cz. 2) Wizualne systemy programowania Wykład 3 Składnia języka C# (cz. 2) 1 dr Artur Bartoszewski -Wizualne systemy programowania, sem. III- WYKŁAD Wizualne systemy programowania Metody 2 Metody W C# nie jest

Bardziej szczegółowo

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

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop. 2017 Spis treści Przedmowa 11 1. Jak w programie 21 Czym jest program? 21 Uruchamianie interpretera języka Python 22 Pierwszy

Bardziej szczegółowo

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu Programowanie strukturalne Opis ogólny programu w Turbo Pascalu STRUKTURA PROGRAMU W TURBO PASCALU Program nazwa; } nagłówek programu uses nazwy modułów; } blok deklaracji modułów const } blok deklaracji

Bardziej szczegółowo

Zadanie 1. Zmiana systemów. Zadanie 2. Szyfr Cezara. Zadanie 3. Czy liczba jest doskonała. Zadanie 4. Rozkład liczby na czynniki pierwsze Zadanie 5.

Zadanie 1. Zmiana systemów. Zadanie 2. Szyfr Cezara. Zadanie 3. Czy liczba jest doskonała. Zadanie 4. Rozkład liczby na czynniki pierwsze Zadanie 5. Zadanie 1. Zmiana systemów. Zadanie 2. Szyfr Cezara. Zadanie 3. Czy liczba jest doskonała. Zadanie 4. Rozkład liczby na czynniki pierwsze Zadanie 5. Schemat Hornera. Wyjaśnienie: Zadanie 1. Pozycyjne reprezentacje

Bardziej szczegółowo

Część 4 życie programu

Część 4 życie programu 1. Struktura programu c++ Ogólna struktura programu w C++ składa się z kilku części: część 1 część 2 część 3 część 4 #include int main(int argc, char *argv[]) /* instrukcje funkcji main */ Część

Bardziej szczegółowo

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

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02 METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się

Bardziej szczegółowo

I. Podstawy języka C powtórka

I. Podstawy języka C powtórka I. Podstawy języka C powtórka Zadanie 1. Utwórz zmienne a = 730 (typu int), b = 106 (typu long long), c = 123.45 (typu double) Wypisz następujące komunikaty: Dane sa liczby: a = 730, b = 106 i c = 123.45.

Bardziej szczegółowo

Systemy liczbowe używane w technice komputerowej

Systemy liczbowe używane w technice komputerowej Systemy liczbowe używane w technice komputerowej Systemem liczenia nazywa się sposób tworzenia liczb ze znaków cyfrowych oraz zbiór reguł umożliwiających wykonywanie operacji arytmetycznych na liczbach.

Bardziej szczegółowo

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1 Podstawy programowania, Poniedziałek 30.05.2016, 8-10 Projekt, część 1 1. Zadanie Projekt polega na stworzeniu logicznej gry komputerowej działającej w trybie tekstowym o nazwie Minefield. 2. Cele Celem

Bardziej szczegółowo

Podstawy algorytmiki i programowania - wykład 4 C-struktury

Podstawy algorytmiki i programowania - wykład 4 C-struktury 1 Podstawy algorytmiki i programowania - wykład 4 C-struktury Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion, 2012 www.cplusplus.com Jerzy

Bardziej szczegółowo

Języki i Paradygmaty Programowania

Języki i Paradygmaty Programowania Języki i Paradygmaty Programowania Odkrywamy Haskell Marcin Benke 24 lutego 2014 Odkrywamy Haskell Haskell zasadniczo kompilowany, ale też interpreter: ghci $ ghci GHCi, version 7.6.2: http://www.haskell.org/ghc/

Bardziej szczegółowo

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

Tablice (jedno i wielowymiarowe), łańcuchy znaków Tablice (jedno i wielowymiarowe), łańcuchy znaków wer. 8 z drobnymi modyfikacjami! Wojciech Myszka Katedra Mechaniki i Inżynierii Materiałowej 2017-04-07 09:35:32 +0200 Zmienne Przypomnienie/podsumowanie

Bardziej szczegółowo

Zadanie 2: Arytmetyka symboli

Zadanie 2: Arytmetyka symboli 1 Cel ćwiczenia Zadanie 2: Arytmetyka symboli Wykształcenie umiejętności abstrahowania operacji arytmetycznych. Zapoznanie się i przećwiczenie mechanizmu tworzenia przeciążeń funkcji operatorowych. Utrwalenie

Bardziej szczegółowo

Języki i techniki programowania Ćwiczenia 4 Wzorce

Języki i techniki programowania Ćwiczenia 4 Wzorce Języki i techniki programowania Ćwiczenia 4 Wzorce Wzorce to metoda generacji różnych klas lub różnych funkcji. Autor: Marcin Orchel Przykład 1: Jeśli dana klasa C wykonuje obliczenia numeryczne, i wymaganiem

Bardziej szczegółowo

Tablice. Jones Stygar na tropie zmiennych

Tablice. Jones Stygar na tropie zmiennych Tablice Jones Stygar na tropie zmiennych Czym jest tablica? Obecnie praktycznie wszystkie języki programowania obsługują tablice. W matematyce odpowiednikiem tablicy jednowymiarowej jest ciąg (lub wektor),

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

Funkcje są prawdopodobnie najważniejszą częścią każdego poważnego programu (w każdym języku programowania).

Funkcje są prawdopodobnie najważniejszą częścią każdego poważnego programu (w każdym języku programowania). Funkcje w Pythonie Funkcje to części programu wielokrotnego użytku. Pozwalają nam nadad nazwę blokowi wyrażeo, a następnie uruchamiad ten blok używając tej nazwy gdziekolwiek w programie, dowolną ilośd

Bardziej szczegółowo

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk Podstawy informatyki Informatyka stosowana - studia niestacjonarne Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w Krakowie, Materiał

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

Znaki w tym systemie odpowiadają następującym liczbom: I=1, V=5, X=10, L=50, C=100, D=500, M=1000

Znaki w tym systemie odpowiadają następującym liczbom: I=1, V=5, X=10, L=50, C=100, D=500, M=1000 SYSTEMY LICZBOWE I. PODZIAŁ SYSTEMÓW LICZBOWYCH: systemy liczbowe: pozycyjne (wartośd cyfry zależy od tego jaką pozycję zajmuje ona w liczbie): niepozycyjne (addytywne) (wartośd liczby jest sumą wartości

Bardziej szczegółowo

1. Wprowadzenie do języka PHP

1. Wprowadzenie do języka PHP 1. Wprowadzenie do języka PHP Język PHP jest generalnie w swojej składni podobny do języka C, chociaż występuje tu szereg różnic. 1.1. Zmienne W PHP nazwy zmiennych poprzedzamy znakiem dolara ($). Nie

Bardziej szczegółowo

UNIWERSYTET RZESZOWSKI KATEDRA INFORMATYKI

UNIWERSYTET RZESZOWSKI KATEDRA INFORMATYKI UNIWERSYTET RZESZOWSKI KATEDRA INFORMATYKI LABORATORIUM TECHNOLOGIA SYSTEMÓW INFORMATYCZNYCH W BIOTECHNOLOGII Pakiet R: Cz. II Strona 1 z 7 OBIEKTY Faktory (factors) Faktor jest specjalną strukturą, przechowującą

Bardziej szczegółowo

1259 (10) = 1 * * * * 100 = 1 * * * *1

1259 (10) = 1 * * * * 100 = 1 * * * *1 Zamiana liczba zapisanych w dowolnym systemie na system dziesiętny: W systemie pozycyjnym o podstawie 10 wartości kolejnych cyfr odpowiadają kolejnym potęgom liczby 10 licząc od strony prawej i numerując

Bardziej szczegółowo

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami Przykład 1. Napisz program, który dla podanej liczby n wypisze jej rozkład na czynniki pierwsze. Oblicz asymptotyczną złożoność

Bardziej szczegółowo

Programowanie w języku Python. Grażyna Koba

Programowanie w języku Python. Grażyna Koba Programowanie w języku Python Grażyna Koba Kilka definicji Program komputerowy to ciąg instrukcji języka programowania, realizujący dany algorytm. Język programowania to zbiór określonych instrukcji i

Bardziej szczegółowo

Tabela wewnętrzna - definicja

Tabela wewnętrzna - definicja ABAP/4 Tabela wewnętrzna - definicja Temporalna tabela przechowywana w pamięci operacyjnej serwera aplikacji Tworzona, wypełniana i modyfikowana jest przez program podczas jego wykonywania i usuwana, gdy

Bardziej szczegółowo

ZASADY PROGRAMOWANIA KOMPUTERÓW

ZASADY PROGRAMOWANIA KOMPUTERÓW POLITECHNIKA WARSZAWSKA Instytut Automatyki i i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW Język Język programowania: C/C++ Środowisko programistyczne: C++Builder 6 Wykład 9.. Wskaźniki i i zmienne dynamiczne.

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

Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje

Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje Podstawy informatyki Informatyka stosowana - studia niestacjonarne - Zajęcia nr 4 Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w

Bardziej szczegółowo

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne Tematyka wykładów 1. Wprowadzenie. Klasy cz. 1 - Język C++. Programowanie obiektowe - Klasy i obiekty - Budowa i deklaracja klasy. Prawa dostępu - Pola i funkcje składowe - Konstruktor i destruktor - Tworzenie

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

Składnia funkcji i Rekurencja w języku Haskell

Składnia funkcji i Rekurencja w języku Haskell 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 Spis treści Składnia funkcji Tomasz Ostrowski Adrian

Bardziej szczegółowo

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego Publikacja jest dystrybuowana bezpłatnie Program Operacyjny Kapitał Ludzki Priorytet 9 Działanie 9.1 Poddziałanie

Bardziej szczegółowo

1. Informatyka - dyscyplina naukowa i techniczna zajmująca się przetwarzaniem informacji.

1. Informatyka - dyscyplina naukowa i techniczna zajmująca się przetwarzaniem informacji. Temat: Technologia informacyjna a informatyka 1. Informatyka - dyscyplina naukowa i techniczna zajmująca się przetwarzaniem informacji. Technologia informacyjna (ang.) Information Technology, IT jedna

Bardziej szczegółowo

Backend Administratora

Backend Administratora Backend Administratora mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011 W tym celu korzystając z konsoli wydajemy polecenie: symfony generate:app backend Wówczas zostanie stworzona

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

Pętle. Dodał Administrator niedziela, 14 marzec :27

Pętle. Dodał Administrator niedziela, 14 marzec :27 Pętlami nazywamy konstrukcje języka, które pozwalają na wielokrotne wykonywanie powtarzających się instrukcji. Przykładowo, jeśli trzeba 10 razy wyświetlić na ekranie pewien napis, to można wykorzystać

Bardziej szczegółowo

Arytmetyka liczb binarnych

Arytmetyka liczb binarnych Wartość dwójkowej liczby stałoprzecinkowej Wartość dziesiętna stałoprzecinkowej liczby binarnej Arytmetyka liczb binarnych b n-1...b 1 b 0,b -1 b -2...b -m = b n-1 2 n-1 +... + b 1 2 1 + b 0 2 0 + b -1

Bardziej szczegółowo

Serwer WWW Apache. http://httpd.apache.org/ Plik konfiguracyjny httpd.conf Definiujemy m.in.: Aktualne wersje 2.4.6, 2.2.25, 2.0.65 zakończony projekt

Serwer WWW Apache. http://httpd.apache.org/ Plik konfiguracyjny httpd.conf Definiujemy m.in.: Aktualne wersje 2.4.6, 2.2.25, 2.0.65 zakończony projekt Serwer WWW Apache http://httpd.apache.org/ Plik konfiguracyjny httpd.conf Definiujemy m.in.: Katalog który ma być serwowany Moduły, które mają zostać uruchomione na serwerze m.in. PHP, mod_rewrite Wirtualne

Bardziej szczegółowo

Języki i techniki programowania Ćwiczenia 2

Języki i techniki programowania Ćwiczenia 2 Języki i techniki programowania Ćwiczenia 2 Autor: Marcin Orchel Spis treści: Język C++... 5 Przekazywanie parametrów do funkcji... 5 Przekazywanie parametrów w Javie.... 5 Przekazywanie parametrów w c++...

Bardziej szczegółowo

Zatem w jaki sposób nasze programy mają komunikować się ze światem zewnętrznym?

Zatem w jaki sposób nasze programy mają komunikować się ze światem zewnętrznym? Wprowadzenie Haskell jest językiem czysto funkcyjnym. W uproszczeniu oznacza to, że w przeciwieństwie do języków imperatywnych (w których podajemy komputerowi ciąg kroków do wykonania) definiujemy co,

Bardziej szczegółowo

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04 Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04 Cel zajęć. Celem zajęć jest zapoznanie się ze sposobem działania popularnych kolekcji. Wprowadzenie teoretyczne. Rozważana w ramach niniejszych

Bardziej szczegółowo

PARADYGMATY I JĘZYKI PROGRAMOWANIA. Haskell. (w11)

PARADYGMATY I JĘZYKI PROGRAMOWANIA. Haskell. (w11) PARADYGMATY I JĘZYKI PROGRAMOWANIA Haskell. (w11) !!! 2 Brian Beckman o Monadach 3 Brian Beckman: Don't fear the Monad - YouTube Plan wykładu 4 Typy Funkcje Preludium take, cycle zip, unzip, zipwith filter,

Bardziej szczegółowo

SYSTEMY LICZBOWE 275,538 =

SYSTEMY LICZBOWE 275,538 = SYSTEMY LICZBOWE 1. Systemy liczbowe Najpopularniejszym systemem liczenia jest system dziesiętny, który doskonale sprawdza się w życiu codziennym. Jednak jego praktyczna realizacja w elektronice cyfrowej

Bardziej szczegółowo

Programowanie komputerowe. Zajęcia 4

Programowanie komputerowe. Zajęcia 4 Programowanie komputerowe Zajęcia 4 Typ logiczny Wartości logiczne są reprezentowane przez typ bool. Typ bool posiada tylko dwie wartości: true i false. Zamiast wartości logicznych można używać wartości

Bardziej szczegółowo

Wykład 8: klasy cz. 4

Wykład 8: klasy cz. 4 Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD

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

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy, Lista 3 Zestaw I Zadanie 1. Zaprojektować i zaimplementować funkcje: utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy, zapisz

Bardziej szczegółowo

JAVA?? to proste!! Autor: wojtekb111111

JAVA?? to proste!! Autor: wojtekb111111 1 JAVA?? to proste!! 2 Niniejszy tutorial przedstawia krótkie wprowadzenie do programowania w języku JAVA. Jakie narzędzia na początku potrzebujemy do rozpoczęcia programowania w tym języku? JDK (java

Bardziej szczegółowo

Programowanie funkcyjne (Haskell Wprowadzenie) Kowalik Adrian

Programowanie funkcyjne (Haskell Wprowadzenie) Kowalik Adrian Programowanie funkcyjne (Haskell Wprowadzenie) Kowalik Adrian Programowanie funkcyjne Krótka geneza języka Haskell Polecenia i składnia języka Funkcje i wyrażenia Typy i typy klasowe Listy i krotki Programowanie

Bardziej szczegółowo