Program "rysujący" w konsoli literę alfabetu

0

Witam serdecznie, mam do napisania program, który na ekranie konsoli wypisze znaki, które ułożą się w kształt literki, np. Z, A, X lub L. Na początku chciałbym napisać wersję dla Z.

Program powinien działać na takiej zasadzie, że użytkownik podaje wielkość n (4) i na ekranie wypisuje literkę:

ZZZZ
Z
Z
ZZZZ

Analogicznie gdy podam inne n to będzie się to odpowiednio skalować.

Całość musi być "zamknięta" w tablicy. Jak widać dla n=4 jest to tablica [0..3][0..3]

Przyznam się, że brakuje mi pomysłów jak to napisać. Jedyne co do tej pory napisałem to procedura rysuj, która wypełnia tablicę znakami i w sumie to tyle. Domyślam się, że niektóre elementy tablicy powinienem zastąpić pustym znakiem (spacja) ale tylko jak to odpowiednio napisać hmm? :)

Za bardzo też nie wiem jak szukać rozwiązań za pomocą googla, chyba złe frazy dobieram... :P

Najważniejsza część poniżej:

program rysowanie;

const MAX = 100;

type
	znak = array[0..MAX-1, 0..MAX-1] of char;

var
	tab:znak;
	n:integer;

{procedura dla literki Z}
procedure rysuj(var tab:znak; n:integer);
var i, j:integer;
begin
	for i:=0 to n-1 do
	begin
		for j:=0 to n-1 do
		begin
			write('Z');
		end;
		writeln();
	end;
end;

{glowny program}
begin
	writeln('podaj n: ');
	readln(n);
	rysuj(tab, n);
	readln();
end.

1

Za bardzo też nie wiem jak szukać rozwiązań za pomocą googla, chyba złe frazy dobieram... a pomyślałem może, nie wiem, o tym żeby użyć mózgu i po prostu wymyslić jak to zrobić? o_O W pracy jak dostaniesz cos do zaklepania to myślisz ze będzie gotowiec w google? o_O Zmień studia bo chyba źle złe frazy dobrałeś jak szukałeś kierunku studiów...

  1. Napisz dla każdej literki funkcje która w zależności od rozmiaru litery (parametr funkcji) zwróci tablicę z tą namalowaną literką. Np. dla Z możesz to zrobić za pomocą 3 pętli, jedna rysuje górną belkę w indeksach tab[0][0], tab[1][0],...,tab[n][0], drugie pętla maluje ukośną kreskę, trzecia dolną belkę.
  2. Pascal chyba nie ma wskaźników do funkcji więc zrób funkcje z brzydkim switchem który w zależności od literki podanej jako parametr wywołuje odpowiednia funkcje i zwraca tablicę z ltierką
  3. Głowna funkcja czyta tekst, iteruje po literkach i dla każdej literki woła funkcje 2.
0

Z pustego to i Salomon nie naleje jeśli brakuje pomysłu na algorytm choćbym nie wiem jak długo wytężał szare komórki, tym bardziej, że dopiero się uczę :) Jeden zrozumie po 5 minutach, drugi potrzebuje więcej czasu, a trzeci zrozumie wtedy gdy ktoś mu w miarę wytłumaczy o co chodzi albo nakieruje - każdy człowiek jest inny. No już taki bezczelny raczej nie jestem skoro poświęciłem czas aby ładnie sformułować pytanie i pokazać próbę zapisu :P Chyba nie musiałem wspominać, że siedzę nad tym zadaniem od kilku dni...

Po zajęciach wezmę się do pisania w razie czego podpytam o porady.

0

@Shalom napisał Ci dokładnie co masz zrobić. Jeśli faktycznie chcesz to mieć dynamicznie to błąd już masz na dzień dobry z definicją znaku bo powinieneś zadeklarować tablicę dwuwymiarową dynamiczną czyli:

type TZnak = array of array of char;

następnie procedura rysuj powinna moim zdaniem wyglądać tak:

procedure rysuj(const pWpisanyZnak:Char; n:integer = 4); //przyjmujemy, że najmniejsza sensowna wartość to tabela 4x4 
var vznak: TZnak;
begin
    setlength(vZnak,n,n);//deklarujesz rozmiar tablicy 
    //i sprawdzasz co to za litera
    if UpperCase(pWpisanyZnak) = 'Z' then //może być też funkcja SAMText czy jakiś case to już od ciebie zależy
       vZnak := UzupelnijArrayZ(n);
    //else pozostałe znaki
    for i := 0 to n-1 do
      for j := 0 to n-1 do
      begin
        //rysujesz iterując vZnak[i,j] lub całymi liniami jak wolisz writeln
      end;
end;

Natomiast co do UzupelnijArrayZ to już musisz sobie sam napisać funkcję która wstawi Ci w np tablicę 4x4 wypełniając ją literami Z i spacjami:

0 1 2 3
Z Z Z Z
Z
Z
Z Z Z Z
1

Nie no, jeśli matryca znaku ma mieć zawsze 4x4 pola, to typ danych może być tylko jeden:

type
  TCharMatrix = array [0 .. 3, 0 .. 3] of Char;

Już nie wspomnę o tym, że 4x4 = 16, więc matrycę każdego znaku można by spokojnie wpakować do UInt16 :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1