L11. Pętla repeat .. until.

Transkrypt

L11. Pętla repeat .. until.
Pętla repeat…until
Wcześniej poznaliśmy bardzo uŜyteczną pętle for, która nie rozwiązuje jednak wszystkich problemów, na jakie moŜna natknąć się
podczas programowania. Jak juŜ wiemy, pętla ta sprawdza się doskonale w sytuacjach, w których musimy wykonać skończoną liczbę
iteracji, ale stąd teŜ wynika jej główna wada – przed jej rozpoczęciem musimy ściśle określić liczbę przebiegów. Nie dało się w łatwy i
intuicyjny sposób uŜyć jej do powtarzania jakiejś czynności „aŜ do skutku” – moŜna co najwyŜej zrobić to dwa, trzy, sto, trzysta, N
razy, ale zawsze musimy dokładnie wiedzieć ile. Nie zawsze moŜna określić ilość kroków, gdyŜ zaleŜą one od rodzaju rozwaŜanego
problemu oraz czasami od wartości danych. Zadaniem pętli repeat jest wykonywanie danego kodu dopóki warunek podany po słowie
Until nie będzie prawdziwy. Bardzo waŜną cechą tej pętli jest miejsce sprawdzania warunku. W pętli repeat po pierwszym wykonaniu
instrukcji zostaje sprawdzony warunek. Znaczy to, Ŝe w pętli repeat instrukcje muszą wykonać się co najmniej jeden raz. PoniŜej
pokazana jest postać pętli repeat:
repeat
instrukcja_1
instrukcja_n
until <warunek>
Tłumacząc to na polski otrzymujemy:
Powtarzaj instrukcję, aŜ zostanie spełniony warunek
Instrukcję repeat moŜna równieŜ wykorzystać do chwilowego zatrzymania programu w celu oczekiwania na naciśnięcie
dowolnego klawisza, określonej litery lub konkretnego klawisza. Stosując w programie instrukcję: Repeat Until KeyPressed
MoŜemy równieŜ zatrzymać program w celu oczekiwania na naciśnięcie określonej litery:
REPEAT
instrukcja_1;
……………;
instrukcja_n;
writeln(‘Jeszcze raz? (T)ak’);
Tak_Nie:=UpCase(ReadKey)
UNTIL NOT (Tak_Nie=’T’);
co uniemoŜliwi ponowne uruchomienie (lub nie) instrukcji zawartej w bloku repeat until.
Aby to zademonstrować działanie pętli napiszemy krótki program, który pogra z nami w grę. Program "pomyśli" liczbę, a Twoim
zadaniem będzie ją zgadnąć. Dodatkowo program poinformuje Cię, czy podana liczba była większa, czy mniejsza od zgadywanej.
Algorytm naszego programu moŜemy zapisać w kilku krokach:
I.
II.
Wylosuj Liczbę
Powtarzaj:
i.
Zapytaj gracza o Strzał
ii.
Jeśli Strzał większy od Liczby - powiedz graczowi
iii.
Jeśli Strzał mniejszy od Liczby - powiedz graczowi
AŜ Strzał jest równy Liczbie
III.
Pogratuluj graczowi :D
Kod programu:
Program Zgadnij_liczbe;
Var
N : Byte; { Szukana liczba }
S : Byte; { Strzał gracza }
I : Byte; { Liczymy ile gracz potrzebował strzałów }
Begin
Randomize; { Włączamy generator liczb pseudolosowych }
WriteLn('Losuje liczbe z przedzialu 0..99.');
N:=Random(100);
I:=0;
Repeat
Write('Jaka liczbe mam na mysli? ');
ReadLn(S);
If (S>N) Then
WriteLn(' Nie, to za duzo.');
If (S<N) Then
WriteLn(' Za malo.');
Inc(I);
{ Ta procedura słuŜy do zwiększenia wartości zmiennej o 1 }
Until (S=N);
WriteLn('Dobrze! Szukana liczba to rzeczywiscie ', N, '.');
WriteLn('Zgadles(as) za ', I, ' razem.');
readln;
End.
Małe wyjaśnienie: pascal posiada generator liczb pseudolosowych, który jednak trzeba najpierw uruchomić. SłuŜy do tego
procedura Randomize. Wywołujemy ją umieszczając jej identyfikator na początku programu. Jest to instrukcja wywołania, która
spowoduje wykonanie procedury. Następnie, aby przypisać jakiejś zmiennej przypadkową wartość uŜywamy funkcji Random. Jako jej
parametr podajemy liczbę określającą z ilu elementów chcemy losować. Np. jeśli będzie to 10 - wylosujemy liczby z przedziału 0..9.
Inc(I) to to samo co I:=I+1, jednak ja uwaŜam, Ŝe lepiej to wygląda (niektórzy twierdzą teŜ, Ŝe szybciej działa). Jest to zatem
instrukcja zwiększająca wartość zmiennej, niekoniecznie o 1. Wystarczy zapisać Inc(I, 3) by zwiększyć zmienną o 3.
ZADANIA DO WYKONANIA
Zadanie 1
Napisz program, który powtarza napis „Programowanie” dopóki nie wciśniesz klawisz „n” lub „N”.
Zadanie 2
Napisz program obliczający sumę pięciu liczb wczytywanych z klawiatury.
Zadanie 3
Napisz program, który czyta kolejne liczby i liczy ich sumę aŜ do napotkania liczby 0. Program wyświetla tymczasową sumę. Wynik obliczenia wyświetl z
dokładnością do dwóch miejsc po przecinku.
Zadanie 4
Napisz program, którego działanie polega na obliczeniu kwadratu dowolnie wprowadzonej z klawiatury liczby. Po wykonaniu obliczenia program powinien
zapytać się, czy obliczyć sześcian następnej liczby. Powtarzanie działania programu powinno trwać tak długo dopóki nie naciśniesz klawisza innego niŜ „t” lub
„T”.
Zadanie 5
Napisz program obliczający pierwiastki równania kwadratowego o współczynnikach A, B i C. Program oblicza pierwiastki, aŜ do momentu podania A=0.
ZADANIE DOMOWE (Trochę ambitniejsze, ale zapewniam, Ŝe posiadacie wystarczającą wiedzę, by je wykonać).
Napisz program, który będzie „zgadywał” wybraną przez Ciebie liczbę, aŜ do momentu kiedy ją zgadnie.

Podobne dokumenty