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:
Więc tak:z = 1000
While (z > 10)
TextWindow.WriteLine(z)
z = z / 2
EndWhile
- 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.
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...
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"
Teraz zadanie: Stwórz program obliczający pole oraz długość boków trójkąta za pomocą wzoró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!