Ustalamy następujący sposób szyfrowania wyrazów utworzonych z małych liter alfabetu łacińskiego a, b, c, ...., x, y, z, składającego się z 26 liter (bez polskich znaków ą, ę, itd.):
Ogólnie - każde wystąpienie litery i-tej od początku alfabetu zastępujemy literą i-tą od końca.
Zdefiniuj funkcję szyfrującą SZYFR :wyraz, której wynikiem jest dany :wyraz zaszyfrowany zgodnie z opisaną wyżej zasadą. Oto przykładowe wyniki:
SZYFR "abba | jest słowo zyyz |
---|---|
SZYFR "abc | jest słowo zyx |
Funkcję AB podzielimy na dwa etapy. W etapie pierwszym będziemy losować literę, którą dopisujemy na koniec wyniku. W każdej iteracji zliczamy ile razy wylosowaliśmy którą litere. Pętle kończymy, gdy licznik którejś litery osiągnie swoje maksimum. Wtedy w ramach drugiego etapu wynik uzupełnimy literą, której licznik jeszcze nie osiągnął maksimum.
(2.) Deklarujemy zmienną :wyraz. Jest to zmienna do której będziemy dopisywać A i B. Następnie (3.) rozpoczynamy pierwszy etap. W pętli dopóki (4.) obydwa liczniki są większe od zera: (6.) losujemy, którą literę dopisujemy. (7.) W zależności od wylosowanej liczby: (8.) dopisujemy A i (9.) zmniejszamy zmienną :n. W przeciwnym wypadku (11.) dopisujemy B i (12.) zmniejszamy licznik :m.
Po wyjściu z pętli nie wiemy, której litery mamy już nie dopisywać. Istnieje możliwość, aby to sprawdzić i dopisać odpowiednią ilość wystąpień drugiej litery. Jednak o wiele prostszym sposobem jest (15. - 18.) dopisywanie A dopóki licznik nie osiągnie 0 oraz (19.- 22.) B póki licznik nie osiągnie 0. (23.) Na koniec zwracamy :wyraz.
Napisz procedurę KWADRACIKI :n, która, dla dowolnej danej liczby całkowitej n, z zakresu od 1 do 20 włącznie:
Musisz zdefiniować procedurę KWADRACIKI w taki sposób, aby każda kombinacja zamalowanych kwadracików była możliwa - tzn. mogła powstać na skutek wywołania polecenia. Oto przykładowe wyniki wywołania KWADRACIKI 4 i KWADRACIKI 6.
Sprawdzanie poprawności wprowadzonego wyrazu polega na sprawdzeniu czy jest tyle samo wystąpień litery A i B:
Deklarujemy liczniki występień (2.) litery A i (3.) B. (4.) Dla każdej litery w :wyraz: (5.) sprawdzamy czy jest A. Jeśli jest to (6.) zwiększamy :licznikA w przeciwnym wypadku (8.) :licznikB.
(11.) Mapę rysujemy tylko wtedy, gdy oba liczniki są równe. (12.) Ustalamy maksymalną wysokość rysunku. (13.) Obliczamy odległość pomiędzy dwoma kropkami w pionie bądź poziomie. (14. - 18.) Przesuwamy pisak w lewy dolny róg rysunku.
(19. - 29.) Rysujemy siatkę złożoną z kropek i (30. - 33.) wracamy z powrotem w lewy dolny róg rysunku.
Przechodzimy do rysowania trasy na wykropkowanej mapie. (34.) Dla każdego elementu z podanego wyrazu :wyraz: w przypadku (35.) wystąpienia litery A (36.) rysujemy pionową kreske. Jeśli jednak litera to B to (38. - 40.) rysujemy kreske poziomą. Pozostaje nam teraz rozpatrzeć przypadek kiedy dane są niepoprawne. Wtedy (44.) wypisujemy tylko odpowiedni komunikat.
Napisz procedurę z dwoma parametrami KWADRATY :k :n, która dla dowolnych dwóch liczb całkowitych k oraz n, takich że \(0 \leq k \leq n^2\) oraz \(1 \leq n \leq 20\), rysuje na środku ekranu możliwie duży kwadrat podzielony na nxn małych kwadracików, z których dokładnie k losowo wybranych kwadracików ma zamalowane wnętrza.
Musisz zdefiniować procedurę KWADRATY w taki sposób, aby każda kombinacja k zamalowanych kwadracików była możliwa - tzn. mogła powstać na skutek wywołania polecenia. Oto przykładowe wyniki wywołania KWADRATY 17 6:
W celu napisania funkcji TRASA_REG warto napisać funkcję pomocniczą TRASA_REG_pom, która wylosuje trasę. Ze względu na fakt, że trasa ma być regularna to wylosowany ślad będzie powtórzony 4 razy. Podczas losowania trasy należy na bieżąco sprawdzać ile zostało wylosowanych kresek pionowych, a ile poziomych. Jeśli już jednego typu kresek jest maksymalna ilość to losowaną listę należy uzupełnić tylko kreskami drugiego typu.
Wylosowany kod będzie składał się z dwóch literek S i P. W przyjętym zapisie literka P oznacza kreskę naprzód, a literka S kreskę w bok.
Rysowanie trasy najlepiej rozpocząć od narysowania siatki i napisaniu literek kierunku:
(2.) Dostosuj długość odcinka do rysowanej mapy. (3. - 11.) Napisz kierunki świata. (12. - 27.) Narysuj siatkę po której będzie rysowana mapa.
Drugi etap rysowania mapy polega na (31.) wylosowaniu mapy i jej narysowaniu. Należy pamiętać, że raz wylosowana trasa ma zostać narysowana cztery razy:
(28. - 30.) Ustaw odpowiednio żółwia. (31.) Wylosuj trasę. (32. - 43.) Cztery razy narysuj wylosowaną trasę. (34.) W zależności od pobranej literki kodu narysuj odpowiedni odcinek.