Pętla while oraz for – specjalizowany potomekpętli while Pętla while

Transkrypt

Pętla while oraz for – specjalizowany potomekpętli while Pętla while
Struktury programu w Pascalu (instrukcje)
Pętle while i for
str. 1
Pętla while oraz for – specjalizowany potomek pętli while
Pętla while:
●
●
Pełna nazwa :) „while Warunek do Instrukcja” [pl] „dopóki Warunek rób Instrukcja”
Postać algorytmu:
Warunek
F
T
Instrukcja
●
●
Opis działania:
○ Dopóki spełniony jest Warunek (ma wartość True) pętla wykonuje Instrukcję
○ kiedy Warunek przestaje być spełniony (wartość False), sterowanie opuszcza pętlę
(„wypada” z pętli).
○ W pętli może znajdować się JEDNA Instrukcja.
Opis działania dla zaawansowanych (opis składowych logicznych):
○ pętla składa się z instrukcji warunkowej i dwóch skoków- które w jej przypadku są
wplecione w strukturę i nie wprowadzają chaosu w programie.
■ Kiedy Warunek nie jest spełniony (F) wykonywany jest skok poza całą
pętlę.
■ Warunek spełniony (T) nie powoduje zmian w przebiegu sterowania –
wykonywana jest Instrukcja następująca po instrukcji sprawdzania
warunku.
■ Po zakończeniu Instrukcji wykonywany jest skok przed instrukcję
warunkową.
●
Przykład zaawansowany (pseudo asm ):
○ Pętla:
testuj Warunek
;Ustawia Odpowiedź T gdy warunek spełniony.
skocz gdy F, End
; Wyjście z pętli – skok warunkowy
Instrukcja
; Wykonanie instrukcji.
skocz do Pętla
; Wykonanie powrotu pętli – skok bezwarunkowy
End:
; Już po wszystkim – pętla skończona.
●
Przykład w Pascalu:
○
while Warunek do
Instrukcja;
© FP „KEy-Studio”,Eustachy Kruczała
Struktury programu
str. 2
Pętle while i for
○
np.: opracowanie pliku
■ (fragment programu):
dla:
var
F : Text; {plik tekstowy – opisany w innej publikacji}
S: string; {string – jw.}
wczytanie wszystkich linii pliku:
while not EoF(F) do { dopóki nie KoniecPliku(F) powtarzaj...}
begin
ReadLn(F,S);
{wczytaj cała linię z pliku F do zmiennej S}
Opracowanie(S);
end;
gdzie: EoF(F) – End of File (F) – koniec pliku (F)
●
Ograniczenia i sposób ich obejścia:
○ W pętli może być wykonywana tylko JEDNA Instrukcja.
○ Jeżeli w pętli musi być wykonane więcej instrukcji – trzeba je „spakować” w blok.
np.: zamiast: Instr1;
Instr2;
blok:
begin
Instr1;
Instr2;
end;
który jest traktowany jako jedna instrukcja.
●
Zastosowanie:
○ Pętla while . do . jest stosowana w przypadku, gdy mamy potrzebę wykonania
cyklicznie operacji (ciągu operacji), o której (których) nie wiadomo z góry ile razy
ma (mają) być powtórzona (-e): informacja o zakończenia cyklu pojawia się
w trakcie wykonywania operacji. Może nastąpić przypadek, że nie będzie można
w ogóle wykonać operacji kiedy od razu warunek nie jest spełniony. (porównaj
pętla repeat . until .)
Błędy:
○ Kiedy wewnątrz pętli nie zmieniana jest wartość, która odpowiada za spełnienie
warunku, pętla może chodzić w nieskończoność (nigdy nie kończy się – program
zawiesza się na wykonaniu tej pętli).
●
© FP „KEy-Studio”,Eustachy Kruczała
Struktury programu w Pascalu (instrukcje)
Pętle while i for
str. 3
Pętla for:
●
●
Pełna nazwa :) „for zmienna := WartPoczątkowa to WartKońcowa do Instrukcja”
[pl] „dla zmienna od WartPoczątkowa do WartKońcowa rób Instrukcja”
Postać algorytmu:
zm := WPocz
zm<=WKon
F
Pętla while
T
T
Instrukcja
zm := zm+1
●
●
Opis działania:
○ Pętla nadaje zmiennej sterującej wartość początkową
○ dopóki zmienna sterująca nie uzyska wartości końcowej wykonywana jest
cyklicznie instrukcja składająca się z instrukcji programu i (ukrytej) polegającej
na zwiększeniu o jeden wartości zmiennej sterującej.
○ W pętli może znajdować się JEDNA Instrukcja programu.
Uwagi dodatkowe (tylko w Pascalu):
○ Wartość końcowa jest obliczana przed wejściem do pętli. (Jej zmiana wewnątrz
pętli nie przynosi żadnych skutków).
○ W pętli nie wolno samodzielnie modyfikować zmiennej sterującej pętli.
○
○
○
Po zakończeniu pętli zmienna sterująca ma wartość nieokreśloną (może to być
dowolna wartość np.: 123, 11, 7, 5 i w/g fantazji).
Pętla nie działa w odwrotnym kierunku, np.: for i := 2 to 1 do coś – nie wykona się
nigdy.
Istnieje pętla odwrotna:
„for zmienna := WartPoczątkowa downto WartKońcowa do
Instrukcja”
[pl] „dla zmienna od WartPoczątkowa w dół do WartKońcowa rób
Instrukcja” - w takim przypadku w algorytmie zamiast:
zm := zm+1
występuje:
zm := zm-1
oraz zamiast zm<=WKon zm>=WKon.
© FP „KEy-Studio”,Eustachy Kruczała
Struktury programu
str. 4
Pętle while i for
●
Opis działania dla zaawansowanych (opis składowych logicznych):
○ pętla składa się z instrukcji przypisania wartości początkowej i pętli while
○ w pętli while wykonywane jest zwiększenie (zmniejszenie) zmiennej sterującej.
●
Przykład zaawansowany (pseudo asm ):
○ nadaj zm,Wartość Początkowa
○ nadaj WK, Wartość Końcowa ; określenie stałej (niezmienialnej) wartości
końcowej WK
○ Pętla:
testuj zm<=WK
;Ustawia Odpowiedź T gdy warunek spełniony.
skocz gdy F, End
; Wyjście z pętli – skok warunkowy
Instrukcja
; Wykonanie instrukcji.
zm++
skocz do Pętla
; Wykonanie powrotu pętli – skok bezwarunkowy
End:
; Już po wszystkim – pętla skończona.
●
Przykład w Pascalu:
○ for i := 100 to 110 do
Instrukcja;
●
Ograniczenia i sposób ich obejścia:
○ takie samo jak w pętli while.
●
Zastosowanie:
○ Pętla for . to . do . lub for . downto . do . jest stosowana w przypadku, gdy mamy
potrzebę wykonania cyklicznie operacji (ciągu operacji), o której (których) z góry
wiemy ile razy ma (mają) być powtórzona (-e).
○ Np.: opracowanie tablicy lub stringu.
■ Przykład fragmentu programu:
dla
var
S : string;
i : Byte;
aby zamienić wszystkie małe litery (i duże też :) ) w stringu na duże
wykonujemy:
for i := 1 to Length(S) do
S[i] := UpCase(S[i]);
gdzie:
Length(S) – długość stringu S – ostatni znak S ma taki indeks.
UpCase(C) – zamień znak C na duży: 'a'->'A','b'->'B' ale też
'A'->'A' , 'B'->'B' itd.
© FP „KEy-Studio”,Eustachy Kruczała

Podobne dokumenty