Advertisement
Guest User

Untitled

a guest
May 6th, 2019
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 6.32 KB | None | 0 0
  1. #lang racket
  2. (define (suma x y)
  3.  (+ x y))
  4.  
  5. ; po średniku pisze się komentarze
  6. ; to jest język funkcyjny (scheme)
  7. ; w funkcjach nie można zmieniać stanu zmiennych
  8. ; tutaj rolę pętli pełni rekurencja
  9. ;suma(10,20) - C++ (wywołanie funkcji)
  10. (suma 10 20)
  11.  
  12. ; 2 + 2
  13. (+ 2 2)
  14.  
  15. (define x -1)
  16.  
  17. ; wyrażenie warunkowe
  18. (if (> x 0) ; sprawdzanie (za pomocą NP)
  19.     "X dodatnie" ; jeśli spełnione
  20.     "X niedodatnie") ; jeśli niespełnione
  21. ; oba muszą wystąpić
  22.  
  23. ; coś a'la switch.. case
  24. (cond
  25.   ((> x 0) "x dodatnie")
  26.   ((< x 0) "x ujemne")
  27.   (else "x == 0"))
  28.  
  29. ; tworzenie zmiennych lokalnych
  30. ; lety można zagnieżdżać
  31. ; nie można korzystać np. że (a 10) (b a) [b nie widzi a]
  32. (let ((a 10) (b 20))
  33.   (+ a b))
  34.  
  35. ; tworzenie listy
  36. ; typy elementów w liście mogą być różne (można je też zagnieżdżać)
  37. (list 1 2 3 4)
  38.  
  39. ; ZAD 1
  40. "Zad. 1"
  41. (newline)
  42.  
  43. ; Zdefiniować w języku Scheme następujące wyrażenia:
  44.  
  45. ; (45 + 33) * 123.0/4
  46. (* (+ 45 33) (/ 123.0 4))
  47. ; 2 * (5 3)/(4 * 2 + 3 * 8)
  48. (/ (* 2 (+ 5 3)) (+ (* 4 2) (* 3 8)))
  49. ; (122 + (4 – 3) + 15 * 10)/20.4
  50. (/ (+ 122 (+ (- 4 3) (* 15 10))) 20.4)
  51.  
  52. ; ZAD 2
  53. "Zad. 2"
  54. (newline)
  55. ; Zdefiniować funkcję zamieniającą stopnie Fahrenheita na stopnie Celsjusza
  56.  
  57. (define (ToCelsius temp)
  58.   (* (- temp 32) (/ 5 9)))
  59.  
  60. (ToCelsius 0)
  61.  
  62. ; ZAD 3
  63. "Zad. 3"
  64. (newline)
  65. ; Zdefiniować funkcję obliczającą deltę równania kwadratowego
  66.  
  67. (define (rownanieKwadratowe w1 w2 w3)
  68.   (- (* w2 w2) (* 4 w1 w3)))
  69.  
  70. (rownanieKwadratowe 2 4 1)
  71.  
  72. ; ZAD 4
  73. "Zad. 4"
  74. (newline)
  75. ; Zdefiniować funkcję obliczającą pierwiastki równania kwadratowego w dziedzinie liczb
  76. ; rzeczywistych.
  77. ; TODO: NIE DZIALA PRAWIDLOWO
  78.  
  79. (define (pierwiastki t1 t2 t3)
  80.   (let ((delta (rownanieKwadratowe t1 t2 t2)))
  81.     (cond
  82.       ((> delta 0) (list (/ (- (- t2) (sqrt delta)) (* 2 t1)) (/ (+ (- t2) (sqrt delta)) (* 2 t1))))
  83.       ((< delta 0) "brak rozwiazan")
  84.       (else (/ (- t2) (* 2 t1))))))
  85.    
  86.  
  87. (pierwiastki 3 4 1)
  88.  
  89. ;;;;;;;;;;;;;;;;;;;;;;;;;
  90. ;;;; Ogarnianie list ;;;;
  91. ;;;;;;;;;;;;;;;;;;;;;;;;;
  92.  
  93. (define lst '(1 2 3))
  94. ; apostrof zapobiega interpretowaniu tego co jest w nawiasach jako funkcji, tylko jako elementy listy
  95. (null? lst) ; sprawdza czy pusta (#f - false)
  96. (cons 1 lst) ; wstawiona lista jako pierwszy element ( '(1 1 2 3 ) (listy mozna traktować jako pary
  97. ; pierwszy element to "głowa" a drugi to "ogon"
  98. (list 1 lst) ; '(1 (1 2 3))
  99. (car lst) ; pobranie "głowy" listy
  100. (cdr lst) ; pobranie "ogona" listy
  101.  
  102. ; w językach funkcyjnych nie ma pętli więck korzystamy z rekurencji
  103.  
  104.  
  105. ; Żeby zbudować listę wynikową trzeba użyć cons (podobnie w 10)
  106. ; W 11 trzeba scalić dwie listy [rekurencja]
  107. ; 12, 13 i 14 są podobne (jak sprawdzić na którym miejscu znajdujemy się na liście) np. zmniejszać n aż zejdzie do zera
  108.  
  109. ; ZAD 5
  110. "Zad. 5"
  111. (newline)
  112.  
  113. (define (ocena pkt)
  114.   (cond
  115.   ((> pkt 90) "Ocena 5")
  116.   ((> pkt 80) "Ocena 4.5")
  117.   ((> pkt 70) "Ocena 4.0")
  118.   ((> pkt 60) "Ocena 3.5")
  119.   ((> pkt 50) "Ocena 3.0")
  120.   (else "Ocena 2.0")))
  121.  
  122. (ocena 49)
  123.  
  124. ; ZAD 6
  125. "Zad. 6"
  126. (newline)
  127.  
  128. ; Zdefiniować funkcję sum obliczającą sumę wszystkich elementów w liście.
  129.  
  130. (define (sumaLista lilista)
  131.       (if (null? lilista)
  132.       0
  133.       (+ (car lilista) (sumaLista (cdr lilista)))))
  134.  
  135. (sumaLista (list 1 2 3 4))
  136.  
  137. ; ZAD 7
  138. "Zad. 7"
  139. (newline)
  140.  
  141. ; Zdefiniować funkcje dlugosc obliczającą długość listy
  142.  
  143. (define (dlugosc lst)
  144.   (if (null? lst)
  145.       0
  146.       (+ 1 (dlugosc (cdr lst))))) ; żeby pozbywać się elementów przy rekurencji, aby policzyć kolejne elementy, pobieramy ogon
  147.  
  148. (dlugosc (list 1 2 3 4 5 6 12 13)) ; dziala :D
  149. (dlugosc lst)
  150.  
  151. ; ZAD 8
  152. "Zad. 8"
  153. (newline)
  154.  
  155. ; Zdefiniować funkcję ostatni zwracającą ostatni element listy
  156.  
  157. (define (ostatniElement lapista)
  158.   (if (= (dlugosc lapista) 1)
  159.       (car lapista)
  160.       (ostatniElement (cdr lapista))))
  161.  
  162. (ostatniElement (list 1 2 9 33 324 123486 389))
  163.  
  164. ; ZAD 9
  165. "Zad. 9"
  166. (newline)
  167.  
  168. ; Zdefiniować funkcję mapa tworzącą listę elementów z listy źródłowej dla której zadano funkcję
  169. ; przekazywaną jako parametr np. dla wywołania (mapa sqrt '(1 4 16)) wynikiem ma być (1 2 4).
  170.  
  171. (define (mapa funkcja kolejnaLista)
  172.    (if(null? kolejnaLista)
  173.       null
  174.       (cons (funkcja (car kolejnaLista)) (mapa funkcja (cdr kolejnaLista)))))
  175.  
  176. (mapa sqrt'(1 4 16))
  177.  
  178. ; ZAD 10
  179. "Zad. 10"
  180. (newline)
  181.  
  182. ; Zdefiniować funkcję przechowaj przyjmującą listę i predykat, elementy, które
  183. ; spełniają ten predykat powinny być przekopiowane do listy wynikowej np.(przechowajspelniajacepredykat '(1 2 3 4) odd?)
  184. ; powinno zwrócić listę (1 3).\
  185. ; TODO: NIE DZIALA
  186.  
  187. (define (przechowaj nextList predykat)
  188.   (define listaWynikowa'())
  189.   (if (null? nextList)
  190.      listaWynikowa
  191.      (if (predykat (car nextList))
  192.         (cons (car nextList) (przechowaj (cdr nextList) predykat))
  193.      (przechowaj (cdr nextList) predykat))))
  194.  
  195.  (przechowaj '(1 2 3 4 5 6 7 8 11 17 19 22) odd?)
  196.  
  197. ; ZAD 11
  198. "Zad. 11"
  199. (newline)
  200.  
  201. ; Zdefiniować funkcje dolacz łączącą dwie listy w jedną listę wynikową np. (dolacz '(1 2 3 4) '(5 6))
  202. ; powinno zwrócić listę (1 2 3 4 5 6).
  203.  
  204. ;(define (dolacz lista1 lista2)
  205. ;  (if (null? lista2)
  206. ;      lista1
  207. ;      (dolacz lista1 (cons lista1 (cdr lista2)))))
  208.  
  209. (define (dolacz lst1 lst2)
  210.   (if(null? lst1)
  211.      lst2    (cons (car lst1) (dolacz (cdr lst1) lst2))))
  212. (dolacz '(1 2 3) '(4 5 6))
  213.  
  214. (dolacz (list 1 2 3 4) (list 5 6))
  215.  
  216. ; Zad 12
  217. ; Zdefiniować funkcję jedynki tworzącą listę zawierającą n jedynek – n przekazywane jako argument funkcji np. (jedynki 4) powinno zwrócić listę (1 1 1 1).
  218. "Zad. 12"
  219. (newline)
  220.  
  221. (define (jedynka n)
  222.   (define duzoJedynek'())
  223.   (if (= n 0)
  224.      duzoJedynek
  225.      (cons 1 (jedynka (- n 1)) )
  226.   ))
  227.  
  228. (jedynka 11)
  229.  
  230. ; Zad 13
  231. ; Zdefiniować funkcję n-ty-element znajdującą n-ty element listy.
  232. "Zad. 13"
  233. (newline)
  234.  
  235. (define (ntyelement n elementy)
  236.   (if (= n 1)
  237.      (car elementy)
  238.      (ntyelement (- n 1) (cdr elementy)) ))
  239.  
  240. (define duzoCyckow'(1 2 3 4 5 6 7 8 9 10))
  241.  
  242. (ntyelement 5 duzoCyckow)
  243.  
  244. ; Zad 14
  245. ; Zdefiniować funkcję wstawnty wstawiającą do listy element na pozycji ntej.
  246. "Zad. 14"
  247. (newline)
  248.  
  249. (define (wstawnty n elementy elemelele)
  250.   (if (= n 1)
  251.      (cons elemelele elementy)
  252.      (cons (car elementy) (wstawnty (- n 1) (cdr elementy) elemelele))))
  253.  
  254. (wstawnty 5 duzoCyckow "ochnascie")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement