V tejto kapitole sa budeme venovať kresleniu jednoduchých útvarov. Jednotlivé obrázky sa budú skladať z hviezdičiek a budeme opäť využívať triedu Konzola.
Nakreslenie štvorca:
Najjednoduchším príkladom semigrafickej úlohy je nakreslenie jednoduchého štvorca pomocou hviezdičiek. Najprv si napíšeme program a potom si vo videu vysvetlíme ako presne program funguje.
public static void main(String[] args)
{
int počet = (int)načítajCeléČíslo("Zadajte stranu"); // do premennej počet načíta stranu a = počet hviezdičiek
for (int i = 0; i < počet; ++i) // vonkajší for cyklus
{
for (int j = 0; j < počet; ++j) // vnútorný for cyklus
{
System.out.print("* "); // vykreslenie hviezdičky na obrazovku
}
System.out.println(); // posunutie sa o riadok nižšie
}
}
Nasledujúce video ukazuje ako tento program funguje, ako vykresľuje štvorec z hviezdičiek:
Úlohy na precvičenie:
Nakresli pravouhlý trojuholník opačne:
Trojuholník bude vyzerať takto a počet riadkov nech zadá používateľ na vstupe:
(Tip: Program sa bude skladať z načítania počtu riadkov a z dvoch for cyklov. Dôležité je uvedomiť si ako oba for cykly deklarujem; od akej hodnoty ho spustíme a pri akej hodnote ho zastavíme. Vnútorný for cyklus nám zabezpečuje vykreslenie hviezdičiek v danom riadku (pre estetickejší výsledok vykresľujte hviezdičku s medzerou) a vonkajší for cyklus zabezpečuje redukciu počtu riadkov až k počtu jedna.
Program teda vyzerá nasledovne:
public static void main(String[] args)
{
int počet = (int)načítajCeléČíslo("Zadajte počet riadkov"); // vstupný údaj t.j. počet riadkov trojuholníka
for (int i = počet; i > 0; --i) // vonkajší for cyklus; začíname s plným počtom riadkov a postupne po každom prebehnutí cyklu premennú i znížime o jedna
{
for (int j = 0; j < i; ++j) // hviezdičky vykresľuje po riadkoch, začína vrchným, čiže tu sa počet hviezdičiek po každom vykreslení zvýši až kým j = i, vtedy sa program vráti do vonkajšieho cyklu a zníži sa i a opäť sa idú vykresľovať hviezdičky na obrazovku
{
System.out.print("* ");
}
System.out.println();
}
}
}
Nezabudnite na prepojenie s triednou Konzola.
Napíš program ktorý na obrazovku vykreslí domček z hviezdičiek: Domček bude plne "vyfarbený" hviezdičkami, strecha bude z rovnoramenného trojuholníka a zvyšok domčeka bude tvoriť štvorec. Veľkosť domčeka si zvolí používateľ na vstupe sám a to zadaním počtu "poschodí" strechy.
(Tip: Program sa bude skladať z vykreslenia rovnoramenného trojuholníka a vykreslenia štvorca. V prípade rovnoramenného trojuholníka použijete tri for cykly. Prvý zabezpečí, aby sa vykreslilo toľko "poschodí", koľko zadá používateľ, druhý for cyklus zabezpečí, aby boli vykreslené prázdne miesta pri hviezdičkách z oboch strán (resp. cyklus iba zľava kreslí medzeru). A posledný cyklus zabezpečí samotné vykreslenie hviezdičiek.
V prípade štvorca si musíte uvedomiť dve veci. Po prvé koľko hviezdičiek sa má v riadku vykresliť, pretože ak chcete pekný plný domček, musíte vyrátať ako sa vykreslia hviezdičky v prípade rovnoramenného trojuholníka = koľko hviezdičiek bude tvoriť jeho podstavu. Po druhé koľko riadkov hviezdičiek sa má vykresliť, t.j. či rovnaký počet ako je "poschodí" strechy alebo nie.
Nezabudnite na prepojenie s triednou Konzola.)
Program teda vyzerá nasledovne:
public static void main(String[] args)
{
int počet = (int)načítajCeléČíslo("Zadajte počet riadkov (poschodí) strechy"); // používateľom zvolená veľkosť domčeka je načítaná do premennej počet
for (int i = 0; i < počet; ++i) // vykreslenie rovnoramenného trojuholníka
{
for (int j = i + 1; j < počet; ++j) // vykreslenie správneho počtu medzier v každom riadku trojuholníka
{
System.out.print(" ");
}
for (int j = 0; j < 1 + (i * 2); ++j) // vykreslenie správneho počtu hviezdičiek v každom riadku trojuholníka
{
System.out.print("*");
}
System.out.println();
}
for (int i = 0; i < počet - 1; ++i) // vykreslenie štvorca; cyklus sa bude opakovať kým i bude menšie ako počet - 1, t.j. podstava trojuholníka tvorí zároveň prvé poschodie štvorca; nie je chybou ak ostane i < počet; avšak vtedy bude celý domček pretiahnutý
{
for (int j = 0; j < počet + počet - 1; ++j) // v tomto prípade púšťame vnútorný cyklus, kým je j menšie ako počet + počet -1, je to preto, že podstava trojuholníka bude mať presne taký počet hviezdičiek, takže týmto zabezpečíme kompaktnosť domčeka
{
System.out.print("*"); // oproti príkladu Nekreslenie štvorca, sme zrušili medzeru, aby bol domček plný; avšak opäť by nebolo chybou nezmeniť to, ale len v prípade, že sme nezmenili deklaráciu cyklu
}
System.out.println(); // posunutie sa o riadok nižšie
}
}