Ver. 1.0 Beta, Nie masz kompilatora? Teraz możesz pisać skrypty ONLINE! Wersja podstawowa -nie zawiera wszystkich poleceń Pascala. Służy do nauki podstaw

Jak oprogramować choinkę z gwiazdek i tabliczkę mnożenia- zagnieżdżanie pętli w Turbo Pascalu

Pascal

Wsteczwstecz Warunki, if... then... else...
W góręw górę Podstawy Pascala
Dalejdalej Rekordy i wskaźniki

Jak oprogramować choinkę z gwiazdek i tabliczkę mnożenia- zagnieżdżanie pętli w Turbo Pascalu

Zagnieżdżanie pętli


Pętle można dowolnie zagnieżdżać. Znaczy to, że może istnieć pętla w pętli. Głębokość zagnieżdżenia jest nieograniczona. Zagnieżdżenia pętli są bardzo często wykorzystywane. Uwaga, wewnątrz pętli nie wolno używać tej samej nazwy zmiennej do pętli wewnętrznej. W ten sposób mógłbyś zawiesić program.


Przykład pokaże w jaki sposób robi się zagnieżdżenia.



var i, j:Integer;
begin
 for i:=1 to 10 do
 begin
   Write(i : 3);
   for j:=1 to 10 do
    Write(j : 3);
   WriteLn;
 end;
end.

Program wykonuje pierwszą pętle (dla zmiennej i) 10 razy. W pętli siedzi druga pętla (ze zmienną j), która za każdym razem jest wykonywana również 10 razy. Skutek będzie taki, że druga pętla od początku do końca wykona się 10 razy. Czyli dla zmiennej i = 1 j będzie przyjmowało wartości 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 i od początku dla i=2 znowu j= 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3... i aż do i = 10 i j = 10



Wynik na ekranie będzie wyglądał tak:


1  1  2  3  4  5  6  7  8  9 10
2  1  2  3  4  5  6  7  8  9 10
3 ......
.
.
.
10 1  2  3  4  5  6  7  8  9 10

Warto zwrócić uwagę na to, że za pętlą i:=1 to 10 do jest begin! Dlaczego? Gdyby go nie było 10 razy wykonałaby się tylko następna instrukcja czyli Write(i : 3). Czyli po prostu program zrobiłby linię z napisem 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, a potem wykonałby drugą pętlę tylko raz, czyli w szeregu wypisałby 1, 2, 3, 4, 5.. 10.



Jeśli zapomnisz o begin wyjdzie coś takiego


1  2  3  4  5  6  7  8  9 10
1  2  3  4  5  6  7  8  9 10

Trzeba pamiętać, że komputer nie domyśla się po wcięciach kodu, które bloki instrukcji ma wykonać w danej pętli. Te instrukcje muszą być razem umieszczone wewnątrz bloku: begin ... end;


Teraz bez problemu napiszemy tabliczkę mnożenia. Zmieni się tylko tyle, że zamiast wyświetlać zmienną i albo j będziemy wyświetlali i * j.



program tabliczka;
var i, j:Integer;
begin
 for i:=1 to 10 do
 begin
   for j:=1 to 10 do
     Write(j * i : 3);
   WriteLn;
 end;
end.


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.


Nie sposób opisać wszystkich zadań, jakie wymyślą nauczyciele i nawet nie w tym rzecz. Każde zadanie, które dostaniesz, musisz po prostu sobie rozpisać, przemyśleć i zaprogramować.


Strona korzysta z plików cookie w celu świadczenia usług Google (reklamy, statytyki) oraz Facebook. Jeśli chcesz zablokować pliki cookies wyłacz je w swojej przeglądarce. Potrzebujesz pomocy? kliknij