Napisz funkcję, która wypełni pusty kwadrat o rozmiarze n określonym znakiem tak, aby wzór przypominał wybraną literę. Napisz uniwersalną funkcję, która narysuje literę na podstawie pewnych informacji. Przykładowo literka X o rozmiarze 5 powinna wyglądać następująco:
Kluczem do efektywnego rozwiązania zadania jest napisanie wzoru funkcji uniwersalnego dla każdej litery. Otóż jeśli wyobrazimy sobie, że rysujemy po pustym kwadracie o boku n to dla każdego pola chcemy wybrać czy je zamalowywujemy czy zostawiamy puste. Można to zrobić przy pomocy warunku lub wielu warunków. Do dyspozycji są, aż trzy zmienne: pozycja (x, y) oraz bok n. Przykładowo, aby zamalować pierwszy wiersz wystarczy sprawdzić, że x == 0. Z kolei, aby narysować przekątną to należy sprawdzić, że x == y.
Podsumowując wzór funkcji uniwersalnej polagałby na napisaniu pętli przechodzącej po kolejnych polach, a następnie sprawdzałby warunek przypisany do danej litery. Warunek ten można przenieść do oddzielnej funkcji, ponieważ korzystanie z instrukcji switch lub ifów wewnątrz podwójnej pętli mogłoby znacząco utrudnić czytanie kodu.
Najprostszym sposobem na literę "U" polega na narysowaniu lewej i prawej krawędzi oraz dolnej. W tym celu sprawdzamy warunek x == 0 lub x == n-1 lub y == n-1. Uwaga: n-1 to indeks ostatniego wiersza / kolumny.
Z kolei litera "X" wymaga sztuczki polegającej na porównaniu x == y lub x == n-y-1, aby narysować dwie skośne linie. Pierwszy warunek rysuje linię z lewego górnego rogu do prawego, dolnego.
Choć litera "T" składa się z zaledwie dwóch linii to problem może stanowić narysowanie trzonka. Otóż wystarczy sprawdzić x == n/2 i x == 0.
Czasem warunki muszą być jednak trochę bardziej skomplikowane. Przykładowo, aby napisać literę "W" warunek na środkową kreskę to koniunkcja x == n/2 oraz y >= n/2.
Zostały tutaj podane jedynie cztery przykładowe litery, ale schemat, aby napisać warunki jest dla każdej taki sam. Czasem jednak trzeba będzie napisać ich więcej, a czasem mniej. Najlepiej jest rysować każdy fragment litery oddzielnie, aby mieć pewność, że na końcu wszystko wyjdzie jak należy.
Funkcja rysujLitere() przyjmuje trzy argumenty: rozmiar litery n, funkcja - adres funkcji, która zwróci prawdę / fałsz czy na daną pozycję "zamalować" oraz opcjonalny argument znak, który określi na jaki kolor zamalować.
Funkcja składa się z dwóch pętli: pierwsza przechodzi po kolejnych wierszach, a druga kolumnach. Po narysowaniu pełnego wiersza wpisywany jest znak nowej linii.
Oto przykładowa funkcja, która przekazana do rysujLitere() narysuje literę "X":
W celu wywołania funkcji i narysowania litery o rozmiarze wprowadzonym przez użytkownika wystarczy wpisać:
Napisz kod głównej funkcji w taki sposób, aby zawierała tylko jedną pętlę i odwołanie do warunku. Postaraj się wykorzystać tylko jedną zmienną w pętli oraz n.