Advertisement
Guest User

Haskell

a guest
Sep 3rd, 2015
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Haskell 20.73 KB | None | 0 0
  1. --1.a ket szam osszege
  2. osszeg :: (Num x, Ord x ) => x -> x ->x
  3. --osszeg :: Int -> Int-> Int
  4. osszeg x y = x+y
  5.  
  6. --1.b ket szam kulonbsege
  7. kivonas :: (Num x, Ord x ) => x -> x ->x
  8. kivonas x y = x-y
  9.  
  10. --1.c ket szam szorzata
  11. szor :: (Num x, Ord x ) => x -> x ->x
  12. szor x y = x*y
  13.  
  14. --1.d hanyados
  15. --h :: Double -> Double -> Double
  16. h :: (Floating x ) => x -> x ->x
  17. h x y = x / y
  18.  
  19. --1.e ket szam osztasi maradeka
  20. om ::  (Integral x ) => x -> x ->x
  21. om x y = x `rem` y
  22.  
  23. --ket szam osztasi egesz resze
  24. oe :: (Integral x ) => x -> x ->x
  25. oe x y = x `div` y
  26.  
  27. --2. elsofoku egyenlet gyokei
  28. elsof :: (Floating a, Ord a) => a -> a -> a
  29. elsof a b
  30.     |a==0 = error "nem ertelmezett"
  31.     |otherwise=(-b)/a
  32.    
  33. --3. abszolut ertek
  34. absz :: (Num a, Ord a) => a -> a
  35. absz x
  36.     | x < 0 = -x
  37.     |otherwise = x
  38.    
  39. --4. szam elojele
  40. my_sign :: Int -> Int
  41. my_sign x
  42.     | x < 0 = -1
  43.     | x > 0 = 1
  44.     | x == 0 = 0
  45.    
  46. --5. ket argumentum maximuma
  47. maxi :: (Num a, Ord a) => a -> a -> a
  48. maxi a b
  49.         | b > a = b
  50.         | b < a = a
  51.         |otherwise = a
  52.  
  53. --6. ket argumentum minimuma
  54. mini :: (Num a, Ord a) => a -> a -> a
  55. mini a b
  56.         | b < a = b
  57.         | b > a = a
  58.         |otherwise = a
  59.  
  60. -- 7. masodfoku egyenlet gyokei
  61. masodf :: (Floating a, Ord a) => a -> a -> a -> (a, a)
  62. masodf a b c
  63.     | delta < 0 = error "Nem ertelmezett"
  64.     | delta >= 0 =( (-b + sqrt delta) / n, (-b - sqrt delta) / n )
  65.         where
  66.             delta =  b * b - 4 * a * c
  67.             n = 2*a
  68.  
  69. --faktorialis 1.modszer
  70. fakt1 :: Int -> Int
  71. fakt1 0 = 1
  72. fakt1 n = n * fakt1 (n-1)
  73.  
  74. --faktorialis 2.modszer
  75. fakt2 :: Int -> Int
  76. fakt2 n
  77.     | n < 0 = -1
  78.     | n == 0 = 1
  79.     |otherwise = n * fakt2 (n-1)
  80.  
  81. --faktorialis 3.modszer
  82. fakt3 :: Int -> Int -> Int
  83. fakt3 res n
  84.     | n < 0 = -1
  85.     | n == 0 = res
  86.     |otherwise = fakt3 (n*res) (n-1)
  87. {-
  88. FUGGVENYHIVAS
  89. Prelude> fakt1 10
  90. Prelude> fakt2 10
  91. Prelude> fakt3 1 10
  92. -}
  93.  
  94.  
  95. --1.Egy szam szamjegyeinek a szorzata
  96. szor_2 :: Integer -> Integer
  97. szor_2 x
  98.     |x < 10 = x
  99.     |otherwise =(x `rem` 10) * szor_2 (x `div` 10)
  100.  
  101. --2.masodik modszer szamjegyek szorzatra
  102. szor1 :: Integer -> Integer -> Integer
  103. szor1 x res
  104.     |x < 10 = x * res
  105.     |otherwise = szor1(x `div` 10)  (res * (x`rem` 10))
  106.  
  107. --2.masodik modszer szamjegyek szorzatra
  108. szor2 :: Integer -> Integer
  109. szor2 x = szor1_1 x 1
  110.     where
  111.     szor1_1 :: Integer -> Integer -> Integer
  112.     szor1_1 x res
  113.         |x < 10 = x * res
  114.         |otherwise = szor1_1(x `div` 10) (res * (x`rem` 10))
  115.    
  116.    
  117. --3.Egy szam szamjegyeinek az osszege
  118. ossz :: Integer -> Integer
  119. ossz x
  120.     |x < 10 = x
  121.     |otherwise = (x `rem` 10) + ossz (x `div` 10)
  122.  
  123. --4.Egy szam szamjgyeinek osszege. 2. modszer
  124. isum1 :: Integer -> Integer
  125. isum1 x = isum1_1 x 0
  126.     where
  127.     isum1_1 :: Integer -> Integer -> Integer
  128.     isum1_1 x res
  129.         |x < 10 = x + res
  130.         |otherwise = isum1_1(x `div` 10) (res +(x `rem` 10))
  131.  
  132. --5.szamjegyek szamainak a szamai
  133. szam :: Integer -> Integer
  134. szam x
  135.     |x < 10 = 1
  136.     |otherwise = 1 + szam(x `div` 10)
  137.  
  138.  
  139. --6.szamjegyek szamainak a szama. 2 modszer
  140. szam1 :: Integer -> Integer -> Integer
  141. szam1 0 sz = sz
  142. szam1 x sz =  szam1(x `div` 10)(sz + 1)
  143.  
  144. --7 egy szam azon szamjegyenek osszeget, mely parameterkent van megadva
  145. posszeg :: Integer -> Integer -> Integer
  146. posszeg x y
  147.     | x < 10 && (x == y) = 1
  148.     | x < 10 && (x /= y) = 0
  149.     | szj == y = 1 + posszeg (div x 10) y
  150.     | szj /= y = posszeg (div x 10) y
  151.     where
  152.         szj = mod x 10
  153.  
  154. --8.paros szamjegyek szama
  155. parosszj :: Integer -> Integer  
  156. parosszj x
  157.     |x < 10 && ( mod szj 2 == 0) = 1 --(even szj)
  158.     |x < 10 && (mod szj 2/=0) = 0 --(not.even)szj
  159.     |mod szj 2 == 0 = 1 + parosszj (div x 10)
  160.     |mod szj 2/=0 = parosszj (div x 10)
  161.     where
  162.         szj = mod x 10
  163.        
  164. --9.legnagyobb szamjegy
  165. maxisz :: Integer -> Integer
  166. maxisz x
  167.     |x < 10 = x
  168.     |rx > szj = rx
  169.     |otherwise = szj
  170.  
  171.     where
  172.         rx = maxisz(div x 10)
  173.         szj = mod x 10
  174.  
  175. --10. n-edik Fibonacci szam
  176. --fib :: Integer -> Integer
  177. --fib0 = 0
  178. --fib1 = 1
  179. --fibn = fib(n-1) + fib (n-2)
  180.  
  181. --11. n-wdik Fibonacci szam
  182. fib1 :: Integer -> Integer -> Integer -> Integer
  183. fib1 n a b
  184.     |n == 1 = b
  185.     |otherwise = fib1 (n-1) b (a+b)
  186.  
  187. --12. n-wdik Fibonacci szam 2.modszer
  188. fib2 :: Integer -> Integer
  189. fib2 n = alfib1 n 0 1
  190.     where
  191.     alfib1 :: Integer -> Integer -> Integer -> Integer
  192.     alfib1 n a b
  193.         |n == 1 = b
  194.         |otherwise = alfib1 (n-1) b (a+b)
  195.  
  196. --13.Egy szam kettes szamrendszerbeli alakjaban az 1esek szama
  197. bin :: Integer -> Integer
  198. bin x
  199.     |x < 0 = error "Ez negativ szam!"
  200.     |x == 0 = 0
  201.     |maradek == 1 = 1 + bin (div x 2)
  202.     |maradek == 0 = bin (div x 2)
  203.     where
  204.         maradek = mod x 2
  205.  
  206. -- Egy x szam n-ik hatvanya, ha a kitevo pozitiv szam
  207. --1.
  208. hatv1 :: Integer -> Integer -> Integer
  209. hatv1 szam 0 = 1
  210. hatv1 szam n = szam * (hatv1 szam (n-1))
  211.  
  212. --2.
  213. hatvany ::  Integer -> Integer -> Integer
  214. hatvany szam n
  215.     | n < 0 = error "Negativ hatvany!!"
  216.     | n == 0 = 1
  217.     |otherwise = szam * hatvany szam (n-1)
  218.  
  219. --3.
  220. hatv3 :: Integer -> Integer -> Integer -> Integer
  221. hatv3 szam n res
  222.     | n < 0 = error "Negativ hatvany nem helyes!!"
  223.     | n == 0 = res
  224.     |otherwise = hatv3 szam (n-1) (res * szam)
  225.    
  226.  
  227.  
  228. --14 egy szam paros osztoinak a listajat
  229.  
  230. osztok2 :: Int -> [ Int ]
  231. osztok2 n = [ i | i <- [1..n] , n `mod` i ==0 && mod i 2 == 0]
  232.  
  233. --15 az első n természetes szám köbét
  234. kob :: Integer -> Integer -> Integer
  235. kob n x
  236.     | n < 0 = error "Negativ kitevo"
  237.     | n == 0 = 1
  238.     | mod n 2 == 0 = kob (div n 2) (x*x)
  239.     | otherwise = x * kob (div n 2) (x*x)
  240.  
  241. -- elso n szam negyzetgyoke
  242. gyok :: Float -> [Float]
  243. gyok n = gyok_1 [1..n]
  244.     where
  245.         gyok_1 :: [Float] -> [Float]
  246.         gyok_1 [] = []
  247.         gyok_1 (n:ns) = (sqrt n) : gyok_1 ns
  248.  
  249.        
  250. --n-nel kisebb Pitagoraszi szamharmasok
  251. pithar :: Int -> [(Int,Int,Int)]
  252. pithar x = [(a,b,c)|a<-[1..x], b<-[1..x], c<-[1..x], (a^2)+(b^2) == (c^2)]
  253.  
  254. -- x szam hatvanyai n-ig --map (hatv1 2) [1 .. 10]
  255. hatvany1 :: [Integer] -> [Integer]
  256. hatvany1 [] = []
  257. hatvany1 (n:ns) = (n*n) : hatvany1 ns
  258.  
  259. hatvanyoz :: Integer -> Integer -> [Integer]
  260. hatvanyoz szam 0 = []
  261. hatvanyoz szam n = hatv1_2 szam [1..n]
  262.     where
  263.     hatv1_2 :: Integer -> [Integer] -> [Integer]
  264.     hatv1_2 szam [] = []
  265.     hatv1_2 szam (x:xs) = szam^x : hatv1_2 szam xs
  266.    
  267. --a következõ listát: [('a',0), ('b',1), ..., ('z', 25)] alakitsuk ki
  268. myzip :: [a] -> [b] -> [(a,b)]
  269. myzip _ [] = []
  270. myzip [] _ = []
  271. myzip (x:xs) (y:ys) = (x,y) :myzip xs ys
  272.  
  273. --a következõ listát: [(0, 5), (1, 4), (2, 3), (3, 2), (4, 1), (5, 0)]
  274. myzip2 :: [a] -> [b] -> [(a,b)]
  275. myzip2 _ [] = []
  276. myzip2 [] _ = []
  277. myzip2 (x:xs) (y:ys)= (x,y) :myzip2 xs ys
  278.     where
  279.         rev :: [a] -> [a]
  280.         rev xs = [xs !! k | k <- [(length xs-1), (length xs -2)..0]]
  281.    
  282.    
  283. --a fugggvenyargumentum elojelenek meghatarozasa
  284. my_sign2 :: Int -> Int
  285. my_sign2 x
  286.     | x < 0 = -1
  287.     | x > 0 = 1
  288.     | x == 0 = 0
  289.  
  290. --ket szam legnagyobb kozos osztojanak meghatarozasa
  291. lnko :: Int -> Int -> Int
  292. lnko a b
  293.     | a > b = lnko (a-b) b
  294.     | a < b = lnko a (b-a)
  295.     | otherwise = a
  296.  
  297. --egy szam szamjegyeinek osszege   
  298. isum :: Int -> Int
  299. isum 0 = 0
  300. isum x = ( x `rem` 10 ) + isum (x `div` 10)
  301.  
  302. --egy 4 elemu lista elemeinek osszege
  303. osszeg2 :: [Int] -> Int
  304. osszeg2 [] = 0
  305. osszeg2 [x] = x
  306. osszeg2 [x,y] = x + y
  307. osszeg2 [x,y,z] = x + y + z
  308. osszeg2 [x,y,z,a] = x + y + z + a
  309.  
  310. --abszolut ertek
  311. abszolut1 x
  312.     |x < 0 = -x
  313.     |otherwise = x
  314.  
  315. abszolut2 :: Int -> Int
  316. abszolut2 x
  317.     | x < 0 = -x
  318.     |otherwise = x
  319.  
  320. abszolut3 :: Float -> Float
  321. abszolut3 x
  322.     | x < 0 = -x
  323.     |otherwise =
  324.  
  325. abszolut4 :: (Num a, Ord a) => a -> a
  326. abszolut4 x
  327.     | x < 0 = -x
  328.     |otherwise = x
  329.  
  330. --egy szam osztoinak a listája
  331. osztok :: Int -> [ Int ]
  332. osztok n = [ i | i <- [1..n] , n `rem` i==0]   
  333. {-
  334. fuggveny kiertekelese
  335. Prelude> osztok 60
  336. Prelude> length (osztok 60)
  337. -}
  338.  
  339. --lista paros elemeinek meghatarozasa
  340. parosList :: (Integral a) => [a] -> [a]
  341. parosList list = filter even list
  342.  
  343. -- a lista paratlan elemeinek meghatarozasa
  344. paratlanList :: (Integral a) => [a] -> [a]
  345. paratlanList list = filter (not . even) list
  346.  
  347.  
  348. --a megadott parametert noveli 1-el
  349. my_add :: (Num a) => a -> a
  350. my_add = \x -> x + 1
  351.  
  352. --a lista minden elemet noveli eggyel
  353. list_add :: (Num a) => [a] -> [a]
  354. list_add list = map (\x -> x + 1) list
  355.  
  356. --Adott szam hatvanyertekei 0-10 -ig
  357. hatv_1 :: Integer -> Integer -> Integer
  358. hatv_1 x n
  359.     | n < 0 = error "Negativ kitevo"
  360.     | n == 0 = 1
  361.     | mod n 2 == 0 = hatv_1 (x*x) (div n 2)
  362.     | otherwise = x * hatv_1 (x*x) (div n 2)
  363.  
  364. fugv1 :: Integer -> [Integer]
  365. fugv1 x = map (hatv_1 x) [0..10]
  366.  
  367. --szamok kobei 0-10 -ig
  368. hatv_2 :: Integer -> Integer -> Integer
  369. hatv_2 n x
  370.     | n < 0 = error "Negativ kitevo"
  371.     | n == 0 = 1
  372.     | mod n 2 == 0 = hatv_2 (div n 2) (x*x)
  373.     | otherwise = x * hatv_2 (div n 2) (x*x)
  374. fugv2 :: Integer -> [Integer]
  375. fugv2 x = map (hatv_2 x) [0..10]
  376.  
  377. -- valasszuk ki egy adott listabol az x -el oszthato szamokat
  378. oszthato :: Int -> Int -> Bool
  379. oszthato x y
  380.     | mod y x == 0 = True
  381.     | otherwise = False
  382. fugv :: Int -> [Int] -> [Int]
  383. fugv x li = filter (oszthato x) li
  384.  
  385. --masodfoku egyenlet gyokei
  386. gyok_2 :: Double -> Double -> Double -> (String, Double, Double)
  387. gyok_2 a b c =
  388.     if delta < 0 then error "Komplex gyokok" else
  389.         if delta == 0 then ("egyforma gyokok, ", x1, x1) else
  390.             ("ket gyok", x1, x2)
  391.     where
  392.         x1 = (-b + sqrt delta) / nev
  393.         x2 = (-b - sqrt delta) / nev
  394.         delta = b * b - 4 * a * c
  395.         nev = 2 * a
  396. {-fuggvenyhivas gyok 1 3 2-}
  397.  
  398. {-
  399. --fuggvenyek listakon
  400. sum [3, 2, 10, 7, 5]
  401. length [3, 2, 10, 7, 5]
  402. reverse [3, 2, 10, 7, 5]   
  403.  
  404. --listak letrehozasa
  405. t1 = [1,2,3,4]
  406. t1_1 = (1: (2: (3: (4: []))))
  407. -- > t1_1
  408.  
  409. t2 = [ [1, 2, 3], [1, 2], [1, 2, 3, 4] ]
  410. t2_1 = ([1, 2, 3]: ([1, 2]: ([1, 2, 3, 4]: [])))
  411. -- > t2_1
  412.  
  413. t3 x = [ 2^x, length [1, 2], length[1, 2, 3] ]
  414. t3_1 x = (2^x: (length[1, 2]: (length[1, 2, 3]: [])))
  415.  
  416. t4 = [1..10]
  417. -- > t4
  418.  
  419. t5 = [0,5..50]
  420.  -- > t5
  421.  
  422. t6 = [-3, -6.. -20]
  423. -- > t6
  424. t7 = [`a` .. `f1`]
  425. -- > t7
  426. -}
  427.  
  428. --1.meghatározza egy lista utolsó elemét.
  429. my_last :: [a] -> a
  430. my_last [] = error "ures lista"
  431. my_last[k] = k
  432. my_last(k:ve) = my_last ve
  433.  
  434. --2.meghatároz egy listát mely tartalmazza a paraméterként megadott lista elemeit, kivéve az utolsót.
  435. my_init :: [a] -> [a]
  436. my_init [] = error "ures lista"
  437. my_init [k] = []
  438. my_init(k:ve) = k: my_init ve
  439.  
  440. --3.meghatározza egy lista legnagyobb elemét.
  441. my_maximum :: (Ord a ) => [a] -> a
  442. my_maximum [] = error "ures lista"
  443. my_maximum [k] = k
  444. my_maximum(k:ve)
  445.     |k > temp = k
  446.     |otherwise = temp
  447.     where
  448.         temp = my_maximum ve
  449.  
  450. --4.meghatározza egy lista legkisebb elemét.
  451. my_minimum :: (Ord a ) => [a] -> a
  452. my_minimum [] = error "ures lista"
  453. my_minimum [k] = k
  454. my_minimum(k:ve)
  455.     |k < temp = k
  456.     |otherwise = temp
  457.     where
  458.         temp = my_minimum ve
  459. --5.maghatározza egy egész elemű lista elemeinek átlagértékét.
  460. my_atlag :: [Double ] -> Double
  461. my_atlag li = osszeg/db
  462.     where
  463.         osszeg = my_sum1 li
  464.         db = my_length1 li
  465.  
  466. my_sum1 :: [Double] -> Double
  467. my_sum1 [] = 0
  468. my_sum1 (k: ve) = k + my_sum1 ve
  469.  
  470. my_length1 :: [a] -> Double
  471. my_length1 [] = 0
  472. my_length1 (k: ve) = 1 + my_length1 ve
  473.        
  474. --5. maghatározza egy egész elemű lista elemeinek átlagértékét.
  475. --2.modszer
  476. atlag1 :: [Double ] -> Double
  477. atlag1 li = osszeg1/db1
  478.     where
  479.         (osszeg1, db1) = satlag li
  480.        
  481. --segedlista
  482. satlag :: [Double ] -> (Double, Double)
  483. satlag [] = error "ures lista"
  484. satlag [k] = (k,1)
  485. satlag (k:ve) = (k+tempk, 1+tempdb)
  486.     where
  487.         (tempk, tempdb) = satlag ve
  488.    
  489.        
  490. --6. megállapítja egy karakter listáról, hogy az palindrom-e vagy sem.
  491. palindrom :: [Char] -> Bool
  492. palindrom [] = True
  493. palindrom [k] = True
  494. palindrom li
  495.     |(head li) /= (my_last li) = False
  496.     |otherwise = palindrom( my_init(tail li))
  497.  
  498. --7. meghatározza egy szám  számrendszerbeli alakját   
  499. szamr :: Integer -> Integer -> [Integer]
  500. szamr nr p = sszamr nr p []
  501.     where
  502.         sszamr nr p res
  503.             |nr < p = (nr : res)
  504.             |otherwise = sszamr (div nr p) p ((mod nr p) : res)
  505.  
  506. {- 1. Határozzuk meg egy lista legnagyobb elemeinek pozícióit, két módszerrel:
  507.       a.) - úgy hogy a lista elemeit kétszer járjuk be,
  508.       b.)- úgy hogy a lista elemeit csak egyszer járjuk be.
  509. -}
  510. --1.a.)
  511. mymax :: (Num a, Ord a) => [a] -> (a, [Integer])
  512. mymax lista = (m, poz m lista)
  513.     where
  514.         m = smax lista
  515.         smax :: (Num a, Ord a ) => [a] -> a
  516.         smax [] = error "ures lista"
  517.         smax [k] = k
  518.         smax(k:ve)
  519.             |k > temp = k
  520.             |otherwise = temp
  521.             where
  522.                 temp = smax ve
  523.        
  524.         poz :: (Num a, Ord a) => a -> [a] -> [Integer]
  525.         poz m lista = spoz m lista 0
  526.             where
  527.                 spoz :: (Num a, Ord a) => a -> [a] -> Integer -> [Integer]
  528.                 spoz m[] ind = []
  529.                 spoz m (k:ve) ind
  530.                     |m == k =(ind : spoz m ve (ind +1))
  531.                     |otherwise = spoz m ve (ind +1)
  532.  
  533. --1.b.)
  534. mymax2 :: (Ord a) => [a] -> (a, [Int])
  535. mymax2 [] = error "Ures lista"
  536. mymax2 (k:ve) = seged_mymax2 k ve 1 [0]
  537.     where
  538.         seged_mymax2 :: (Ord a) => a -> [a] ->Int ->[Int] -> (a,[Int])
  539.         seged_mymax2 m [] ind res = (m, res)
  540.         seged_mymax2 m (k:ve) ind res
  541.             |m < k = seged_mymax2 k ve (ind+1) [ind]
  542.             |m > k = seged_mymax2 m ve (ind+1) res
  543.             |m == k = seged_mymax2 m ve (ind+1)(ind:res)
  544.  
  545. --1.c.) Határozzuk meg a P(x) = a0 + a1·x + a2·x2 +...+ an·xn polinom adott x0értékre való behelyettesítési értékét
  546. poli :: [Integer] -> Integer -> Integer ->Integer
  547. poli [] x0 temp = error "Polinom egyutthatoi nincsenek megadva!"
  548. poli [k] x0 temp = k * temp
  549. poli (k: ve) x0 temp = poli ve x0 (temp*x0) + k * temp
  550.  
  551. --1.d.)Határozzuk meg egy p számrendszerben megadott szám számjegyei alapján a megfelelo 10-es számrendszerbeli számot.
  552. ptiz :: [Integer] -> Integer -> Integer ->Integer
  553. ptiz [] p temp = error "Nincs megadva szam"
  554. ptiz [k] p temp = k*temp
  555. ptiz (k:ve) p temp = ptiz ve p temp*p + k*temp
  556.  
  557.  
  558.  
  559. --2.Írjuk meg az elem, reverse, product függvényeket a foldl függvény segítségével.
  560. --Írjuk meg az elem, reverse, product függvényeket és a ++ operátort (a két lista összefúzése függvényt) a foldr függvény segítségével.
  561. --Határozzuk meg a P(x) = a0 + a1·x + a2·x2 +...+ an·xn polinom adott x0értékre való behelyettesítési értékét a foldr függvény segítségével:
  562. --a0 + x0·(a1 + x0·(a2 + x0·(a3 + ...+ x0·(an-1+ x0·an)
  563.  
  564. my_max = foldr (\x y -> if x > y then x else y) 0 [1,2,3,11,5, 7, 12]
  565.  
  566. my_sum = foldl (\x y -> x + y) 0 [1,2,3,4,5] -- a lista elemeinek osszege, lehet foldr-rel is
  567.  
  568. elemek_szamal = foldl (\x y -> x + 1 ) 0 [1,2,3,4,5]
  569. elemek_szamar = foldr (\x y -> y + 1 ) 0 [1,2,3,4,5]
  570.  
  571. my_productl = foldl (\x y -> x * y) 1 [1,2,3,4]
  572. my_productr = foldr (\x y -> x * y) 1 [1,2,3,4]
  573.  
  574. my_eleml x li = foldl (\y1 y2 -> if y2 == x then True else y1) False li
  575. my_elemr x li = foldr (\y1 y2 -> if y1 == x then True else y2) False li
  576.  
  577. horner :: (Num a) => a -> [a] -> a
  578. horner x = foldr (\a b -> a + b*x) 0
  579.  
  580.  
  581.  
  582.  
  583. --3. Hozzunk létre egy konstans listát.
  584. data Fesztivalok =
  585.  Fesztivalok {  egyuttes :: String,
  586.                 fesztival :: String,
  587.                 ar :: Int,
  588.                 kod :: Int } deriving (Show, Eq)
  589.                
  590. --3.a.) határozzuk meg egy adott fesztiválon szereplo eggyütteseket,
  591. fesztival_lista :: [Fesztivalok]
  592. fesztival_lista = [ Fesztivalok "Tankcsapda" "Felsziget" 45 1,
  593.                     Fesztivalok "Rihanna" "RoskildeFestival" 300 2,
  594.                     Fesztivalok "Roxette" "RoskildeFestival" 300 3,
  595.                     Fesztivalok "ImagineDragons" "SummerMusicFestival" 250 4]
  596.  
  597. --3.b.)  határozzuk meg azokat az együtteseket, melyek egy adott értéknél olcsóbban árulják koncertjegyeiket,
  598. szerepelnek :: String -> [Fesztivalok] -> [String]
  599. szerepelnek e [] = []
  600. szerepelnek e (x : xs)
  601.     | egyuttes x == e = ( fesztival x: szerepelnek e xs )
  602.     | otherwise = szerepelnek e xs
  603.    
  604. --3.c.) határozzuk meg, hogy hány olyan együttes szerepel a listában, mely egy adott értéknél olcsóbban árulja koncertjegyét,
  605. olcsobb_jegyek :: Int -> [Fesztivalok] -> [String]
  606. olcsobb_jegyek jegyar [] = []
  607. olcsobb_jegyek jegyar (x:xs)
  608.     | ar x < jegyar = ( fesztival x : olcsobb_jegyek jegyar xs )
  609.     | otherwise = olcsobb_jegyek jegyar xs
  610.    
  611. --3.d.) rendezzük a lista tartalmát az együttesek nevei alapján ábécé sorrendbe (mergeSort)
  612. hany_olcsobb :: Int -> [Fesztivalok] -> Int
  613. hany_olcsobb jegyar [] = 0
  614. hany_olcsobb jegyar (x:xs)
  615.     | ar x < jegyar = 1 + hany_olcsobb jegyar xs
  616.     | otherwise = hany_olcsobb jegyar xs
  617.  
  618. --3.e.)  rendezzük a lista tartalmát a jegyárak szerint csökkeno sorrendbe (qSort)
  619. quickSort_jegyar :: [Fesztivalok] -> [Fesztivalok]
  620. quickSort_jegyar [] = []
  621. quickSort_jegyar (x:xs) = quickSort_jegyar gt_list ++ [x] ++ quickSort_jegyar lt_list
  622.     where
  623.         lt_list = [ y | y <- xs , ar y >= ar x]
  624.         gt_list = [ y | y <- xs, ar y < ar x ]
  625.        
  626. --3.f.) határozzuk, meg, hogy agy adott fesztiválon mennyi a jegyek átlagértéke
  627. atlag_jegyar :: String -> [Fesztivalok] -> Double
  628. atlag_jegyar feszt li = (fromIntegral sum) / (fromIntegral nr)
  629.     where
  630.     (sum, nr) = satlag feszt li
  631.     satlag :: String -> [Fesztivalok] -> (Int, Int)
  632.     satlag feszt [] = (0, 0)
  633.     satlag feszt (x:xs)
  634.         | fesztival x == feszt = (ar x + temp1, 1 + temp2)
  635.         | otherwise = (temp1, temp2)
  636.         where
  637.         (temp1,temp2) = satlag feszt xs
  638.  
  639. --4 Hasonlítsuk össze a tanult hatvany függvények idoigényét (3 verzió) a ^ predefiniált operátorral: mind a négy esetben határozzuk meg 2100000 mod 10 értékét.
  640. hatvany0 :: Integer -> Integer -> Integer
  641. hatvany0 x n
  642.     | n < 0 = error "negativ kitevo"
  643.     | n == 0 = 1
  644.     | otherwise = x * hatvany0 x (n-1)
  645.    
  646. hatvany_1 :: Integer -> Integer -> Integer
  647. hatvany_1 x n
  648.     | n < 0 = error "negativ kitevo"
  649.     | n == 0 = 1
  650.     | mod n 2 == 1 = x* hatvany_1 (x*x) (div n 2)
  651.     | otherwise = hatvany_1 (x*x) (div n 2)
  652.  
  653. hatvany2 :: Integer -> Integer -> Integer
  654. hatvany2 x n
  655.     | n < 0 = error "negativ kitevo"
  656.     | n == 0 = 1
  657.     | mod n 2 == 1 = x * h * h
  658.     | otherwise = h * h
  659.         where h = hatvany2 x (div n 2)
  660.  
  661. -- idomeres-> :set +s          
  662.            
  663. --Paratlan n gyok
  664. toDouble :: (Real n) => n -> Double
  665. toDouble = fromRational . toRational
  666. elso_n_gyok :: Int -> [Double]
  667. elso_n_gyok n
  668.     | n<1 = error "hiba"
  669.     | otherwise =[sqrt (toDouble i ) | i<-[1..n], (i`mod` 2) /=0 ]
  670.  
  671. --hozzunk létre egy listát amely tartalmazza az eredeti lista minden n-ik elemét
  672. mindenNik :: (Ord a) => [a] -> Int -> [a]
  673. mindenNik lista n
  674.     |length lista <n =[]
  675.     |otherwise =
  676.         let
  677.             elem = last (take n lista)
  678.             ujlista = drop n lista
  679.         in elem: (mindenNik ujlista n) 
  680.        
  681. --hat meg az [x,y] intervallumban levo szamok osszeget     
  682. sumB :: (Ord a,Num a) => a -> a -> a
  683. sumB x y =
  684.     if x>y then error "Hiba:parameterek"
  685.     else
  686.         if x<y then x + sumB (x+1) y
  687.         else
  688. --lista amely a következőképpen néz ki ..: [2,2,4,4,4,4,6,6,6,6,6,6.......]    
  689. generateList::Int->[Int]
  690. generateList n
  691.     | n<2=error "a bemenet legyen 2 vagy nala nagyobb"
  692.     | (n `mod` 2 )==0 = sgenerateList 2 0 (n+1)
  693.     | otherwise = sgenerateList 2 0 n
  694.         where
  695.             sgenerateList::Int->Int->Int->[Int]
  696.             sgenerateList nr lv lim
  697.                 | nr>=lim =[]
  698.                 | lv<nr = (nr:sgenerateList nr (lv+1) lim)
  699.                 | otherwise = sgenerateList (nr+2) 0 lim   
  700. --lista amely a következőképpen néz ki ..: [2,2,4,4,4,4,6,6,6,6,6,6.......]     paratlan
  701. generateList2::Int->[Int]
  702. generateList2 n
  703.     | n<2=error "a bemenet legyen 2 vagy nala nagyobb"
  704.     | (n `mod` 2 )==0 = sgenerateList 1 0 (n+1)
  705.     | otherwise = sgenerateList 1 0 n
  706.         where
  707.             sgenerateList::Int->Int->Int->[Int]
  708.             sgenerateList nr lv lim
  709.                 | nr>=lim =[]
  710.                 | lv<nr = (nr:sgenerateList nr (lv+1) lim)
  711.                 | otherwise = sgenerateList (nr+2) 0 lim   
  712. --2.) Egy szám legnyagyobb paratlan osztojat              
  713. osztok_2 :: Int -> [ Int ]
  714. osztok_2 n = [ i | i <- [1..n] , n `rem` i==0 , i`mod`2/=0 ]
  715. maxparatlan :: Int -> Int
  716. maxparatlan n = last(osztok2 n)
  717. -- egy lista tartalmazzon true es false ertekeket valtakozva
  718. valtakozva :: Int -> [Bool]
  719. valtakozva n
  720.     | n < 1 = error "hiba"
  721.     | otherwise = [even i|i<-[1..n]]
  722.    
  723. valtakozva2 :: Int -> [Bool]
  724. valtakozva2 n
  725.     | n < 1 = error "hiba"
  726.     | otherwise = [ i`mod`2==0|i<-[1..n]]
  727. -- lista emely igy nez ki   [1,1,3,1,3,5,1,,3,5,7]
  728. general:: Int->[Int]
  729. general n
  730.     | n<1 = error "hiba"
  731.     |otherwise = sgeneral 1 1 n
  732.         where
  733.             sgeneral :: Int->Int->Int->[Int]
  734.             sgeneral sz sl l
  735.                 | sl>l =[]
  736.                 | sz<=sl = (sz:sgeneral (sz+2) sl l)
  737.                 | otherwise = sgeneral 1 (sl+2) l
  738.  
  739. list_paratlan :: Int->[Int]
  740. list_paratlan n = [i | i<-[1..n],i`mod`2/=0]       
  741. general2 :: Int->[Int]
  742. general2 (-1) = []
  743. general2 0 = []
  744. general2 n = general2(n-2) ++ list_paratlan n
  745.  
  746. -- hat meg ,hogy tizes szamrendszerbeli szamnak melyik a legnagyobb szamjegye p szamrendszerbe
  747. nssm :: Int -> Int-> Int
  748. nssm n p
  749.     | p<2 = error "hiba"
  750.     | otherwise = maximum(szj_lista n p) --legnagyobb szamjegy visszateritese
  751.         where
  752.             szj_lista :: Int->Int->[Int] --p szamrendszerbeli szam szamjegyeinek lista
  753.             szj_lista 0 p = []
  754.             szj_lista n p = ((n`mod`p) : szj_lista(n`div`p) p)
  755.  
  756. -- hozzunk letre egy listat amely nem tartalmazza az eredeti lista minden n-ik elemet
  757. mindenNik2 :: (Ord a) => [a] -> Int -> Int -> [a]
  758. mindenNik2 [] n n2 = []
  759. mindenNik2 (k:ve) n n2
  760.     | n2<=0 =[]
  761.     | n2`mod`n /= 0 = mindenNik2 ve n (n2-1)
  762.     | otherwise = ( k : mindenNik2 ve n (n2-1))
  763. {-fuggvenyhivas
  764. mindenNik2 [1,2,3,4,5,6,7,8,9,10] 2 10
  765. -}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement