Napisz procedurę ORNAMENT, po wywołaniu której będzie rysowany motyw taki, jak poniżej. Proporcje dla ośmiokąta odczytaj z rysunku pomocniczego obok. Długości boków stykających się trójkątów gwiazdek różnej wielkości są w proporcji 1 do 2. Szerokość ornamentu wynosi co najmniej 700.
Rozwiązanie zostało podzielone na trzy procedury: ORNAMENT_EL rysuje pojedynczy element ze wzoru, ORNAMENT_FRAGMENT rysuje całą gwiazdę złożoną z 9 elementów, a główna procedura ORNAMENT pozycjonuje rysunek na stronie i rysuje trzy fragmenty oraz dobiera kolory.
Procedura ORNAMENT_EL przyjmuje następujące argumenty: :a - długość boku szczęściokąta oraz kolory :kol1 oraz :kol2, gdzie kolory odpowiadają kolejno mniejszemu i większemu trójkątowi.
Rozpoczynamy rysowanie od środka elementu tj. środka sześcianu, więc: (2. - 5.) przesuwamy się do jednego z rogów, a następnie (6.) rysujemy cztery identyczne fragmenty tj. można zauważyć, że cztery razy rysujemy (7. - 11.) mały, a potem (13. - 17.) duży trójkąt w międzyczasie przechodząc do kolejnych rogów. Na koniec (20. - 22.) wracamy do początkowego ustawienia i (23. - 24.) zamalowywujemy środkowy rysunek.
Procedura ORNAMENT_FRAGMENT przyjmuje takie same argumenty jak procedura ORNAMENT_EL.
Procedurę rozpoczynamy od (2.) narysowaniu elementu pośrodku następnie (3.) obliczamy odległość środka fragmentu od środka mniejszych elementów i (4. - 10.) rysujemy cztery mniejsze gwiazdki. Podobnie (12. - 20.) postępujemy podczas rysowania brakujących czterech elementów.
W głównej procedurze pozostaje jedynie wywołać rysowanie fragmentów w odpowiednim miejscu i z odpowiednimi parametrami. W tym przypadku (2.) określamy bok :a sześciokątów największych elementów i na tej podstawie (3.) wyliczamy odległość pomiędzy środkami fragmentów. Następnie (4. - 10.) rysowane są trzy fragmenty.
Napisz procedurę DRZEWO :ile, która tworzy rysunek drzewa składającego się z brązowego pnia i zielonej korony zakończonej rzędem ciemnozielonych liści. Wysokość rysunku jest stała i wynosi 470. Parametr :ile może przyjmować wartości od 2 do 26 i określa liczbę elementów pnia oraz liczbę poziomych zielonych gałęzi.
Drzewo jest złożone z dwóch figur: rombu oraz trójkąta. Warto zauważyć, że bok trójkąta jest równy bokowi romba. Jest to szczególnie ważne podczas wyliczania boku figur w głównej procedurze. W celu uproszczenia zapisu kodu dla każdej z figur została napisana oddzielna procedura, która pozwala narysować wybraną figurę w środku gdzie stoi żółw.
Procedura DRZEWO_TRÓJKĄT przyjmuje dwa argumenty: :h - wysokość elementu w drzewie oraz :kol - kolor danego elementu.
Na podobnej zasadzie do procedury DRZEWO_TRÓJKĄT działa procedura DRZEWO_ROMB
W głównej procedurze na początku należy wyliczyć kilka wielkości: (2.) :n - łączna ilość elementów, (3. - 4.) :w - określa łączą wysokość elementów (przekątne rombów i wysokości trójkątów). Na tej podstawie można (5.) wyliczyć bok rombów i trójkątów. Następnie (6.) :ht to wysokość trójkąta, a :hr rombu.
Po wstępnych obliczeniach (7.) przesuwamy się na środek korzenia i (8.) go rysujemy. Następnie (10. - 13.) rysujemy pień o :ile - 1 rombach. Następny etap (14. - 33.) polega na narysowaniu zielonej korony drzewa. Należy pamiętać, że w każdym kolejnym wierszu jest o dwa romby więcej do narysowania czyli w i-tej rzędzie korony jest 2·:i - 1 elementów. Na koniec (35.) obracamy żółwia do góry nogami i (36. - 47.) rysujemy górną część korony.
Czy zastanawiałaś/eś się kiedyś, ile masz dni? Zadanie jest na pozór proste. Trzeba jednak pamiętać o uwzględnieniu lat przestępnych. Rok przestępny to taki rok, który jest podzielny przez 4, ale nie jest podzielny przez 100 lub jest podzielny przez 400.
Napisz funkcję IMD :rok :miesiąc :dzień, której wartością jest liczba dni, która upłynęła od danej daty do dnia 28 listopada 2011 roku (data zakończenia 1 etapu). Przyjmij, że podana data jest poprawna i jest późniejsza niż 31 grudnia 1582 roku i wcześniejsza niż 28 listopada 2011 roku.
IMD 1998 06 14 | jest 4915 |
---|---|
IMD 1990 11 29 | jest 7669 |
IMD 2011 11 27 | jest 1 |
Istnieją dwa główne podejścia do tego zadania. Jedno z nich opiera się na zliczeniu oddzielnie ilości dni w roku pomiędzy datami oraz każdego miesiąca w latach rozpoczęcia i zakończenia. Jednak zdecydowanie prostszym rozwiązaniem jest potraktować dzień, miesiąc i rok jako swojego rodzaju liczniki. Wtedy wystarczy zliczyć ile dni się dodało, aby otrzymać szukaną datę.
Oczywiście licznik dni jest uzależniony od miesiąca i roku w przypadku miesiąca Luty, który ma 29 dni jeśli rok jest przestępny. Z tego względu została dopisana dodatkowa funkcja IMD_przestepny, która dla podanego roku zwraca czy jest to rok przestępny w postaci wartości logicznej.
W funkcji głównej początkowo (2.) deklarowany jest licznik dni oraz (3.) liczba dni w każdym miesiącu. Dni są dodawane dopóki (4.) nie zostanie uzyskana konkretna data. Jak można zauważyć bardzo łatwo w tym algorytmie zmienić datę końcową.
Kiedy data wciąż nie jest poprawna to (5.) zwiększamy ile dodajemy dni i (6.) dodajemy jeden dzień. (7.) Oczywiście należy sprawdzić czy w danym miesiącu istnieje taki numer dnia, bo jeśli nie to (9.) zwiększamy miesiąc, a (10.) dzień ustalamy na pierwszy. Tak samo w przypadku (11.) miesięcy, ponieważ jest ich tylko 12 to, gdy zmienna :miesiac przyjmie wartość większą od 12 to (13.) zwiększamy rok i (14.) resetujemy numer miesiąca do 1. Wracając do sprawdzania ilości dni to (8.) należy się upewnić ile dni ma aktualnie Luty.
Napisz procedurę KWIAT :ir :iwk, która rysuje na środku ekranu kwiat złożony z samych okręgów. Parametr :ir oznacza liczbę okręgów rysowanych wzdłuż promienia, a parametr :iwk - liczbę okręgów rysowanych wokoło. Okręgi wokoło są rysowane symetrycznie wokół środka kwiatka. Parametr :ir przyjmuje wartości od 1 do 9, a :iwk od 2 do 60. Długość promienia wynosi co najmniej 150.
W zadaniu został podany promień minimalny, który w rozwiązaniu przyjmuje za stały i na jego podstawie (2.) wyliczam promień pojedynczego kółka. Potem (3.) Dla każdego ramienia: (4. - 6.) przechodzę do środka najbliższego okręgu i (7. - 10.) rysuje odpowiednią ilość okręgów przechodząc od środka do środka. (11. - 12.) Po powrocie: (13.) obracam żółwia, aby narysować kolejne ramię rysunku.