Tworzenie własnych typów. danych oraz klas typów

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

Download "Tworzenie własnych typów. danych oraz klas typów"

Transkrypt

1 Justyna Łowicka

2 Tworzenie własnych typów danych oraz klas typów

3 Algebraiczne typy danych

4 konstruktorów umieszczonych w deklaracji data. Zobaczmy, jak typ Bool jest zdefiniowany w bibliotece standardowej. data Bool = False True Data oznacza, że mamy do zdefiniowania nowy typ danych. Przed znakiem równania oznaczono typ, którym jest Bool,zaś po znaku - wartości, jakie może mieć dany typ, oddzielone odczytywanym jako lub. Czyli rozumiemy to jako: Typ Bool może mieć wartość True lub False. Na przykład typ Int jest zdefiniowany w następujący sposób: data Int =

5 Aby utworzyć kształt w Haskell możemy posłużyć się jednym ze sposobów jakim jest krotka. Koło może być oznaczone jako (43.1, 55.0, 10.4), gdzie dwa pierwsze parametry oznaczają współrzędne środka okręgu, zaś trzeci promień koła. Nie jest to dobre rozwiązanie, gdyż mogą one stanowić wektor 3D lub coś innego. Lepszym sposobem jest reprezentacja kształtu za pomocą typów. Dla koła czy prostokąta mamy: data Shape = Circle Float Float Float Rectangle Float Float Float Float Koło zawiera trzy parametry określające tak jak powyżej dwa współrzędne środka okręgu oraz promień, określające typy wartości jakie będą zdefiniowane. Jeśli chodzi o prostokąt, to mamy dwa pierwsze współrzędne odnoszące się do lewego górnego rogu i dwa kolejne określające położenie dolnego prawego rogu.

6 powierzchnię: surface :: Shape -> Float surface ( Circle r) = pi * r ^ 2 surface ( Rectangle x1 y1 x2 y2 ) = ( abs $ x2 - x1 ) * ( abs $ y2 - y1 ) W wierszu polecenia wygląda to tak: ghci > surface $ Circle ghci > surface $ Rectangle

7 5 w wierszu, otrzymamy błąd. To dlatego, że Haskell nie wie, w jaki sposób wyświetlać nasz typ danych jako ciąg znaków. Aby się dowiedział, wystarczy dodać na końcu deklaracji deriving ( Show ). data Shape = Circle Float Float Float Rectangle Float Float Float Float deriving ( Show ) ghci > Circle Circle ghci > Rectangle Rectangle

8 data Point = Point Float Float deriving ( Show ) data Shape = Circle Point Float Rectangle Point Point deriving ( Show ) Więc teraz Circle ma dwa pola, z czego jeden jest typu Point a drugi jest typu Float. To sprawia, że łatwiej jest zrozumieć co jest czym. Podobnie jest w przypadku prostokąta. surface :: Shape -> Float surface ( Circle _ r) = pi * r ^ 2 surface ( Rectangle ( Point x1 y1 ) ( Point x2 y2 )) = ( abs $ x2 - x1 ) * ( abs $ y2 - y1 )

9 ghci > surface ( Circle ( Point 0 0) 24) Możemy utworzyć funkcję, która przesuwa kształt. Przenosi ona obiekty na osi x i y, a następnie zwraca nowy kształt, który ma te same wymiary, tyle że znajduje się gdzieś indziej. nudge :: Shape -> Float -> Float -> Shape nudge ( Circle ( Point x y) r) a b = Circle ( Point ( x + a) (y + b )) r nudge ( Rectangle ( Point x1 y1 ) ( Point x2 y2 )) a b = Rectangle ( Point ( x1 +a) ( y1 +b )) ( Point ( x2 + a) ( y2 + b ))

10 Jeśli nie chcemy przesuwać bezpośrednio z punktów, możemy dodać funkcję pomocniczą, która tworzy kształty danej wielkości zaczynając od współrzędnych zera, a następnie się nimi sugerować. basecircle :: Float -> Shape basecircle r = Circle ( Point 0 0) r baserect :: Float -> Float -> Shape baserect width height = Rectangle ( Point 0 0) ( Point width height ) ghci > nudge ( baserect ) 60 23

11 nawiasy z określonymi konstruktorami wartości, rozdzielając je przecinkami. Jeśli chcesz wyeksportować wszystkie konstruktory dla danego rodzaju, wystarczy wpisać w nawiasie... module Shapes ( Point (..), Shape (..), surface, nudne, basecircle, baserect ) where Możemy również nie eksportować żadnych konstruktorów

12 Składnia record

13 nazwisko, wiek, wzrost, numer telefonu i ulubiony smak lodów. data Person = Person String String Int Float String String deriving ( Show ) ghci > let guy = Person " Buddy " " Finklestein " " " " Chocolate " ghci > guy Person " Buddy " " Finklestein " " " " Chocolate " Zapis ten jest dość nieczytelny. Jak stworzyć funkcję, aby otrzymać oddzielne informacje od osoby? Funkcja,

14 Zamiast nazywania rodzajów pól jeden po drugim i oddzielania je spacjami, używamy nawiasów klamrowych. data Person = Person { firstname :: String lastname :: String age :: Int height :: Float phonenumber :: String flavor :: String deriving ( Show ),,,,, }

15 Za pomocą składni recordu do stworzenia tego typu danych, Haskell automatycznie wykonuje funkcje: firstname, lastname, age, height, phonenumber, flavor. ghci > :t flavor flavor :: Person -> String ghci > :t firstname firstname :: Person -> String Zaletą korzystania ze składni rekord jest to, że nie trzeba koniecznie umieszczać pola w odpowiedniej kolejności, dopóki mamy listę wszystkich danych. Ale jeśli nie używamy składni rekord, musimy określić je w kolejności.

16 Rodzaje parametrów

17 Konstruktor może podjąć pewne parametry wartości, a następnie stworzyć nową wartość. Na przykład, konstruktor Samochód przyjmuje trzy wartości i tworzy wartość samochodu. W podobny sposób konstruktorzy mogą wziąć typ jako parametr do produkcji nowych typów. data Maybe a = Nothing Just a Parametrem typu jest tutaj a. W zależności od tego, co chcemy w tym typie przechowywać, jeżeli nie jest to Nothing, ten konstruktor może stworzyć rodzaj Maybe Int, Maybe Car, Maybe String itd. Bez wartości może mieć typ po prostu Meybe.

18 Typ Nothing jest typem polimorficznym. Jeśli funkcja wymaga Meybe Int jako parametru, możemy mu przypisać Nothing, gdyż Nothing nie zawiera wartości. Typ Meybe może działać jak Meybe Int, podobie jak 5 może działać jak Int lub Double. Podobnie dzieje się w pustej liście []. Może ona działać jak lista niczego. Dlatego możemy zrobić [1,2,3] ++ [] i [ ha, ha, ha ] ++ [].

19 korzystamy z nich, gdy nasz typ danych będzie działał niezależnie od rodzaju wartości przechowywanych, tak jak Maybe. Jeśli typ może służyć jak pewnego rodzaju pudełko, warto z niego skorzystać. Na przykład, możemy zmienić typ danych z tego: data Car = Car { company :: String, model :: String, year :: Int } deriving ( Show ) Na ten: data Car a b c = Car { company :: a, model :: b

20 Biorąc pod uwagę naszą pierwszą definicję Car, możemy zrobić funkcję która wyświetla właściwości samochodu. tellcar :: Car -> String tellcar ( Car { company = c, model = m, year = y }) = " This " ++ c ++ " " ++ m ++ " was made in " ++ show y ghci > let stang = Car { company =" Ford ", model =" Mustang ", year =1967} ghci > tellcar stang " This Ford Mustang was made in 1967 "

21 data Vector a = Vector a a a deriving ( Show ) vplus :: ( Num t ) = > Vector t -> Vector t -> Vector t ( Vector i j k ) vplus ( Vector l m n) = Vector ( i+l) (j+ m) (k+n) vectmult :: ( Num t) => Vector t -> t -> Vector t ( Vector i j k ) vectmult m = Vector ( i*m) (j* m) ( k*m) scalarmult :: ( Num t) = > Vector t -> Vector t -> t ( Vector i j k ) scalarmult ( Vector l m n) = i*l + j*m + k *n Funkcja vplus pozwala dodać dwa wektory, ale tylko gdy zostaną wstawione ich odpowiednie komponenty, zaś ScalarMult służy do iloczynu skalarnego dwóch wektorów, a vectmult do pomnożenia wektora z skalarem (element ustalonego ciała nad którym zbudowany jest dowolny moduł). Funkcje te mogą działać z Vector Int,

22 Vector ghci > Vector vplus Vector vplus Vector Vector ghci > Vector vectmult 10 Vector ghci > Vector scalarmult Vector ghci > Vector vectmult ( Vector scalarmult Vector 9 2 4) Vector Bardzo ważne jest odróżnianie konstruktora typu od konstruktora wartości. Deklarując typ danych, część przed = jest konstruktorem typu, zaś po wskazuje na konstruktor wartości (ewentualnie oddzielone znakiem ). Nadanie funkcji typu Vector ttt -> Vector ttt -> t byłoby błędem, ponieważ musimy

23 Bartłomiej Zieliński YesNo typeclass (klasa typu YesNo) Functor typeclass (klasa typu Functor) Kinds (rodzaje) Input and Output (wejście i wyjście)

24 Klasa typu YesNo Klasa typu (ang. typeclass) YesNo pozwala na skonstruowanie klasy, której obiekty można stosować w wyrażeniach warunkowych w taki sposób, jakby były one typu Bool. Sama klasa typu jest ekwiwalentem interfejsów znanych z obiektowych języków programowania, takich jak C# czy Java.

25 Klasa typu YesNo Klasa implementująca YesNo może wyglądać następująco: class YesNo param where yesno :: param -> Bool yesnolist :: [param] -> Bool

26 Klasa typu YesNo Teraz możemy utworzyć konkretne instancje tej klasy. Dla przykładu, utwórzmy instancję, która jako parametr przyjmie liczbę i zwróci True, jeśli będzie ona różna od 0, lub False, jeśli będzie równa 0.

27 Klasa typu YesNo instance YesNo Int where yesnolist = undefined yesno 0 = False yesno _ = True Zastosowaliśmy tu słowo kluczowe undefined, ponieważ nie ma potrzeby na implementację metody yesnolist dla wartości typu Int, która nie jest listą.

28 Klasa typu YesNo Przykład: *Main> yesno (1 :: Int) True *Main> yesno (0 :: Int) False *Main> yesno ( :: Int) True

29 Klasa typu YesNo Tak naprawdę nie ma ograniczeń w kwestii tego, do czego możemy odnieść naszą klasę YesNo. Możemy np. sprawdzić poprawność wprowadzonego imienia na podstawie listy dostępnych imion.

30 Klasa typu YesNo instance YesNo Char where yesno = undefined yesnolist [] = False yesnolist str = (str `elem` ["Jan", "Waldemar", "Marianna", "Abdul"]) Znowu zastosowaliśmy słowo kluczowe undefined. Bez niego otrzymywalibyśmy w trakcie kompilacji ostrzeżenie, że metoda yesno nie została zaimplementowana, co wprawdzie nie uniemożliwiłoby uruchomienia programu, ale wprowadzałoby niepotrzebny stres.

31 Klasa typu YesNo Przykład: *Main> yesnolist "Jan" True *Main> yesnolist "abdul" False *Main> yesnolist "Abdul" True *Main> yesnolist "Konrad" False

32 Klasa typu YesNo Możemy oczywiście powstałe w ten sposób instacje stosować później w funkcjach, chociażby w instrukcjach warunkowych if. checkname :: [Char] -> [Char] checkname str = if (yesnolist str) then "Ok :)" else "Not ok :("

33 Klasa typu YesNo Przykład: *Main> map (checkname) ["Jan", "Waldemar", "Janina", "Karol", "Abdul"] ["Ok :)","Ok :)","Not ok :(", "Not ok :(","Ok :)"]

34 Klasa typu Functor Klasa typu Functor pozwala na określenie, w jaki sposób można wykonać mapowanie jednego elementu na drugi, na podstawie pewnej danej (np. funkcji lub liczby). Definicja: class Functor f where fmap :: (a -> b) -> f a -> f b (a->b) oznacza funkcję przyjmującą jako parametr a i zwracającą b.

35 Klasa typu Functor Przykładowo, znana nam dobrze funkcja map implementuje interfejs typu klasowego Functor w taki sposób, by działał on tylko na listach: map :: (a -> b) -> [a] -> [b] instance Functor [] where fmap = map Co wynika już z samej definicji, zarówno fmap, jak i map, zadziałają w identyczny sposób dla parametrów jako list.

36 Klasa typu Functor Przykład: *Main> map (length) ["Haskell", "Dwa Haskelle", "Pincet Haskelli"] [7,12,15] *Main> fmap (length) ["Haskell", "Dwa Haskelle", "Pincet Haskelli"] [7,12,15]

37 Klasa typu Functor Nasuwa się pytanie kiedy zaimplementowanie klasy typu Functor faktycznie ma sens? Odpowiedź brzmi: ma ono sens dla każdego typu, który może zachowywać się jak pudełko, tj. może być puste, pełne lub po prostu zawierać pewną ilość elementów wewnątrz siebie.

38 Klasa typu Functor Klasa typu Maybe jest funktorem i przyjmuje formę: instance Functor Maybe where fmap f (Just x) = Just (f x) fmap f Nothing = Nothing W tym momencie warto zauważyć, że jako parametr instancji podajemy tylko typ piszemy Maybe, a nie np. Maybe m. Ma to sens o tyle, iż klasa fmap oczekuje jako parametru typu, a nie konkretnej danej.

39 Klasa typu Functor Maybe pozwala nam na niepodejmowanie radykalnych kroków w stylu wyrzucenia błędu, gdy coś pójdzie nie tak w trakcie wykonywania pewnych obliczeń. Zamiast tego zwrócona zostanie nieco bardziej przyjazna wartość Nothing. Dobrym przykładem będzie tu próba dzielenia przez 0 domyślnie działanie zostanie wykonane i zwróci nieskończoność (Infinity), co nie zawsze jest pożądane istnieje możliwość, że w naszym programie nieskończoność to przyjmowalny wynik, jednak tutaj powstałaby ona wskutek błędu.

40 Klasa typu Functor divide :: Float -> Float -> Maybe Float divide x y y /= 0 = Just (x / y) otherwise = Nothing Przykład: *Main> divide 5 4 Just 1.25 *Main> divide 5 0 Nothing

41 Klasa typu Functor Inne użycie Maybe: Prelude> fmap (++ [1,2,3]) (Just [4,5,6]) Just [4,5,6,1,2,3] Prelude> fmap (++ [1,2,3]) Nothing Nothing

42 Rodzaje Rodzaj w teorii typów, jest to typ konstruktora typu ( typ typu ). - zgodnie z angielską Wikipedią, czyli jedynym słusznym źródłem informacji. Definicja, choć krótka, na pierwszy rzut oka jest dość zawiła. Mając daną klasę A, rodzajem w Haskellu nazwiemy konstruktor jej typu, a więc nie konstruktor obiektu typu A, tylko konstruktor samego typu A.

43 Rodzaje By sprawdzić rodzaj w Haskellu, możemy skorzystać z komendy :k (analogicznie jak :t, gdy chcemy sprawdzić typ), która jako parametr przyjmuje nazwę typu, np.: Prelude> :k Int Int :: * Prelude> :k [] [] :: * -> * Prelude> :k Char Char :: *

44 Rodzaje Gwiazdka w rodzaju oznacza, że określa on konkretny typ, nie wymagający już żadnego dodatkowego uszczegóławiania. Można ją odczytać po prostu jako typ.

45 Rodzaje Przypomnijmy, jak wyglądał rodzaj listy: [] :: * -> * Jak należy to odczytać? Otóż, lista ma rodzaj przyjmujący typ jako parametr i zwracający na podstawie owego parametru inny, konkretny typ. Np. dla Int otrzymamy: Prelude> :k [] Int [] Int :: * czyli już konkretny typ.

46 Rodzaje A co, jeśli rodzaj wymaga podania więcej, niż jednego typu? Prelude> :k Either Either :: * -> * -> * Jeśli podamy tylko jeden typ jako parametr, powinniśmy otrzymać już coś konkretniejszego, ale wciąż wymagającego dodatkowego skonkretyzowania. Rzeczywiście: Prelude> :k Either Int Either Int :: * -> *

47 Rodzaje Dopiero po podaniu dwóch typów jako parametrów otrzymamy pełnoprawny, konkretny typ: Prelude> :k Either Int Double Either Int Double :: *

48 Wejście i wyjście Zdefiniujmy prostą funkcję wypisującą pewien tekst do konsoli: let printhaskell = putstrln "Haskell" Nasuwa się pytanie co zwróci nam funkcja putstrln? Możemy to sprawdzić za pomocą komendy :t.

49 Wejście i wyjście Prelude> :t printhaskell printhaskell :: IO () printhaskell jest zatem funkcją, która nie przyjmuje żadnych parametrów i wykonuje akcję IO (skrót od angielskiego Input-Output), która w trakcie działania utworzy krotkę (ang. tuple) (). W krotce oczywiście mogą znaleźć się pewne dane, jednak w przypadku wypisania listy znaków do konsoli nie bardzo jest co w niej umieścić, dlatego też jest przedstawiona jako pusta.

50 Wejście i wyjście Napiszmy teraz pełnoprawny program (tj. poza GHCI), który połączy ze sobą kilka akcji IO, by zobaczyć, o co tu właściwie chodzi. Umieszczamy zatem w pliku o nazwie program.hs następującą funkcję: main = do putstrln "Podaj liczbę: " x <- getline putstrln ("cos(" ++ x ++ ") = " ++ show (cos (read x)))

51 Wejście i wyjście Wyniki akcji możemy przypisywać do nazw, z wyjątkiem akcji wykonanej na końcu bloku do. Plik umieszczamy w folderze C:\Haskell i kompilujemy go poleceniem: ghc C:\Haskell\program.hs Jako wynik dostajemy plik wykonywalny, a także plik interfejsu (.hi) oraz plik obiektowy (.o). Uruchamiamy program.exe.

52 Wejście i wyjście C:\Haskell\Program.exe Podaj liczbę: 5.1 cos(5.1) = Wykonane zostały tutaj trzy akcje IO, jedno wczytanie (getline) oraz dwa wypisania (putstrln). Sprawdziliśmy już typ putstrln, jednak co dostaniemy w przypadku getline, które teoretycznie zwraca coś konkretnego?

53 Wejście i wyjście Prelude> :t getline getline :: IO String String jest synonimem dla listy znaków postaci [Char]. Funkcja getline wykona zatem pewną akcję IO, w trakcie której utworzy wartość będącą Stringiem. By wydostać tę wartość z wnętrza getline już po wykonaniu akcji, stosujemy konstrukcję <-.

54 Wejście i wyjście Uzyskaną i przypisaną na poprzednim slajdzie do x listę możemy później dowolnie wykorzystywać w programie. Jest to uwaga o tyle istotna (szczególnie jeśli chodzi o przypisanie do x), że nie możemy zapisać tego programu w krótszej postaci, która wydawałaby się mieć sens: putstrln ("cos(" ++ x ++ ") = " ++ show (cos (read getline)))

55 Wejście i wyjście Dzieje się tak, ponieważ getline jako funkcja nie zwraca listy znaków. Jej typ (IO String) mówi nam jedynie, że dopiero po wykonaniu akcji IO (w tym wypadku przyjęciu danych z klawiatury) będzie można wydobyć z niej Stringa, tak więc musimy mieć tu pewną pośredniość, którą uzyskaliśmy dzięki wykorzystaniu x. Warto zauważyć, że w programie w miejscu wykonania getline nie zastosowaliśmy =, a <-, co daje nam do zrozumienia, iż nie jest to zwykłe przypisanie wyniku.

56 Wejście i wyjście A co, gdybyśmy spróbowali zastosować = zamiast <-? Wówczas nadalibyśmy tylko getline inną nazwę, którą można by stosować zamiennie. Akcje IO mogą być wykonywane tylko wtedy, gdy są przypisane do main, lub gdy kolejne, zagnieżdżone bloki do, w których się znajdują, ostatecznie wpadną do main.

57 Wejście i wyjście main = do putstrln "Podaj liczbę: " x <- getline do putstrln "Akcja IO w zagnieżdżonym bloku do" putstrln ("cos(" ++ x ++ ") = " ++ show (cos (read x)))

58 Wejście i wyjście Podaj liczbę: 10 Akcja IO w zagnieżdżonym bloku do cos(10) =

59 Wejście i wyjście Korzystanie z akcji IO jest też możliwe z poziomu GHCI, jednak nawet wtedy przed wypisaniem do konsoli poddane zostaną obróbce, m.in. w postaci konwersji na listę znaków funkcją show.

60 Wejście i wyjście Przeciwieństwem do <- jest return. Zastosowanie tego słowa może być niezwykle mylące, jeśli wcześniej programowało się w językach imperatywnych, tutaj bowiem nie służy ono do zwrócenia wartości, a do jej opakowania, tak jak robi to akcja IO.

61 Wejście i wyjście main = do x <- return "Something" putstrln (x ++ " in the way") Wynik: Something in the way

62 Wejście i wyjście Mogłoby się wydawać, że return to jedyna opcja, jeśli chcemy w bloku z akcjami IO przypisać pewnej konkretnej liście znaków nazwę. Okazuje się jednak, iż wciąż możemy stosować let: main = do let x = "Something" putstrln (x ++ " in the way")

63 Wejście i wyjście Poznaliśmy już dwie funkcje będące akcjami IO putstrln oraz getline. Teraz przedstawimy kilka dodatkowych, które mogą okazać się przydatne przy korzystaniu z wejścia/wyjścia.

64 Wejście i wyjście putstr działa dokładnie tak, jak putstrln, z tą różnicą, że nie przechodzi automatycznie do kolejnej linii. Prelude> putstr "Test" TestPrelude>

65 Wejście i wyjście putchar działa jak putstr, jednak pobiera jeden znak, a nie całą ich listę. TestPrelude> putchar 'x' xprelude>

66 Wejście i wyjście print wypisuje za pomocą funkcji show dowolną wartość, oczywiście o ile owa wartość jest instancją Show. Prelude> print Prelude> print ["A", "B"] ["A","B"]

67 Wejście i wyjście getchar działa jak getline, jednak zamiast całej listy pobiera tylko jeden znak. import Data.Char main = do currentchar <- getchar if (isupper currentchar) then do putchar currentchar main else return ()

68 Wejście i wyjście when pozwala na skrócenie instrukcji warunkowej przy korzystaniu z akcji IO jeśli warunek jest spełniony, zwróci wynik akcji przekazanej jako drugi parametr, a w przeciwnym razie pustą krotkę. import Control.Monad import Data.Char main = do currentchar <- getchar when (isupper currentchar) $ do putchar currentchar main

69 Wejście i wyjście sequence wykonuje przekazaną jako parametr listę akcji IO, tworząc listę wyników. import Control.Monad main = do resultslist <- sequence [getline, getline] print resultslist

70 Wejście i wyjście mapm, mapm_ wykonują zadaną funkcję mapującą na liście, przy czym druga wersja odrzuca dodatkowy wynik w postaci listy pustych krotek. Prelude> mapm print [1, 2] 1 2 [(),()] Prelude> mapm_ print [1, 2] 1 2

71 Wejście i wyjście forever wykonuje podaną akcję IO bez końca. (Przykład na następnym slajdzie.)

72 Wejście i wyjście import Control.Monad import System.Random main = do forever $ do randx <- randomio :: IO Int randy <- randomio :: IO Int let max = 500 putstrln ("Ile to jest " ++ show (randx `mod` max) ++ " + " ++ show (randy `mod` max) ++ "?") givenresult <- getline if (givenresult == show (randx `mod` max + randy `mod` max)) then print "Brawo!" else print ("Zle! Prawidlowa odpowiedz to " ++ show (randx `mod` max + randy `mod` max) ++ "!")

73 Wejście i wyjście form działa jak mapm, jednak ma parametry zamienione miejscami, co pozwala np. na wygodne zastosowanie wyrażenia lambda (w mapm musielibyśmy najpierw wprowadzić wyrażenie lambda, a dopiero potem parametr, co bardzo utrudniłoby zrozumienie kodu). (Przykład na następnym slajdzie).

74 Wejście i wyjście import Control.Monad main = do let personslist = ["John", "Jenny", "Barry"] form personslist (\name -> do putstrln ("Hello, " ++ name ++ "!"))

75 showeet.com Dużo złych rzeczy Kamila Dzwonkowska

76 OPERACJE WEJŚCIA-WYJŚCIA getchar czyta pojedynczy znak z terminala getchar :: IO Char getline czyta całą linię z terminala getline :: IO String getcontents operacja ta czyta wszystko z wejścia aż do napotkania znaku EOF getcontents :: IO String Stosuje leniwe rodzaj wejścia-wyjścia, ponieważ czyta wskazaną rzecz dopiero kiedy jest ona potrzebna. Taki sposób jest pożyteczny kiedy wyjście z jednego programu jest wejściem naszego programu.

77 interact :: (String String) IO () interact bierze funkcję typu String String jako argument. Całe wejście jest przekazywane do funkcji jako jego argument i w rezultacie zmienna typu string jest na wyjściu. Może być używany w programach gdzie otrzymują constents, a następnie oddają wynik. Także gdzie użytkownik podaje na wejściu jedną linię i program musi podać wynik dla tej linii, a następnie ponownie użytkownik wspisuje pewne dane I ponownie czeka na wynik. Jednak dużo zależy co dokładnie chcemy otrzymać za program.

78 Operacje na plikach type FilePath = String Nazwy plików i katalogów są wartościami typu String, które są zależne od systemu operacyjnego. P liki mogą być otwarte ułatwiając pracę w treści pliku. readfile :: FilePath IO String Funkcja ta czyta plik I zwraca jego zawartość jako string. Stosuje leniwą operację, podobnie jak getcontents. writefile :: FilePath String IO () Funkcja zajmuje ścieżkę do pliku i zapisuje w niej zmienną typu String kiedy inna funkcja zwróci wyjście do zapisania. Jeśli plik już istnieje to zostanie on wyczyszczony przed zapisaniem.

79 Warto także wspomnieć data Handle Haskell definiuje operacje dla odczytu i zapisu znaków do pliku, reprezentowane są przez wartości typu Handle. Każda wartośc tego typu jest uchwytem. Właściwości Handle: zarządzanie wejściem, wyjściem lub oboma może być otwarty, zamknięty lub częściowo zamknięty obiekt jest mozliwy do przeszukania buforowanie jest wyłączone lub włączone stdin :: Handle zarządza wejściem stdout :: Handle zarządza wyjściem stderr :: Handle zarządza wyjściem kiedy w programie jest błąd

80 withfile :: FilePath IOMode (Handle IO r) IO r Otwiera plik używając OpenFile i przekazuje uzyskany uchwyt do obliczeń. Uchwyt będzie wtedy zamknięty. openfile :: FilePath IOMode IO Handle Alokuje i zwraca nowy, otwart uchwyt do zarządzania plikiem. Zarządza on wejściem jeśli tryb jest ReadMode, a wyjście ma tryb WriteMode lub ReadMode i oba jeśli wejście I wyjście ma tryb ReadWriteMode. Jeśli plik nie istnieje lub jest otwarty dla wyjścia, to należy go stworzyć jako nowy plik. Jeśli jest tryb WriteMode I plik już istnieje, to wtedy zostanie wyczyszczony. Niektóre systemy w momencie kiedy plik zostanie wyczyszczony to go usuwają, więc nie ma gwaracji, że plik po użyciu OpenFile w trybie zapisu wciąż będzie istniał.

81 appendfile :: FilePath String IO () Różnica pomiędzy poprzednią funkcją jest taka, że appendfile nie czyści pliku ale jeśli już istnieje to tylko dołącza do niego następne rzeczy. System.Directory Teraz ta zabawna część z katalogami createdirectory :: FilePath IO () Tworzy nowy katalog, który początkowo nie istnieje. Ma parę ładnych errorów przez które może nie wyjść, np. ispermissionerror/ PermissionDenied proces miał niewystarczające uprawnienia do operacji. Katalog może już istnieć, może wystąpić fizyczny błąd systemu, nazwa katalogu nie może zostać przyjęta, nie istnieje ścieżka do tego katalogu lub brak miejsca w pamięci.

82 createdirectoryifmissing :: Bool jeśli chcemy stworzyć rodziców katalogu FilePath dodać ścieżkę do katalogu IO () jeśli pierwszy argument ma wartość True to funkcja stworzy rodziców katalogu jeśli ich nie ma/ nie można ich odnaleźć removedirectory :: FilePath IO () Usuwa istniejące już katalogi. Również jest podatny na errory. Występił fizyczny błąd, nie istnieje już katalog z taką nazwą, proces nie miał wystarczający uprawnień do usunięcia katalogu, nie można usunąć katalogu w tym momencie, nie istnieje do niego ścieżka.

83 renamedirectory :: FilePath FilePath IO () Zmienia nazwę katalogu. Najpierw trzeba podać ścieżkę ze starą nazwą a później z nową. Nie można zmienić nazwy, jeśli proponowana nowa nazwa już aktualnie istnieje. getcurrentdirectory :: IO FilePath Zwraca ścieżkę do katalogu, w którym się znajdujemy. Operacje na plikach removefile :: FilePath IO () Usuwa plik, ale tylko jeśli nie jest otwarty w programie.

84 renamefile :: FilePath FilePath IO () Zmienia nazwę pliku, który już istnieje w taki sposób, że zastępuje stary plik nowym plikiem z nową nazwą. Możemy również sprawdzić czy plik lub katalog istnieje doesfileexist :: FilePath IO Bool doesdirectoryexist :: FilePath IO Bool zwraca nam to wartość True albo False

85 Losowe dane Często w programach są nam potrzebne losowe dane, np. do zwykłych testów. Najprostszym przykładem losowości jest to polecenie randomnumber :: (Num a) => a wtedy określamy wartość randomnumber np. randomnumber = 13 wtedy zawsze zostanie nam szczęśliwa trzynastka, ale to kiepska losowość. Jeśli to można tak nazwać. W Haskellu możemy dostać losową liczbę dopiero gdy wykonujemy funckję, która przyjmuje jako parametr jej losowość i w oparciu o parametr zwraca pewną liczbę lub inny typ danych jaki określimy.

86 System.Random Ta biblioteka ma za zadanie rozwiązać nasz problem z pseudolosowym generowaniem liczb. Umożliwia ona generowanie powtarzalnych wyników w oparciu o pewien zalążek wokół którego ma generować te liczby. class RandomGen g where Klasa ta zapewnia wspólny interfejs dla generatorów liczb losowych. Metody tej klasy: next :: g -< (Int,g) Zwraca zmienne typu Int, które są równomiernie rozłożone w zakresie zwróconym przez genrange oraz nowy generator.

87 getrange :: g (Int, Int) Daje zakres wartości zwracanych przez generator. Wymagane jest, aby jeśli (a,b) = genrange g, wtedy a<b genrange zawsze zwraca parę określonych zmiennych typu Int Drugi warunek zapewnia, że genrange nie może badać swojego parametru, a tym samym zwracana wartość jest określona tylko przez RandomGen. To z kolei pozwala na wdrożenie do pojedynczego połączenia genrange ustalenie zakresu danego generatora bez obawy że następny generator będzie miał inny zakres.

88 split :: g (g,g) Operacja umożliwia uzyskanie dwóch różnych generatorów liczb losowych. Jest to bardzo przydatne w programach funkcjonalnych (np. gdy przechodzimy z generatora liczb losowych do rekurencyjnych wywołań), ale i tak mało kto używa split, bo w większości jest niepotrzebny. Biedny split :(

89 Standardowe generatory liczb pseudolosowych data StdGen różni się od RandomGen, że genrange ma co najmniej 30 bitów. Jego właściwości: gwarantuje sukces na dowolnym Stringu gwarantuje zużyć tylko skończoną część Stringu różnie zmienne typu String mogą skutkować różnymi wynikami. mkstdgen :: Int StdGen Zapewnia alternatywny sposób produkcji początkowego generatora poprzez mapowanie na Int w generatorze. Różne argumenty powinny produkować różne generatory.

90 Losowe wartości różnych typów class Random a where Metody tej klasy randomr :: RandomGen g => (a,a) g (a,g) Przyjmuje zasięg (lo,hi) i generator liczb losowych. Zwraca losową wartość równomiernie rozłożoną w zamkniętym przedziale [lo,hi] wraz z nowym generatorem. Nie określa to co zajdzie wtedy gdy lo będzie większe od hi (lo>hi). Dla stałych typów nie ma wymogu, że wartości lo i hi będą wyprodukowane, ale mogą być, wszystko zależy od implementacji I przedziału.

91 random :: RandomGen g => g (a,g) Tak samo jak w przypadku randomr, ale używamy domyślnego zakresu dla danego typu. Dla ograniczonych typów (np. Char) zakres jest wykle całym typem. Dla typów ułamkowych zakres jest zwykle częściowo zamknięty w przedziale [0,1). Dla Integer zakresem jest (arbitalnie) zakres Int.

92 randomrs :: RandomGen g => (a, a) -> g -> [a] Wariant randomr tworzący nieskończoną listę wartości losowych zamiast zwrócić nowy generator. randoms :: RandomGen g => g -> [a] Wariant random tworzący nieskończoną listę wartości losowych zamiast zwrócić nowy generator. randomrio :: (a, a) -> IO a Wariant randomr, który korzysta z globalnego generatora liczb losowych. randomio :: IO a Wariant random, który korzysta z globalnego generatora liczb losowych.

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

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

TWORZENIE SWOICH TYPÓW I TYPÓW KLAS HASKELL (RODZIAŁ 8) ZAJĘCIA 4

TWORZENIE SWOICH TYPÓW I TYPÓW KLAS HASKELL (RODZIAŁ 8) ZAJĘCIA 4 TWORZENIE SWOICH TYPÓW I TYPÓW KLAS HASKELL (RODZIAŁ 8) ZAJĘCIA 4 Wprowadzenie do typów algebraicznych WPROWADZENIE DO TYPÓW ALGEBRAICZNYCH Słowo data oznacza zdefiniowanie nowego typu danych Typ Bool

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

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

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, 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

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

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

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p. Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy Wykład 12 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji (1) Obsługa łańcuchów znakowych getchar(), putchar()

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

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

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p. Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni Wykład 6 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Wskaźnik do pliku Dostęp do pliku: zapis, odczyt,

Bardziej szczegółowo

Wstęp do Programowania, laboratorium 02

Wstęp do Programowania, laboratorium 02 Wstęp do Programowania, laboratorium 02 Zadanie 1. Napisać program pobierający dwie liczby całkowite i wypisujący na ekran największą z nich. Zadanie 2. Napisać program pobierający trzy liczby całkowite

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

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

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

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

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu. Zrozumienie funkcji danych statycznych jest podstawą programowania obiektowego. W niniejszym artykule opiszę zasadę tworzenia klas statycznych w C#. Oprócz tego dowiesz się czym są statyczne pola i metody

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

7. Pętle for. Przykłady

7. Pętle for. Przykłady . Pętle for Przykłady.1. Bez użycia pętli while ani rekurencji, napisz program, który wypisze na ekran kolejne liczby naturalne od 0 do pewnego danego n. 5 int n; 6 cin >> n; 8 for (int i = 0; i

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

Nazwa implementacji: Nauka języka Python wyrażenia warunkowe. Autor: Piotr Fiorek. Opis implementacji: Poznanie wyrażeń warunkowych if elif - else.

Nazwa implementacji: Nauka języka Python wyrażenia warunkowe. Autor: Piotr Fiorek. Opis implementacji: Poznanie wyrażeń warunkowych if elif - else. Nazwa implementacji: Nauka języka Python wyrażenia warunkowe Autor: Piotr Fiorek Opis implementacji: Poznanie wyrażeń warunkowych if elif - else. Nasz kalkulator umie już liczyć, ale potrafi przeprowadzać

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

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

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

Podstawy i języki programowania

Podstawy i języki programowania Podstawy i języki programowania Laboratorium 8 - wprowadzenie do obsługi plików tekstowych i wyjątków mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 11 grudnia 2017 1 / 34 mgr inż. Krzysztof

Bardziej szczegółowo

Część XVII C++ Funkcje. Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład.

Część XVII C++ Funkcje. Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład. Część XVII C++ Funkcje Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład. 2 3 Tworzymy deklarację i definicję funkcji o nazwie pobierzln() Funkcja

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

JAVA W SUPER EXPRESOWEJ PIGUŁCE

JAVA W SUPER EXPRESOWEJ PIGUŁCE JAVA W SUPER EXPRESOWEJ PIGUŁCE Obiekt Obiekty programowe to zbiór własności i zachowań (zmiennych i metod). Podobnie jak w świecie rzeczywistym obiekty posiadają swój stan i zachowanie. Komunikat Wszystkie

Bardziej szczegółowo

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

Podstawy Pythona. Krzysztof Gdawiec. Instytut Informatyki Uniwersytet Śląski Podstawy Pythona Krzysztof Gdawiec Instytut Informatyki Uniwersytet Śląski Słownik jest typem mutowalnym. Każdy element to para: klucz wartość. W celu stworzenia słownika pary klucz wartość umieszczamy

Bardziej szczegółowo

Programowanie 3 - Funkcje, pliki i klasy

Programowanie 3 - Funkcje, pliki i klasy Instytut Informatyki Uniwersytetu Śląskiego Laborki funkcja; parametry funkcji; typ zwracany; typ void; funkcje bez parametrów; napis.length() - jako przykład funkcji. Zadania funkcja dodająca dwie liczby;

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

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r. M. Trzebiński C++ 1/14 Podstawy języka C++ Maciej Trzebiński Instytut Fizyki Jądrowej Polskiej Akademii Nauk Praktyki studenckie na LHC IVedycja,2016r. IFJ PAN Przygotowanie środowiska pracy Niniejsza

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

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

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

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

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

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Zajęcia nr 2 Programowanie strukturalne dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Pętla while #include using namespace std; int main ()

Bardziej szczegółowo

Wykład 4: Klasy i Metody

Wykład 4: Klasy i Metody Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to

Bardziej szczegółowo

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec PROE wykład 3 klasa string, przeciążanie funkcji, operatory dr inż. Jacek Naruniec Przypomnienie z ostatnich wykładów Konstruktory/destruktory i kolejność ich wywołania w złożonej klasie. Referencja Obiekty

Bardziej szczegółowo

Przykład 1: Funkcja jest obiektem, przypisanie funkcji o nazwie function() do zmiennej o nazwie funkcja1

Przykład 1: Funkcja jest obiektem, przypisanie funkcji o nazwie function() do zmiennej o nazwie funkcja1 Rachunek Prawdopodobieństwa i Statystyka lab 3. Kaja Gutowska (Kaja.Gutowska@cs.put.poznan.pl) 1. Funkcje: - Funkcje nie powinny korzystać ze zmiennych globalnych. - Funkcje powinny być możliwie krótkie.

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

INFORMATYKA Studia Niestacjonarne Elektrotechnika

INFORMATYKA Studia Niestacjonarne Elektrotechnika INFORMATYKA Studia Niestacjonarne Elektrotechnika Wydział Elektrotechniki i Informatyki dr inż. Michał Łanczont Wydział Elektrotechniki i Informatyki p. E419 tel. 81-538-42-93 m.lanczont@pollub.pl http://lanczont.pollub.pl

Bardziej szczegółowo

Argumenty wywołania programu, operacje na plikach

Argumenty wywołania programu, operacje na plikach Temat zajęć: Argumenty wywołania programu, operacje na plikach Autor: mgr inż. Sławomir Samolej Zagadnienie 1. (Zmienne statyczne) W języku C można decydować o sposobie przechowywania zmiennych. Decydują

Bardziej szczegółowo

Elementy języka Haskell

Elementy języka Haskell Elementy języka Haskell Cechy języka Historia języka Proste przykłady Środowisko interakcyjne Typy i klasy Definiowanie funkcji Wyrażenia listowe Deklarowanie typów, danych i klas Monady Cechy języka zwięzłe

Bardziej szczegółowo

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie

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

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

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

Szablony klas, zastosowanie szablonów w programach

Szablony klas, zastosowanie szablonów w programach Szablony klas, zastosowanie szablonów w programach 1. Szablony klas i funkcji 2. Szablon klasy obsługującej uniwersalną tablicę wskaźników 3. Zastosowanie metody zwracającej przez return referencję do

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

lekcja 8a Gry komputerowe MasterMind

lekcja 8a Gry komputerowe MasterMind lekcja 8a Gry komputerowe MasterMind Posiadamy już elementarną wiedzę w zakresie programowania. Pora więc zabrać się za rozwiązywanie problemów bardziej złożonych, które wymagają zastosowania typowych

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

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

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Laboratorium 1. Wstęp do programowania w języku Java. Narzędzia 1. Aby móc tworzyć programy w języku Java, potrzebny jest zestaw narzędzi Java Development Kit, który można ściągnąć

Bardziej szczegółowo

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre) Uwagi dotyczące notacji kodu! Wyrazy drukiem prostym -- słowami języka VBA. Wyrazy drukiem pochyłym -- inne fragmenty kodu. Wyrazy w [nawiasach kwadratowych] opcjonalne fragmenty kodu (mogą być, ale nie

Bardziej szczegółowo

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

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6 JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM Wykład 6 1 SPECYFIKATOR static Specyfikator static: Specyfikator ten powoduje, że zmienna lokalna definiowana w obrębie danej funkcji nie jest niszczona

Bardziej szczegółowo

Informatyka II. Laboratorium Aplikacja okienkowa

Informatyka II. Laboratorium Aplikacja okienkowa Informatyka II Laboratorium Aplikacja okienkowa Założenia Program będzie obliczał obwód oraz pole trójkąta na podstawie podanych zmiennych. Użytkownik będzie poproszony o podanie długości boków trójkąta.

Bardziej szczegółowo

C++ Przeładowanie operatorów i wzorce w klasach

C++ Przeładowanie operatorów i wzorce w klasach C++ i wzorce w klasach Andrzej Przybyszewski numer albumu: 89810 14 listopada 2009 Ogólnie Przeładowanie (przeciążanie) operatorów polega na nadaniu im nowych funkcji. Przeładowanie operatora dokonuje

Bardziej szczegółowo

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

Dekoratora używa się wstawiając linijkę zaczynającą się przed definicją dekorowanego obiektu (klasy czy funkcji). Dekoratory są w miarę ezoteryczną cechą Pythona w przeciwieństwie do funkcji, klas czy iteratorów nie są powszechną cechą języków programowania. Niemniej, warto je omówić mimo wszystko, gdyż są niezwykle

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

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.) Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.) przeznaczony do programowania zarówno pod ios jak i Mac OS X bazuje na logice Objective-C bez kompatybilności

Bardziej szczegółowo

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w obrębie skryptu. Wyrażenia include() i require() są niemal

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

Rozdział 4 KLASY, OBIEKTY, METODY

Rozdział 4 KLASY, OBIEKTY, METODY Rozdział 4 KLASY, OBIEKTY, METODY Java jest językiem w pełni zorientowanym obiektowo. Wszystkie elementy opisujące dane, za wyjątkiem zmiennych prostych są obiektami. Sam program też jest obiektem pewnej

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

3. Instrukcje warunkowe

3. Instrukcje warunkowe . Instrukcje warunkowe Przykłady.1. Napisz program, który pobierze od użytkownika liczbę i wypisze na ekran słowo ujemna lub nieujemna, w zależności od tego czy dana liczba jest ujemna czy nie. 1 #include

Bardziej szczegółowo

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie

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

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

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki Wykład 2 - podstawy języka C++ Instytut Automatyki i Robotyki Warszawa, 2014 Wstęp Plan wykładu Struktura programu. Zmienne i ich nazwy, podstawowe typy: całkowite, rzeczywiste, znakowe i napisowe. Instrukcje:

Bardziej szczegółowo

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi EGZAMIN PIERWSZY (25 CZERWCA 2013) JĘZYK C++ poprawiam ocenę pozytywną z egzaminu 0 (zakreśl poniżej x) 1. Wśród poniższych wskaż poprawną formę definicji

Bardziej szczegółowo

Kompilacja javac prog.java powoduje wyprodukowanie kilku plików o rozszerzeniu.class, m.in. Main.class wykonanie: java Main

Kompilacja javac prog.java powoduje wyprodukowanie kilku plików o rozszerzeniu.class, m.in. Main.class wykonanie: java Main Język obiektowy Wykład 13 Programowanie obiektowe z lotu ptaka, str 1 James Gosling, Mike Sheridan, Patrick Naughton Sun Microsystems 1995(20latmłodszyodC) C jest językiem proceduralnym Java jest językiem

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

Czym są właściwości. Poprawne projektowanie klas

Czym są właściwości. Poprawne projektowanie klas Z akcesorów get i set korzysta każdy kto programuje w C#. Stanowią one duże udogodnienie w programowaniu obiektowym. Zapewniają wygodę, bezpieczeństwo i znacząco skracają kod. Akcesory są ściśle związane

Bardziej szczegółowo

Przypomnienie o klasach i obiektach

Przypomnienie o klasach i obiektach Wykład 14 Programowanie obiektowe ciąg dalszy, str 1 Przypomnienie o klasach i obiektach -5 należydo int 314 należy do double false należy do boolean {27, 314,-15 należy do double[] wartość należy do typ

Bardziej szczegółowo

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane Stałe Oprócz zmiennych w programie mamy też stałe, które jak sama nazwa mówi, zachowują swoją wartość przez cały czas działania programu. Można

Bardziej szczegółowo

PHP 5 język obiektowy

PHP 5 język obiektowy PHP 5 język obiektowy Wprowadzenie Klasa w PHP jest traktowana jak zbiór, rodzaj różnych typów danych. Stanowi przepis jak stworzyć konkretne obiekty (instancje klasy), jest definicją obiektów. Klasa reprezentuje

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

Aplikacje w środowisku Java

Aplikacje w środowisku Java Aplikacje w środowisku Java Materiały do zajęć laboratoryjnych Klasy i obiekty - dziedziczenie mgr inż. Kamil Zieliński Katolicki Uniwersytet Lubelski Jana Pawła II 2018/2019 W ramach poprzedniego laboratorium

Bardziej szczegółowo

Laboratorium 1 - Programowanie proceduralne i obiektowe

Laboratorium 1 - Programowanie proceduralne i obiektowe Laboratorium 1 - Programowanie proceduralne i obiektowe mgr inż. Kajetan Kurus 4 marca 2014 1 Podstawy teoretyczne 1. Programowanie proceduralne (powtórzenie z poprzedniego semestru) (a) Czym się charakteryzuje?

Bardziej szczegółowo

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec PROE wykład 2 operacje na wskaźnikach dr inż. Jacek Naruniec Zmienne automatyczne i dynamiczne Zmienne automatyczne: dotyczą kontekstu, po jego opuszczeniu są usuwane, łatwiejsze w zarządzaniu od zmiennych

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

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

Ćwiczenie: JavaScript Cookies (3x45 minut)

Ćwiczenie: JavaScript Cookies (3x45 minut) Ćwiczenie: JavaScript Cookies (3x45 minut) Cookies niewielkie porcje danych tekstowych, które mogą być przesyłane między serwerem a przeglądarką. Przeglądarka przechowuje te dane przez określony czas.

Bardziej szczegółowo

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

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów Operatory są elementami języka C++. Istnieje zasada, że z elementami języka, takimi jak np. słowa kluczowe, nie można dokonywać żadnych zmian, przeciążeń, itp. PRZECIĄŻANIE OPERATORÓW Ale dla operatorów

Bardziej szczegółowo

Zmienne i struktury dynamiczne

Zmienne i struktury dynamiczne Zmienne i struktury dynamiczne Zmienne dynamiczne są to zmienne, które tworzymy w trakcie działania programu za pomocą operatora new. Usuwa się je operatorem delete. Czas ich występowania w programie jest

Bardziej szczegółowo

ROZDZIAŁ 8: KLASY TYPÓW

ROZDZIAŁ 8: KLASY TYPÓW ROZDZIAŁ 8: KLASY TYPÓW Definicja typu Bool: data Bool = False True Słowo kluczowe data oznacza, że definiujemy nowy typ danych. Część przed = określa typ jakim jest bool. Cześć po.. = są to konstruktory

Bardziej szczegółowo

Programowanie Komputerów

Programowanie Komputerów Programowanie Komputerów Łukasz Kuszner pokój 209, WETI http://www.kaims.pl/ kuszner/ kuszner@eti.pg.gda.pl Wykład 30 godzin, Laboratoria 30 godzin 2012/ Strona 1 z 17 1. Typy i zmienne Jak wiemy, komputer

Bardziej szczegółowo

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

Jak napisać program obliczający pola powierzchni różnych figur płaskich? Część IX C++ Jak napisać program obliczający pola powierzchni różnych figur płaskich? Na początku, przed stworzeniem właściwego kodu programu zaprojektujemy naszą aplikację i stworzymy schemat blokowy

Bardziej szczegółowo

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Konstruktory Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Rozpatrzmy przykład przedstawiający klasę Prostokat: class

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

WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy

WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy Pojęcie klasy Program napisany w języku Java składa się ze zbioru klas. Każda klasa zawiera

Bardziej szczegółowo

Język C zajęcia nr 11. Funkcje

Język C zajęcia nr 11. Funkcje Język C zajęcia nr 11 Funkcje W języku C idea podprogramów realizowana jest wyłącznie poprzez definiowanie i wywołanie funkcji. Każda funkcja musi być przed wywołaniem zadeklarowana. Deklaracja funkcji

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

Język JAVA podstawy. wykład 1, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Język JAVA podstawy. wykład 1, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna Język JAVA podstawy wykład 1, część 3 1 Język JAVA podstawy Plan wykładu: 1. Krótka historia Javy 2. Jak przygotować sobie środowisko programistyczne 3. Opis środowiska JDK 4. Tworzenie programu krok po

Bardziej szczegółowo

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++ Podstawy Informatyki Inżynieria Ciepła, I rok Wykład 10 Kurs C++ Historia Lata 70-te XX w język C (do pisania systemów operacyjnych) "The C programming language" B. Kernighan, D. Ritchie pierwszy standard

Bardziej szczegółowo

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

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie Krzysztof Banaś Podstawy programowania 1 są sposobem na przechowywanie w ramach pojedynczej zmiennej zestawu zmiennych różnych typów,

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

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