Choinka z gwiazdek
Najczê¶ciej w szko³ach nauczyciele zadaj± problem rysowania choinki z gwiazdek. Chodzi o to by uzyskaæ rysunek w trybie tekstowym.
Ile wierszy? 5
*
***
*****
*******
*********
Choinka z gwiazdek z warunkiem if
program choinka;
var i, j, w : Integer;
begin
Write('Ile wierszy? ');
ReadLn(w);
for i:=1 to w do
begin
for j:=1 to w + i - 1 do
if j >= w - (i - 1) then
Write('*')
else
Write(' ');
WriteLn;
end;
end.
Choinka z gwiazdek z samymi pêtlami
program choinka;
var i, j, w : Integer;
begin
Write('Ile wierszy? ');
ReadLn(w);
for i:=1 to w do
begin
for j:=1 to w - i do Write(' ');
for j:=1 to i * 2 - 1 do Write('*');
WriteLn;
end;
end.
Takich sposóbów rozwi±zania mo¿e byæ bardzo wiele. Chodzi o to jak matematycznie zapisaæ rozwi±zanie zadania przy pomocy zmiennych. Jak samemu znajdowaæ takie matematyczne rozwi±zania?
Najpierw tworzymy pêtlê odpowiedzialn± za rysowanie kolejnych linii choinki. Zaczynamy od czubka, koñczymy na dole. Czyli ta pêtla musi byæ od 1 do tylu, ile u¿ytkownik wpisa³ wierszy. Przyjmijmy, ¿e od 1 do "w", gdzie w jest zmienn±, wczytan± z klawiatury. Po ka¿dorazowym narysowaniu linii, trzeba przenie¶æ kursor do linii nastêpnej za pomoc± WriteLn. Ale jeszcze przed przej¶ciem do kolejnej linii trzeba przecie¿ narysowaæ ig³y w poziomie.
Z tego wynika, ¿e wewn±trz tej pêtli musi byæ jeszcze inna, która narysuje ig³y choinki. Jest to o tyle utrudnienie, ¿e dla choinki, która ma 5 wierszy najpierw trzeba narysowaæ 4 spacje i jedn± gwiazdkê, potem 3 spacje i 3 gwiazdki, potem 2 spacje i 5 gwiazdek... itd.
£atwo zauwa¿yæ, ¿e liczba spacji z ka¿dym wierszem maleje o 1. Na samej górze bêdzie tyle spacji co wierszy choinki – 1. Znowu liczba gwiazdek ro¶nie od 1, zwiêkszaj±c siê w ka¿dym rzêdzie o 2 gwiazdki. Wynika z tego, ¿e:
Dla choinki o wysoko¶ci zapisanej w zmiennej "w"
W pêtli od 1 do w rysujemy:
1 rz±d: w - 1 spacji, 1 gwiazdka
2 rz±d: w – 2 spacji, 3 gwiazdki
3 rz±d: w – 3 spacji, 5 gwiazdek
"w"rz±d: w – w spacji, w * 2 – 1 gwiazdek
Czyli w jednej pêtli musz± byæ dwie nowe pêtle, z których jedna rysuje spacje, a druga gwiazdki. Teraz sk±d bêdzie wiadomo, ¿e gdy jeste¶my w pierwszym rzêdzie, mamy od w odj±æ 1 i narysowaæ jedn± gwiazdkê, a w drugim rzêdzie od w odj±æ 2 i narysowaæ 3 gwiazdki?
W³a¶nie do tego s³u¿y zmienna skojarzona z pêtl±! Pisali¶my pêtlê dla zmiennej i oraz j. Czyli w pierwszym rzêdzie i bêdzie równe 1, w drugim i=2, w trzecim i=3, itd. To nam wystarczy.
Trzeba wiêc napisaæ pêtlê ze spacjami od 1 do w – i, a pêtlê z gwiazdkami od 1 do i * 2 - 1.