Ver. 1.0 Beta, Don't have a compiler? Now you can write simple scripts ONLINE! This is a basic version -does not include all the Pascal statements. Only to learn basics

Pascal

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.

 

This website uses cookie files in order to provide Google services (advertisements, analitycs) and Facebook. If you want to block using cookies, turn them off in your browser settings. Need a help? Click me