Logia06 – rok szkolny 2005/2006 – etap - III

Zad. 1. Kipu to system zapisu liczb i innych danych stosowany przez Indian andyjskich (m.in. w państwie Inków). Polegał on na utrwalaniu danych za pomocą węzłów wiązanych na sznurkach, których sekwencje odchodziły od sznurka głównego (poziomego).

Zdefiniuj procedurę KIPU :słowa, gdzie dana :słowa jest niepustą listą słów złożonych z małych liter alfabetu łacińskiego (bez polskich znaków diakrytycznych), rysującą sznurki z węzłami. Co trzecią literę alfabetu poczynając od a (czyli litery a, d, g itd.) kodujemy węzłem pojedynczym (obrócony kwadrat), co trzecią literę poczynając od b (b, e, h itd.) węzłem podwójnym (dwa kwadraty, wierzchołek drugiego leży w środku pierwszego), pozostałe węzłem potrójnym (trzy kwadraty) - patrz przykłady. Każde kolejne słowo kodowane jest jednym pionowym sznurkiem. Odstępy pomiędzy węzłami-literami są równe przekątnej pojedynczego kwadratu, a odstępy pomiędzy pionowymi sznurkami dwóm przekątnym. Rysunek musi mieścić się na ekranie i spełniać jeden z dwóch warunków: długość sznurka głównego wynosi 600 lub długość najdłuższego pionowego sznurka wynosi 400.

Obok widać efekty wywołań KIPU [a b c abc] oraz KIPU [ala ma kota].

Zad. 2. Zdefiniuj procedurę PROS :lista :s :w rysującą na środku ekranu ciąg prostokątów. Danymi procedury są: :lista - niepusta lista słów składających się z małych liter alfabetu łacińskiego (bez polskich znaków diakrytycznych), z których każde zawiera co najmniej jedną samogłoskę i co najmniej jedną spółgłoskę, :s - określa szerokość rysunku, a :w - określa wysokość rysunku. Kolejne prostokąty odpowiadają kolejnym słowom. Dolne boki prostokątów stanowią dolną krawędĽ rysunku. Dwa sąsiednie prostokąty mają wspólny fragment jednego z pionowych boków. Szerokości poszczególnych prostokątów są proporcjonalne do liczby spółgłosek w poszczególnych słowach. Wysokości poszczególnych prostokątów są proporcjonalne do liczby samogłosek w poszczególnych słowach.

Obok widać efekty wywołań PROS [ala ma kota] 222 111 oraz PROS [abrakadabra hokus pokus] 360 111.

Zad. 3. Zdefiniuj funkcję ILEL :lista, gdzie dana :lista jest dowolną listą. Zadaniem funkcji jest analiza wszystkich małych liter alfabetu łacińskiego (bez polskich znaków diakrytycznych), występujących w zapisie danej :lista. Podczas tej analizy wszystkie pozostałe znaki są pomijane. Wynikiem funkcji jest lista dwuelementowych list zawierających literę i liczbę jej wystąpień w danej :lista. Kolejność elementów w liście wynikowej wynika z kolejności liter w alfabecie. Jeśli jakaś litera nie występuje w danej :lista, to w wynikowej liście stosowny element jest pomijany.

Zad. 4. Zdefiniuj funkcję SCALAJ :listyliczb, gdzie dana :listyliczb jest niepustą listą uporządkowanych niemalejąco list liczbowych. Wynikiem funkcji jest uporządkowana niemalejąco lista ze scalonymi liczbami z list danej :listyliczb.