Типове и класове в Haskell

Размер: px
Започни от страница:

Download "Типове и класове в Haskell"

Препис

1 Типове и класове в Haskell Трифон Трифонов Функционално програмиране, 2018/19 г. 12 декември 2018 г. 8 януари 2019 г. Трифон Трифонов (ФП-И 18/19) Типове и класове в Haskell / 29

2 Полиморфизъм Видове полиморфизъм в Haskell В Haskell има два основни вида полиморфизъм. параметричен полиморфизъм възможност да създаваме конструкции, които обработват елементи от различни типове по универсален начин такива конструкции наричаме генерични (generic) параметризират се с типови променливи, които могат да приемат произволен тип за стойност ad hoc полиморфизъм възможност да създаваме конструкции, които обработват елементи от различни типове по специфичен начин такива конструкции наричаме претоварени (overloaded) налагат механизъм за разпределение (dispatch), който определя коя специфична реализация на конструкцията трябва да се използва в конкретен случай Трифон Трифонов (ФП-И 18/19) Типове и класове в Haskell / 29

3 Полиморфизъм Параметричен полиморфизъм Генеричните конструкции в Haskell са два вида: генерични типове, конструирани чрез използване на типови променливи функциите, кортежите и списъците могат да генерични type UnaryFunction a = a -> a type Matrix a = [[a]] type Dictionary k v = [(k, v)] генерични функции, при които една и съща имплементация работи за различни типове length :: [a] -> Int map :: (a -> b) -> [a] -> [b] repeated :: Int -> UnaryFunction a -> UnaryFunction a transpose :: Matrix a -> Matrix a keys :: Dictionary k v -> [k] [] :: [a] константите са частен случай на функции (функции без параметри) Трифон Трифонов (ФП-И 18/19) Типове и класове в Haskell / 29

4 Полиморфизъм Ad hoc полиморфизъм В Haskell имаме претоварени константи, операции и функции: претоварени константи 5 може да означава цяло, дробно или комплексно число, в зависимост от контекста 5.0 може да означава рационално число, число с плаваща запетая или комплексно число maxbound е максималната стойност на ограничени типове претоварени операции + може да събира цели, дробни, или комплексни числа / може да дели рационални, дробни или комплексни числа == може да сравнява числа, символи, кортежи или списъци претоварени функции elem може да търси елемент в списък от сравними елементи show може да извежда елемент, който има низово представяне [from..to] може да генерира списък от елементи от тип, в който имаме линейна наредба Трифон Трифонов (ФП-И 18/19) Типове и класове в Haskell / 29

5 Класове от типове Класове от типове (typeclasses) Дефиниция Клас от типове наричаме множество от типове, които поддържат определен тип поведение, зададено чрез множество от имена на функции и техните типове. Функциите на даден клас наричаме методи. Класовете от типове дават структуриран подход към ad hoc полиморфизма. Примери: Eq е класът от типове, които поддържат сравнение Ord е класът от типове, които поддържат линейна наредба Show е класът от типове, чиито елементи могат да бъдат извеждани в низ Num е класът на всички числови типове Трифон Трифонов (ФП-И 18/19) Типове и класове в Haskell / 29

6 Класове от типове Дефиниране на класове от типове class <клас> <типова-променлива> where {<метод>{,<метод>} :: <тип>} {<метод> = <реализация-по-подразбиране>} Примери: class Eq a where (==), (/=) :: a -> a -> Bool x /= y = not (x == y) x == y = not (x /= y) class Measurable a where size :: a -> Int empty :: a -> Bool empty x = size x == 0 Трифон Трифонов (ФП-И 18/19) Типове и класове в Haskell / 29

7 Класове от типове Класови ограничения Дефиниция Ако C e клас, а t е типова променлива, то C t наричаме класово ограничение. Множество от класови ограничения наричаме контекст. Класовите ограничения ни дават възможност да дефинираме претоварени функции. Примери: elem :: (Eq a) => a -> [a] -> Bool maximum :: (Ord a) => [a] -> a (^) :: (Integral b, Num a) => a -> b -> a larger :: (Measurable a) => a -> a -> Bool larger x y = size x > size y Трифон Трифонов (ФП-И 18/19) Типове и класове в Haskell / 29

8 Класове от типове Дефиниране на екземпляри на клас Дефиниция Екземпляр (инстанция) на клас наричаме тип, за който са дефинирани методите на класа. instance <клас> <тип> where {<дефиниция-на-метод>} Примери: instance Eq Bool where True == True = True False == False = True _ == _ = False instance Measurable Integer where size 0 = 0 size n = 1 + size (n div 10) Трифон Трифонов (ФП-И 18/19) Типове и класове в Haskell / 29

9 Класове от типове Екземпляри с контекст Можем да добавяме контекст в дефиницията за екземпляри: instance [<контекст> =>] <клас> <тип> where {<дефиниция-на-метод>} Примери: instance (Eq a, Eq b) => Eq (a,b) where (x,y) == (u,t) = x == u && y == t instance (Measurable a, Measurable b) => Measurable (a,b) where size (x,y) = size x + size y instance Measurable a => Measurable [a] where size = sum. map size Трифон Трифонов (ФП-И 18/19) Типове и класове в Haskell / 29

10 Класове от типове Наследяване Можем да дефинираме клас B, който допълва методите на вече съществуващ клас A. Тогава казваме, че: Класът B наследява (разширява) класа A Класът B е подклас (производен клас, subclass) на класа A Класът A е надклас (родителски клас, superclass) на класа B Трифон Трифонов (ФП-И 18/19) Типове и класове в Haskell / 29

11 Класове от типове Пример: Стандартен клас Ord class (Eq a) => Ord a where (<), (<=), (>=), (>) :: a -> a -> Bool max, min :: a -> a -> a compare :: a -> a -> Ordering compare x y x == y = EQ x < y = LT otherwise = GT x < y == compare x y == LT x > y == compare x y == GT x == y == compare x y == EQ x <= y == compare x y /= GT x >= y == compare x y /= LT max x y == if x > y then x else y min x y == if x < y then x else y Трифон Трифонов (ФП-И 18/19) Типове и класове в Haskell / 29

12 Класове от типове Множествено наследяване Даден клас може да наследява едновременно няколко родителски класа. Примери: class (Ord a, Num a) => Real a where... class (Ord a, Measurable a) => OrdMeasurable a where sortbyorder, sortbysize :: [a] -> [a] Трифон Трифонов (ФП-И 18/19) Типове и класове в Haskell / 29

13 Класове от типове Сравнение на Haskell с други обектно-ориентирани езици Класовете в Haskell съответстват на абстрактни класове или интерфейси Методите в Haskell съответстват на чисти виртуални функции Класовете и обектите в C++ нямат директен еквивалент в Haskell В Haskell данните винаги са разделени от методите Няма ограничения на достъпа (public, private) Няма понятие за разширяване на тип данни, само на интерфейс Съответно, няма подтипов полиморфизъм Екземплярите съответстват на имплементиране (наследяване) на интерфейси В C++ и Java то може да бъде и множествено В Haskell претоварените функции имат еднозначно определен тип В C++ сме свободни да пишем функции с едно и също име и различни сигнатури В Haskell сме длъжни да наложим класови ограничения В Haskell не можем да правим насилствено преобразуване на тип към даден клас (casting) Трифон Трифонов (ФП-И 18/19) Типове и класове в Haskell / 29

14 Алгебрични типове Потребителски дефинирани типове В Haskell имаме възможност да дефинираме нови типове данни. data <тип> [<параметри>] = <дефиниция> <тип> трябва да започва с главна буква <параметри> е списък от различни типови променливи <дефиниция> ::= <елемент> { <елемент> } <дефиниция> описва различните варианти за елементи на типа <елемент> ::= <конструктор> { <тип-на-параметър> } всеки вид елемент на типа се описва с уникален <конструктор> <конструктор> трябва да започва с главна буква <конструктор> може да има произволен брой параметри, чиито типове се задават в дефиницията Трифон Трифонов (ФП-И 18/19) Типове и класове в Haskell / 29

15 Алгебрични типове Изброени типове Най-простият вид потребителски дефинирани типове са изброените типове. Примери: data Bool = False True data Compare = LT EQ GT data Weekday = Mon Tue Wed Thu Fri Sat Sun today :: Weekday today = Thu isweekend :: Weekday -> Bool isweekend Sat = True isweekend Sun = True isweekend _ = False Трифон Трифонов (ФП-И 18/19) Типове и класове в Haskell / 29

16 Алгебрични типове Записи Друга възможност за потребителски дефинирани типове са записите. type Name = String type Score = Int data Player = Player Name Score Да, името на типа може да съвпада с името на (единствения) конструктор katniss :: Player katniss = Player "Katniss Everdeen" 45 getname :: Player -> String getname (Player name _) = name better :: Player -> Player -> String better (Player name1 score1) (Player name2 score2) score1 > score2 = name1 otherwise = name2 Трифон Трифонов (ФП-И 18/19) Типове и класове в Haskell / 29

17 Алгебрични типове Записи с полета По същество записите са еквивалентни на кортежите......които по същество са декартово произведение на типове Би било удобно, ако имахме имена на всяко от полетата В Haskell има специален синтаксис: { <поле>::<тип> {, <поле>::<тип> }} за всяко от полетата автоматично се дефинира функция селектор Пример: data Player = Player { name :: String, score :: Int } name :: Player -> String score :: Player -> Int Трифон Трифонов (ФП-И 18/19) Типове и класове в Haskell / 29

18 Алгебрични типове Алтернативи Можем да дефинираме типове, които обединяват няколко други типа. Примери: data Shape = Circle { radius :: Double } Rectangle { width :: Double, height :: Double} circle :: Shape circle = Circle 2.3 rect :: Shape rect = Rectanlge area :: Shape -> Double area (Circle r) = pi * r^2 area (Rectangle w h) = w * h enlarge :: Shape -> Shape enlarge (Circle r) = Circle (2*r) enlarge (Rectangle w h) = Rectangle (2*w) (2*h) Трифон Трифонов (ФП-И 18/19) Типове и класове в Haskell / 29

19 Алгебрични типове Автоматични екземпляри на класове При работа с алгебрични типове се сблъскваме с един недостатък: Circle 2.3 == Circle 4.5 Грешка! circle circle :: Shape [Mon..Fri] Грешка! Thu < Sat Грешка! За използването на тези елементарни операции се налага ръчно да пишем тривиални екземпляри за класове като Eq, Ord, Enum, Show: instance Eq Shape where Circle x == Circle y = x == y Rectangle a b == Rectangle c d = (a,b) == (c,d) _ == _ = False instance Show Shape where show (Circle x) = "Circle " ++ show x show (Rectangle a b) = "Rectangle " ++ show a ++ " " ++ show b Трифон Трифонов (ФП-И 18/19) Типове и класове в Haskell / 29

20 Алгебрични типове Автоматични екземпляри на класове Haskell има възможност за автоматично извеждане на екземпляри на класовете Eq, Ord, Enum, Show, Read. data <тип> [<параметри>] = <дефиниция> deriving <класове> <класове> е кортеж от стандартни класове, екземпляри за които искаме автоматично да бъдат изведени data Weekday = Mon Tue Wed Thu Fri Sat Sun deriving (Eq, Ord, Enum, Show, Read) Eq: два елемента се считат равни, ако имат равни конструктори с равни параметри Ord: елементите се сравняват лексикографски, като конструкторите се считат наредени в реда, в който са дефинирани Enum: позволено само за изброени типове Show, Read: извежда се/въвежда се конструкторът и след това всеки един от параметрите му Трифон Трифонов (ФП-И 18/19) Типове и класове в Haskell / 29

21 Алгебрични типове Параметризирани типове Потребителските типове могат да бъдат генерични, т.е. да зависят от типови параметри. Примери: data Maybe a = Nothing Just a deriving (Eq, Ord, Show, Read) Just 5 :: Maybe Int Just "wow" :: Maybe String Nothing :: Maybe a Just Nothing :: Maybe (Maybe a) getat :: Int -> [a] -> Maybe a getat _ [] = Nothing getat 0 (x:_) = Just x getat n (_:xs) = getat (n-1) xs Трифон Трифонов (ФП-И 18/19) Типове и класове в Haskell / 29

22 Алгебрични типове Сума на типове data Either a b = Left a Right b deriving (Eq, Ord, Show, Read) Left 3 :: Either Int b Right a :: Either a Char Задача. Да се напише функция, която по даден списък от играчи намира най-добрия резултат, ако е постигнат от единствен играч, или списък от имената на играчите, които са постигнали най-добър резултат. searchbest :: [Player] -> Either Int [String] searchbest players length bestplayers == 1 = Left best otherwise = Right $ map name bestplayers where best = maximum $ map score players bestplayers = filter ((==best).score) players Трифон Трифонов (ФП-И 18/19) Типове и класове в Haskell / 29

23 Рекурсивни алгебрични типове Рекурсивни алгебрични типове Можем да дефинираме типове, позовавайки се на самите тях рекурсивно. Пример: data Nat = Zero Succ Nat deriving (Eq, Ord, Show, Read) five = Succ $ Succ $ Succ $ Succ $ Succ Zero fromnat :: Nat -> Int fromnat Zero = 0 fromnat (Succ n) = fromnat n + 1 fromnat five 5 Трифон Трифонов (ФП-И 18/19) Типове и класове в Haskell / 29

24 Рекурсивни алгебрични типове Двоични числа data Bin = One BitZero Bin BitOne Bin deriving (Eq, Ord, Show, Read) six = BitZero $ BitOne $ One frombin :: Bin -> Int frombin One = 1 frombin (BitZero b) = 2 * frombin b frombin (BitOne b) = 2 * frombin b + 1 succbin :: Bin -> Bin succbin One = BitZero One succbin (BitZero b) = BitOne b succbin (BitOne b) = BitZero (succbin b) frombin $ succbin $ succbin six 8 Трифон Трифонов (ФП-И 18/19) Типове и класове в Haskell / 29

25 Рекурсивни алгебрични типове Списъци data List a = Nil Cons a (List a) deriving (Eq, Ord, Show, Read) l = Cons 1 $ Cons 2 $ Cons 3 $ Nil можем да използваме синтаксиса за записи: data List a = Nil Cons { listhead :: a, listtail :: List a } deriving (Eq, Ord, Show, Read) listhead l 1 fromlist :: List a -> [a] fromlist Nil = [] fromlist (Cons x t) = x:fromlist t (+++) :: List a -> List a -> List a Nil +++ l = l Cons h t +++ l = Cons h (t +++ l) Трифон Трифонов (ФП-И 18/19) Типове и класове в Haskell / 29

26 Рекурсивни алгебрични типове Двоични дървета data BinTree a = Empty Node { root :: a, left :: BinTree a, right :: BinTree a } deriving (Eq, Ord, Show, Read) Примери: t = Node 3 (Node 1 Empty Empty) (Node 5 Empty Empty) depth :: BinTree a -> Int depth Empty = 0 depth (Node x l r) = max (depth l) (depth r) + 1 leaves :: BinTree a -> [a] leaves Empty = [] leaves (Node x Empty Empty) = [x] leaves (Node x l r) = leaves l ++ leaves r Трифон Трифонов (ФП-И 18/19) Типове и класове в Haskell / 29

27 Рекурсивни алгебрични типове Функции от по-висок ред за двоични дървета Трансформиране на двоично дърво (map): mapbintree :: (a -> b) -> BinTree a -> BinTree b mapbintree _ Empty = Empty mapbintree f (Node x l r) = Node (f x) (mapbintree f l) (mapbintree f r) Свиване на двоично дърво (foldr): foldrbintree :: (a -> b -> b) -> b -> BinTree a -> b foldrbintree _ nv Empty = nv foldrbintree op nv (Node x l r) = foldrbintree op (x op foldrbintree op nv r) l Трифон Трифонов (ФП-И 18/19) Типове и класове в Haskell / 29

28 Рекурсивни алгебрични типове Дървета с произволен брой наследници Можем да правим взаимнорекурсивни дефиниции: data Tree a = Tree { root :: a, subtrees :: TreeList a } data TreeList a = None SubTree { firsttree :: Tree a, resttrees :: TreeList a } leaf x = Tree x None tree = Tree 1 $ SubTree (leaf 2) $ SubTree (Tree 3 $ SubTree (leaf 4) $ None) $ SubTree (leaf 5) $ None level :: Int -> Tree a -> [a] level 0 (Tree x _) = [x] level k (Tree _ ts) = leveltrees (k - 1) ts leveltrees :: Int -> TreeList a -> [a] leveltrees _ None = [] leveltrees k (SubTree t ts) = level k t ++ leveltrees k ts Трифон Трифонов (ФП-И 18/19) Типове и класове в Haskell / 29

29 Рекурсивни алгебрични типове Полиморфни списъци data SExpr = SBool Bool SChar Char SInt Int SDouble Double SList { getlist :: [SExpr] } deriving (Eq, Ord, Show, Read) sexpr = SList [SInt 2, SChar a, SList [SBool True, SDouble 1.2, SList []]] countatoms :: SExpr -> Int countatoms (SList sls) = sum $ map countatoms sls countatoms _ = 1 flatten :: SExpr -> SExpr flatten (SList sls) = SList $ concat $ map (getlist. flatten) sls flatten x = SList [x] Трифон Трифонов (ФП-И 18/19) Типове и класове в Haskell / 29

Синтаксис за дефиниране на функции Трифон Трифонов Функционално програмиране, спец. Информатика, 2015/16 г. 6 януари 2016 г. Трифон Трифонов (ФП-И 15/

Синтаксис за дефиниране на функции Трифон Трифонов Функционално програмиране, спец. Информатика, 2015/16 г. 6 януари 2016 г. Трифон Трифонов (ФП-И 15/ Синтаксис за дефиниране на функции Трифон Трифонов Функционално програмиране, спец. Информатика, 2015/16 г. 6 януари 2016 г. Трифон Трифонов (ФП-И 15/16) Синтаксис за дефиниране на функции 6 януари 2016

Подробно

2. Наследяване в C++ Съдържание Съдържание Наследяване (Rev: 1.2) Любомир Чорбаджиев 1 1 февруари 2007 г. 1 Наследяване 1 2

2. Наследяване в C++ Съдържание Съдържание Наследяване (Rev: 1.2) Любомир Чорбаджиев 1 1 февруари 2007 г. 1 Наследяване 1 2 2. Съдържание Съдържание Наследяване (Rev: 1.2) Любомир Чорбаджиев 1 lchorbadjiev@elsys-bg.org 1 февруари 2007 г. 1 Наследяване 1 2 2 3 Полиморфизъм 9 1. Наследяване Наследяване UML UML unified modeling

Подробно

Виртуални функции

Виртуални функции Виртуални функции Статично свързване Как компилаторът избира кой метод или коя функция да бъде извикана? Прави се сравнение между формални и фактически параметри и се избира най-точното съвпадение в случай,

Подробно

-

- Лениво оценяване и програмиране от по-висок ред Трифон Трифонов Функционално програмиране, спец. Информатика, 2015/16 г. 7 януари 2016 г. Трифон Трифонов (ФП-И 15/16) Лениво оценяване 7 януари 2016 г.

Подробно

Указатели. Маисиви, указатели, параметри на функции Калин Георгиев 21 декември 2016 г. Калин Георгиев Увод в програмирането 21 декември 2016 г. 1 / 23

Указатели. Маисиви, указатели, параметри на функции Калин Георгиев 21 декември 2016 г. Калин Георгиев Увод в програмирането 21 декември 2016 г. 1 / 23 Указатели. Маисиви, указатели, параметри на функции Калин Георгиев 21 декември 2016 г. Калин Георгиев Увод в програмирането 21 декември 2016 г. 1 / 23 Указатели! Калин Георгиев Увод в програмирането 21

Подробно

Lush Green

Lush Green Класове Какво са класовете? Основен инструмент на ООП Средство за дефиниране на абстрактни типове данни Синтактична конструкция, която позволява логическо групиране на данни и операциите над тях Дефиниция

Подробно

Класове в C++ (Rev: 742) Любомир Чорбаджиев 1 20 октомври 2006 г. Съдържание Съдържание 1 Обектно-ориентирано програмиране 1

Класове в C++ (Rev: 742) Любомир Чорбаджиев 1 20 октомври 2006 г. Съдържание Съдържание 1 Обектно-ориентирано програмиране 1 Класове в C++ (Rev: 742) Любомир Чорбаджиев 1 lchorbadjiev@elsys-bg.org 20 октомври 2006 г. Съдържание Съдържание 1 Обектно-ориентирано програмиране 1 1.1 Модулност............................ 1 1.2 Обектно-ориентирана

Подробно

4

4 Наследяване и 4 Трифон Трифонов Обектно-ориентирано програмиране, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 11 май 2017 г. Трифон Трифонов (ООП 16/17) Наследяване и голямата

Подробно

Сериализация Калин Георгиев 13 май 2016 г. Калин Георгиев Обектно ориентирано програмиране 13 май 2016 г. 1 / 23

Сериализация Калин Георгиев 13 май 2016 г. Калин Георгиев Обектно ориентирано програмиране 13 май 2016 г. 1 / 23 Калин Георгиев 13 май 2016 г. Калин Георгиев Обектно ориентирано програмиране 13 май 2016 г. 1 / 23 f «data; f» data; Калин Георгиев Обектно ориентирано програмиране 13 май 2016 г. 2 / 23 Първо изискване:

Подробно

C++

C++ Управляващи оператори в C++ Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, 2018/19 г. 18 30 октомври 2018 г. Трифон Трифонов (УП 18/19) Управляващи оператори в C++ 18 30 октомври

Подробно

Динамична памет Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 21 декември 2016 г. Тр

Динамична памет Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 21 декември 2016 г. Тр Динамична памет Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 21 декември 2016 г. Трифон Трифонов (УП 16/17) Динамична памет 21 декември

Подробно

Масиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, 2018/19 г. 15 ноември 6 декември 2018 г. Трифон Трифонов (УП 1

Масиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, 2018/19 г. 15 ноември 6 декември 2018 г. Трифон Трифонов (УП 1 Масиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, 2018/19 г. 15 ноември 6 декември 2018 г. Трифон Трифонов (УП 18/19) Масиви и низове 15.11-6.12.2018 г. 1 / 17 Масиви

Подробно

Предефиниране на оператори. Копиращ конструктор. Оператор за присвояване Любомир Чорбаджиев Технологическо училище Електронни системи Технически униве

Предефиниране на оператори. Копиращ конструктор. Оператор за присвояване Любомир Чорбаджиев Технологическо училище Електронни системи Технически униве Предефиниране на оператори. Копиращ конструктор. Оператор за присвояване Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София lchorbadjiev@elsys-bg.org Revision :

Подробно

Масиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, 2018/19 г ноември 2018 г. Трифон Трифонов (УП 18/19) Ма

Масиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, 2018/19 г ноември 2018 г. Трифон Трифонов (УП 18/19) Ма Масиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, 2018/19 г. 15 29 ноември 2018 г. Трифон Трифонов (УП 18/19) Масиви и низове 15 29 ноември 2018 г. 1 / 16 Масиви Логическо

Подробно

Програмиране на Паскал

Програмиране на Паскал Поради връзката на С++ с езика С в голяма част от литературата е прието записването С/С++. Това е найизползваният език за програмиране в света, поради което синтаксисът на някои от по-новите езици като

Подробно

Lush Green

Lush Green Конструктори Жизнен цикъл на обект За обекта се заделя памет и се свързва с неговото име Извиква се подходящ конструктор на обекта... (достъп до компоненти на обект, изпълняване на операции) Достига се

Подробно

Масиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 9 ноември 2016 г. Триф

Масиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 9 ноември 2016 г. Триф и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 9 ноември 2016 г. Трифон Трифонов (УП 16/17) и низове 9 ноември 2016 г. 1 / 5 Логическо

Подробно

Проф

Проф Утвърдил:.. / доц. д-р Е. Великова / Утвърден от Факултетен съвет с протокол... /... СОФИЙСКИ УНИВЕРСИТЕТ СВ. КЛИМЕНТ ОХРИДСКИ Факултет по Математика и Информатика Специалност: Компютърни науки М И К 0

Подробно

Дефиниране на шаблон Шаблони (Templates) Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София

Дефиниране на шаблон Шаблони (Templates) Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София Дефиниране на шаблон Шаблони (Templates) Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София lchorbadjiev@elsys-bg.org Revision : 1.1 9 март 2005 г. template< class

Подробно

Рекурсия Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 21 декември 2016 г. 4 януари

Рекурсия Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 21 декември 2016 г. 4 януари Рекурсия Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 21 декември 2016 г. 4 януари 2017 г. Трифон Трифонов (УП 16/17) Рекурсия 21.12.16

Подробно

2. Лексически анализ. Основни понятия и алгоритъм на лексическия анализ. Програмна структура на лексическия анализатор Цел на упражнението Упражнениет

2. Лексически анализ. Основни понятия и алгоритъм на лексическия анализ. Програмна структура на лексическия анализатор Цел на упражнението Упражнениет 2. Лексически анализ. Основни понятия и алгоритъм на лексическия анализ. Програмна структура на лексическия анализатор Цел на упражнението Упражнението представя кратко въведение в теорията на лексическия

Подробно

3. Синтактичен анализ. Граматика на учебен програмен език STUDENT. Извеждане на изречения от правилата на граматиката Цел на упражнението Упражнението

3. Синтактичен анализ. Граматика на учебен програмен език STUDENT. Извеждане на изречения от правилата на граматиката Цел на упражнението Упражнението 3. Синтактичен анализ. Граматика на учебен програмен език STUDENT. Извеждане на изречения от правилата на граматиката Цел на упражнението Упражнението представя кратко въведение в синтактичния анализ.

Подробно

МИНИСТЕРСТВО НА ОБРАЗОВАНИЕТО И НАУКАТА

МИНИСТЕРСТВО НА ОБРАЗОВАНИЕТО И НАУКАТА МИНИСТЕРСТВО НА ОБРАЗОВАНИЕТО И НАУКАТА У Ч Е Б Н А П Р О Г Р А М А ЗА ЗАДЪЛЖИТЕЛНА ПРОФЕСИОНАЛНА ПОДГОТОВКА ПО ПРОГРАМИРАНЕ И АЛГОРИТМИЧНИ ЕЗИЦИ ЗА ПРОФЕСИЯ: КОД 482010 ИКОНОМИСТ - ИНФОРМАТИК СПЕЦИАЛНОСТ:

Подробно

Динамична памет. Конструктори и деструктори Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София

Динамична памет. Конструктори и деструктори Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София Динамична памет. Конструктори и деструктори Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София lchorbadjiev@elsys-bg.org Revision : 1.3 16 ноември 2004 г. Пример:

Подробно

Slide 1

Slide 1 Списъци. Структура и синтаксис. Създаване и показване. Основни операции(добавяне, изваждане на елемент или цял подсписък; подреждане). Трансформации. проф. дмн С. Христова Списъци Списъците / list са основна

Подробно

ИНТЕРНЕТ ПРОГРАМИРАНЕ - JAVA JAVA ОБЕКТИ Ненко Табаков Пламен Танов Технологическо училище Електронни системи Технически университет София 9 октомври

ИНТЕРНЕТ ПРОГРАМИРАНЕ - JAVA JAVA ОБЕКТИ Ненко Табаков Пламен Танов Технологическо училище Електронни системи Технически университет София 9 октомври JAVA ОБЕКТИ Ненко Табаков Пламен Танов Технологическо училище Електронни системи Технически университет София 9 октомври 2008 JAVA ОБЕКТИ Забележка: Тази лекция е адаптация на лекция от курса: 6.092 Java

Подробно

Wolfram Mathematica & SQL

Wolfram Mathematica & SQL Wolfram Mathematica & SQL Емил Тоцев Сп. Информатика, 4 курс, група 1 б ф. номер: 0801261034 Р-л: Гл.ас. Христина Кулина ФМИ на ПУ П. Хилендарски, 23.02.2012 - Пловдив Съдържание: Въведение в DatabaseLink

Подробно

Mathematica CalcCenter

Mathematica CalcCenter Mathematica CalcCenter Основни възможности Wolfram Mathematica CalcCenter е разработен на базата на Mathematica Professional и първоначално е бил предназначен за технически пресмятания. Информация за този

Подробно

Канонична форма на клас или 4 (голямата четворка) Трифон Трифонов Обектно-ориентирано програмиране, спец. Компютърни науки, 1 поток, спец. Софтуерно и

Канонична форма на клас или 4 (голямата четворка) Трифон Трифонов Обектно-ориентирано програмиране, спец. Компютърни науки, 1 поток, спец. Софтуерно и Канонична форма на клас или 4 (голямата четворка) Трифон Трифонов Обектно-ориентирано програмиране, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 6 април 2017 г. Трифон Трифонов

Подробно

Обработка на грешки Изключения Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София Re

Обработка на грешки Изключения Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София Re Обработка на грешки Изключения Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София lchorbadjiev@elsys-bg.org Revision : 1.1 27 февруари 2005 г. 1 #include < cstdio

Подробно

Програмен език C Пламен Танов Ненко Табаков Мартин Вачовски Технологично училище Електронни системи Технически университет София версия 0.5

Програмен език C Пламен Танов Ненко Табаков Мартин Вачовски Технологично училище Електронни системи Технически университет София версия 0.5 Програмен език C Пламен Танов Ненко Табаков Мартин Вачовски Технологично училище Електронни системи Технически университет София версия 0.5 Литература Необходими програми Kernighan & Ritchie - The C Programming

Подробно

Homework 2

Homework 2 Домашна работа 2 по Дизайн и анализ на алгоритми за специалност Компютърни науки, 2. курс, 1. поток СУ, ФМИ, летен семестър на 2017 / 2018 уч. г. СЪСТАВЯНЕ НА АЛГОРИТМИ Задача 1 2 3, а 3, б 3, в Общо получен

Подробно

5

5 4. ОПЕРАТОР ЗА ИЗБОР НА ДАННИ ОТ ТАБЛИЦА За различните видове справки най-често се използва оператор SELECT. Обикновено резултатът от изпълнението му е таблица. Общ вид на оператора 1 : [ DISTINCT ]

Подробно

16. Основни методи за интегриране. Интегриране на някои класове функции Интегриране по части. Теорема 1 (Формула за интегриране по части). Ако

16. Основни методи за интегриране. Интегриране на някои класове функции Интегриране по части. Теорема 1 (Формула за интегриране по части). Ако 6. Основни методи за интегриране. Интегриране на някои класове функции. 6.. Интегриране по части. Теорема (Формула за интегриране по части). Ако функциите f(x) и g(x) садиференцируеми в интервала (a, b)

Подробно

Анализ и оптимизация на софтуерни приложения

Анализ и оптимизация на софтуерни приложения Анализ и оптимизация на софтуерни приложения Александър Пенев Васил Василев Съдържание 1. Какво е векторизация? 2. Примери 3. на цикли 4. Масиви от структури или структури от масиви 5. на при различни

Подробно

В тази част, ще разгледаме аритметичните и логически операции, както, и включването им в изрази. В следващата таблица са дадени всички възможни операц

В тази част, ще разгледаме аритметичните и логически операции, както, и включването им в изрази. В следващата таблица са дадени всички възможни операц В тази част, ще разгледаме аритметичните и логически операции, както, и включването им в изрази. В следващата таблица са дадени всички възможни операции в езикът C и С++. Символ Предназначение Аритметични

Подробно

Структура на програма в C - Част 7 - масиви, оператор за индексиране, sizeof оператор

Структура на програма в C - Част 7 - масиви, оператор за индексиране, sizeof оператор Структура на програма в C Част 7 - масиви, оператор за индексиране, sizeof оператор Иван Георгиев, Христо Иванов, Христо Стефанов Технологично училище "Електронни системи", Технически университет, София

Подробно