Napisz procedurę PLECIONKA, która tworzy na środku ekranu rysunek plecionki taki, jak obok. Wysokość rysunku wynosi nie mniej niż 400.
Zaproponowane rozwiązanie poniżej korzysta z trzech procedur. Pierwsza z nich PLECIONKA_el rysuje jeden, pojedynczy element na rysunku. Rozmiarem rysunku można sterować przy pomocy parametru :a, który określa długość najkrótszego odcinka.
Kolejne spotrzeżenie, które ma uprościć wykonanie zadania jest fakt, że w środku rysunku zostało narysowanych sześć takich elementów. Zostały one ustawione w kółko, a dokładniej można powiedzieć, że mają dokładnie po jednym wspólnym wierzchołku z sześciokątem. Bardzo ważnym faktem jest to, że po obróceniu fragmanetu o 60º dalej jest takim samym fragmentem (powstaje przystająca figura). Obracanie oczywiście można powtórzyć dowolną ilość razy. Tego typu fragment rysuje procedura PLECIONKA_fragment:
Jak można zauważyć to na rysunku takich sześciokątów jest 7. Co więcej jeśli by je obrysować jak najmniejszą figurą to wyjdzie ... duży sześciokąt. Oznacza to, że w każdym jego rogu można rozpocząć rysowanie fragmentu. Niektóre z elementów będą przez to rysowane 2 razy. Nie trzeba później rysować środkowego elementu, ponieważ zostanie on narysowany w trakcie rysowania zewnętrznych fragmentów. Ostateczny kod procedury głównej PLECIONKA:
Rozmiar narysowanego rysunku można sterować przy pomocy zmiennej :a, która jest deklarowana na samym początku procedury głównej. Domyślniej jest to wartość 30, ponieważ wtedy grafika końcowa spełnia założenia zadania.
Napisz procedurę RAMKI:ile, która tworzy na środku ekranu rysunek składający się z :ile ramek, taki, jak w przykładach. Parametr :ile może przyjmować wartości od 1 do 9. Szerokość zewnętrznej ramki wynosi 480. Szerokość każdej kolejnej ramki stanowi 16/21 szerokości ramki ją obejmującej.
Przyglądając się rysunkowi RAMKI 1 należy zauważyć, że składa się on z czterech identycznych fragmentów. Jest to grafika podobna do tej przedstawionej na rysunku pomocniczym, ale bez elementu z prawej lub lewej. Innymi słowy cały obrazek można narysować w czterech iteracjach rysując ten sam fragment. Procedura RAMKI_ramka przyjmuje jeden argument :szer, który określa szerokość aktualnie rysowanej ramki. Procedura rysuje rysunek pośrodku miejsca, gdzie żółw rozpoczyna rysowanie.
(2.) Oblicz długość najkrószego odcinka. Potem (3. - 5.) przejdź w lewy, dolny róg rysunku. Narysuj (7. - 32.) cztery takie same fragmenty. Za każdym razem na koniec iteracji (29. - 31.) przesuwając się do kolejnego rogu. Na koniec (33.) przywróć czarny kolor pisaka i (34. - 37.) wróć tam skąd zostało rozpoczęte rysowania.
Teraz pozostaje jedynie wywoływać w procedurze RAMKI procedurę RAMKI_ramka z odpowiednimi parametrami. Innymi słowy główna procedura (3. - 6.) to pętla, która w każdej iteracji (4.) rysuje ramkę o aktualnej szerokości (początkowo :szer = 480) i (5.) oblicza następną szerokość.
Burmistrz miasta Logianów, planując wiele inwestycji, zlecił Działowi Architektury wykonanie wizualizacji. Wokół budynków mają zostać ułożone dwukolorowe chodniki z kostek takich, jak na rysunku wyżej. Niektóre kostki należy przeciąć na pół tak, by powstał prostokątny chodnik.
Napisz procedurę CHODNIK:ilek :iler, która tworzy rysunek prostokątnego chodnika ułożonego z szarych i różowych kostek. Parametr :ilek oznacza liczbę kolumn ułożonych z różowych kostek. Parametr :iler oznacza liczbę różowych kostek potrzebnych do ułożenia jednej kolumny. Oba parametry mogą przyjmować wartości od 1 do 20. Wysokość rysunku wynosi 400 lub szerokość 600.
Pierwszy etap wykonania rysunku polega na obliczeniu szeokości kostki oraz jej wyśrodkowania na stronie. Tutaj należy najpierw obliczyć długość odcinka, która wynika zarówno z wysokości jak i szerokości obszaru rysowania. Potem należy oczywiście wybrać mniejszą wartość i przyjąć ją za parametr szerokości :a, który będzie oznaczał najkrótszy odcinek elementu kostki.
W celu narysowania chodnika skorzystamy z pewnej sztuczki. Pisanie dodatkowej funkcji do rysowania połowy kostki może okazać się mało wygodne i podczas konkursu mogłoby zabraknąć czasu. Tutaj nie trzeba rysować szarej kostki, a wystarczy różową, ponieważ po jej narysowaniu zostaną obrysowane kontury szarej. Jednak należy pamiętać, że szary kolor sam się nie pojawi i należy narysować najpierw szare prostokąty na których zostanie narysowana szara kostka. Na koniec przechodzimy do punktu skąd zostaną narysowane kostki.
Narysowanie różowych kostek polega na tym, że najpierw rysujemy obramowanie wszystkie kostek w danej kolumnie, a dopiero potem dorysowywujemy dodatkowe linie, które symbolizują łączenia kostek.
Napisz funkcję KIEDY:x :y, której wynikiem będzie liczba określająca, którego dnia mały żuczek znajdzie się na szczycie dziesięciometrowego słupa. Żuczek w dzień wspina się o :x centymetrów, w nocy osuwa się o :y centymetrów. Załóż, że :x >:y.
KIEDY 300 100 | jest 5 |
---|---|
KIEDY 4 2 | jest 499 |
W celu obliczenia ile dni będzie szedł żuczek można skorzystać z wzoru. Mianowicie wiemy, że żuczek dziennie przebywa :x - :y cm. Wiemy też, że ostatniego dnia jest gwarantowane wejście o :x cm, więc musimy dowiedzieć się kiedy osiągnie co najmniej wysokość 1000 - :x. Można tego dokonać dzieląc to wyrażenie przez dzienny odcinek, który przebywa. Uwaga! Należy pamiętać, że później ten wynik należy zaokrąglić w górę, aby poznać faktyczną ilość dni spędzonych na wspinaniu. Funkcja główna to zaledwie jeden wzór:
Z kolei funkcja wgóre przyjmuje jeden argument :a i zwraca argument zaokrąglony w górę. Oto kod: