Część I (na 20.01.2015 i 27.01.2015)
|
Zadanie 1 (0p.)
Zapoznaj się ze środowiskiem Dr Racket. Przeczytaj
wprowadzenie,
przejrzyj rozdziały 1-4
przewodnika.
|
Zadanie 2 (2p.) Napisz
procedurę count-change obliczającą liczbę
sposobów rozmieniania danej kwoty na
monety. Procedura bierze jako argument kwotę
(nieujemną liczbę całkowitą) oraz listę nominałów
monet (listę liczb całkowitych). Przykładowo,
wartością wyrażenia
(count-change 100 '(1 5 10 25 50))
powinno być 292.
|
Zadanie 3 (2p.) Napisz procedurę, która
dla zadanej listy zlicza liczbę atomów na tej
liście. Elementami listy mogą być liczby, symbole,
napisy, wartości logiczne oraz pary (w tym
listy). Atomami nazywamy wszystkie obiekty, które
nie są parami.
|
|
Część II (na 03.02.2015)
|
Zadanie 4 (6p.) Ruchoma konstrukcja
składa się z dwóch ramion (prawego i
lewego). Każde ramię ma określoną długość, a na
jego końcu zawieszony jest ciężarek lub inna
ruchoma konstrukcja. Konstrukcje tego typu
reprezentujemy za pomocą par:
(define (mk-mobile left right) (cons left right))
(define (mk-branch length struct) (cons length struct))
Ciężarek reprezentujemy jako liczbę, która określa jego wagę.
-
Napisz
selektory left-branch,right-branch
dla konstrukcji (zwracające odp. lewe i prawe
ramię), oraz branch-length,
branch-struct dla ramienia (zwracające
odp. długość ramienia i strukturę/ciężar
zawieszony na jego końcu).
-
Używając selektorów napisz procedurę
obliczającą całkowitą wagę konstrukcji, a
także procedurę sprawdzającą, czy konstrukcja
jest zbalansowana. Konstrukcja jest
zbalansowana, gdy iloczyn długości ramienia i
ciężaru na nim zawieszonego jest taki sam dla
obu ramion, oraz gdy każda z podkonstrukcji
wiszących na ramionach jest również
zbalansowana.
- Napisz procedurę rysującą zadaną konstrukcję, korzystając z
bibliotek Racketa.
|
Zadanie 5 (6p.) Napisz
procedurę deriv wykonującą symboliczne
różniczkowanie wyrażeń algebraicznych, dla której
argumentami są: wyrażenie algebraiczne zbudowane
ze zmiennych i stałych liczbowych za pomocą
dodawania i mnożenia, oraz zmienna, względem
której należy liczyć pochodną. Przykładowo,
procedura mogłaby dawać takie wyniki:
> (deriv '(* x y) 'x)
y
> (deriv '(* (* x y) (+ x 3)) 'x)
(+ (* x y) (* y (+ x 3)))
Jak widać z drugiego przykładu, należy zadbać o
upraszczanie otrzymanych przez różniczkowanie
wyrażeń.
|
|