Logia04 – rok szkolny 2003/2004 – etap - III
Zad. 1. Zdefiniuj procedurę GWIAZDY :kod rysującą gwiazdozbiór składający się z gwiazd.
Każda gwiazda składa się z pęku ramion-odcinków o tej samej długości, równomiernie rozmieszczonych wokół środka gwiazdy.
Każda gwiazda może posiadać własne gwiazdy-satelity - są one rysowane na przedłużeniu każdego ramienia gwiazdy-matki. Długość ramienia gwiazdy-satelity równa jest jednej trzeciej długości ramienia gwiazdy-matki. Odległości środków gwiazdy-matki i gwiazdy-satelity są równe podwójnej długości ramienia gwiazdy-matki.
Gwiazdy-satelity mogą posiadać swoje własne gwiazdy-satelity, itd.
Centralna gwiazda układu jest rysowana na środku ekranu. Jej ramiona mają losową długość, nie mniejszą niż 20 i nie większą niż 80.
Dana :kod może być liczbą lub listą:
- gdy jest liczbą - reprezentuje pojedynczą gwiazdę bez satelitów - jej wartość określa liczbę ramion,
- gdy jest listą - reprezentuje gwiazdę z satelitami - liczba elementów listy określa wówczas liczbę ramion gwiazdy-matki (będącą jednocześnie liczbą gwiazd-satelitów); poszczególne elementy tej listy (które także są liczbami lub listami) określają wygląd gwiazd-satelitów.
Gwiazdy należy rysować w losowych kolorach, ale wszystkie ramiona danej gwiazdy muszą być rysowane tym samym kolorem. Zakładamy, że dana :kod określa rysunek, w którym poszczególne gwiazdy nie nachodzą na siebie.
Przykład pokazuje rysunek jaki może powstać po wywołaniu Gwiazdy [12 6 6 [77 5 5 5 5 [3 3 3 3 3] 4 4 4] 24]
Zad. 2. Zdefiniuj procedurę DOM :a :h :kod rysującą dom składający się z parteru, pięter i dachu. Każda kondygnacja domu jest szarym prostokątem, o tej samej wysokości, zawierającym okna i drzwi (drzwi - tylko parter). Dach stanowią kominy.
Dana :a określa szerokość domu, :h - wysokość (bez dachu). Dana :kod jest listą słów złożonych z małych liter alfabetu łacińskiego (bez polskich znaków diakrytycznych). Pierwszy element listy opisuje parter, ostatni - dach, inne ? piętra, w kolejności od dołu ku górze. Każde słowo opisuje wygląd jednej kondygnacji. Poszczególne litery mają następujące znaczenie:
- Parter:
- spółgłoski g, j, p, q określają "drzwi zamknięte" - brązowy prostokąt,
- pozostałe spółgłoski to "okna zamknięte" - brązowe kwadraty,
- samogłoska y określa "drzwi otwarte" - żółty prostokąt,
- pozostałe samogłoski to "okna otwarte" - żółte kwadraty.
- Piętro:
- wszystkie spółgłoski - "okna zamknięte",
- wszystkie samogłoski - "okna otwarte".
- Dach:
- litery b, d, f, h, k, l, t - "kominy wysokie" - czarne prostokąty,
- pozostałe litery - "kominy niskie" - czarne kwadraty.
Bok kwadratu (okna, niskiego komina) powinien być maksymalnie duży, ale nie większy niż jedna trzecia wysokości kondygnacji. Okna, drzwi i kominy nie mogą nachodzić na siebie. Prostokąty reprezentujące drzwi i kominy wysokie mają być dwa razy wyższe od kwadratów. Poszczególne elementy powinny być równomiernie rozmieszczone w obrębie kondygnacji, drzwi dotykają do dołu parteru, a kominy wyrastają ponad najwyższym piętrem (patrz rysunek).
Zakładamy, że :kod zawiera co najmniej dwa słowa, a więc dom składa się co najmniej z parteru i dachu.
Poniżej podany jest przykładowy rysunek, jaki może powstać dla wywołania
Zad. 3. Zdefiniuj funkcję PUNKTY :lp, której daną jest lista punktów, a wynikiem wartość logiczna prawda lub fałsz. Każdy punkt to dwuelementowa lista złożona z jego x-owej i y-owej współrzędnej. Wynikiem funkcji jest:
- prawda, gdy na liście znajdują się co najmniej dwa punkty leżące na tej samej prostej równoległej do jednej z krawędzi ekranu (pionowej lub poziomej),
- fałsz, w przeciwnym przypadku.
Oto przykładowe wyniki:
- Wynikiem PUNKTY [[22 33] [33 22] [66 77]] - jest fałsz.
- Wynikiem PUNKTY [[11 22] [33 44] [11 55]] - jest prawda.
Zad. 4. Zdefiniuj funkcję SUMACYFR :lp. Dana :lp jest dowolną listą. Wynikiem funkcji jest suma wartości wszystkich cyfr jakie można odczytać w zapisie listy :lp.
- Wynikiem SUMACYFR [Ala ma 5 kotów i 12 psów] - jest 8 (bo 5+1+2=8).
- Wynikiem SUMACYFR [1 [a 5b5 c -23 d8 6e] [[x5]] abc2def] - jest 37 (bo 1+5+5+2+3+8+6+5+2=37).