Pętla While

by 10/11/2014 0 komentarze
Tak więc czas na drugą pętlę jaką jest While. Z języka angielskiego While oznacza "podczas, dopóki". W informatyce przyjęła się druga wersja tego tłumaczenia, i jest ta pętla skuteczna wtedy kiedy nie znamy dokładnej ilości kroków jaką trzeba zrobić by zakończyć algorytm.

Więc jeszcze raz, różnica między For, a While jest taka, że For wykonuje daną "czynność" określoną ilość razy, a While do spełnienia warunku, tak długo jak długo zadany warunek jest prawdziwy.

Przykładem może być algorytm gdzie program wykonuje dzielenie danej liczby przez np. 2 póki wynik będzie większy od 10. Na nasz język to wyglądać będzie następująco:

Ostatnią wartością spełniającą warunek jest w tym przypadku 15.625 (piętnaście i sześćset dwadzieścia pięć tysięcznych). Kod takiego programu wygląda tak:
z = 1000
While (z > 10)
TextWindow.WriteLine(z)
z = z / 2
EndWhile
 Więc tak:
  • Przypisujemy zmiennej "z" wartość (na sztywno, możemy też to zrobić poprzez podanie liczby już w programie poprzez Read)
  • Rozpoczęcie procedury While i w nawiasie warunek,
  • Wyświetla zmienną "z",
  • Zmienna "z" za każdym razem jest równa połowie siebie,
  • EndWhile kończy procedurę dopiero wtedy kiedy warunek zostanie spełniony.
Jak widać nie podaliśmy tutaj ilości kroków (np. dziel przez dwa ileś tam razy).
 
Matematyka nigdy nie zawodzi

Zauważyłeś, że to wszystko można wykonać poprzez If oraz Goto? Tak jak jakiś czas temu wspomniałem, że była niemalże pętla przy danym przykładzie, tak tutaj powiem, że pętla While to zbiór poleceń If oraz Goto, tylko że While znacznie łatwiej programiście napisać. Pętla jest instrukcją warunkową tylko wykonywaną wiele razy. Po prostu nie chciałem Ci  wtedy zbytnio mieszać w głowie...

Kiedy w praktyce można skorzystać z pętli? Dla przykładu weźmy wzór na pole prostokąta, który jest następujący: Pc (Pole całkowite) = a * b (jeden bok razy drugi bok). Oczywiście możemy zrobić to na zasadzie podaj "a", podaj "b" i wynik w postaci "c" zostanie wyświetlony.

Tylko że taka metoda ma jedną wadę, co jeżeli użytkownik będzie chciał okazać się mądrzejszy od nas? I dla przykładu dla "a" przypisze 5, ale dla "b" przypisze 0. Wtedy Pc = 0, a przecież bok nie może mieć wartości równej lub mniejszej od 0, a tym bardziej Pole nie może tyle wynosić.

Wtedy na pomoc przychodzi pętla While, która będzie męczyła użytkownika tak długo, aż podamy odpowiednią wartość. Efekt będzie taki:

Wpisujcie, aż wpiszecie

Kod zaś jest prosty, ale długi...
TextWindow.Write("a = ")
a = TextWindow.ReadNumber()

While (a <= 0)
  TextWindow.WriteLine("'a' nie może być mniejsze od 0!")
  TextWindow.Write("a = ")
  a = TextWindow.ReadNumber()
EndWhile 

TextWindow.WriteLine("")

TextWindow.Write("b = ")
b = TextWindow.ReadNumber()

While (b <= 0)
  TextWindow.WriteLine("'b' nie może być mniejsze od 0!")
  TextWindow.Write("b = ")
  b = TextWindow.ReadNumber()
EndWhile 


TextWindow.WriteLine("")

c = a * b

TextWindow.WriteLine("c = " + c)
  • Pierwsze dwa polecenia to przypisanie zmiennej "a", która jest bokiem prostokąta odpowiedniej wartości, ale w postaci liczby.
  • Druga część to pętla While, warunek jest taki, że bok nie może być mniejszy lub równy 0, jeżeli jest, to wyświetlają się jeszcze raz dwa pierwsze polecenia przypisania odpowiedniej wartości.
  • Następuje koniec pętli. Jeżeli bok jest większe od 0, to program robi "enter", a następnie wykonuje ponownie tą samą pętlę, tylko że nie z "a", lecz z "b".
  • Kolejny "enter"
  • Pomnożenie boków zgodnie ze wzorem na pole prostokąta,
  • Oraz wypisanie wyniku w postaci zmiennej "c"
Ot cała filozofia. Jestem pewien, że jeśli czytasz ten kurs od samego początku, to te zadanie nie jest dla Ciebie trudne!

Teraz zadanie: Stwórz program obliczający pole oraz długość boków trójkąta za pomocą wzorów
 
 
To tyle z pętli While. Zapraszam do podsumowania i zbioru zadań. Następna część będzie zawierała już elementy grafiki i innych ciekawych elementów.

Spodobało Ci się? Kliknij w reklamę lub do mnie napisz!

0 komentarze:

Prześlij komentarz

Witaj na mrafpl.blogspot.com. Zachęcam Cię do śledzenia najnowszych treści na temat gier Wargaming.net!