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