SOISK - SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE
Tomasz Puchała

Instrukcje ITERACYJNE

Instrukcja iteracyjna FOR

Instrukcja "dla" - wykorzystywana zwykle w celu wykonania pewnej grupy instrukcji w przypadku, gdy liczba powtórzeń jest znana w danym miejscu programu. Instrukcja "dla" może mieć jedną z dwóch postaci: 

FOR zs := wp TO wk DO Instrukcja 
FOR zs := wp DOWNTO wk DO Instrukcja


Zmienna zs (nazywana zmienną sterującą), musi być identyfikatorem zmiennej typu porządkowego i powinna być lokalna w bloku zawierającym daną instrukcję "dla", tzn. w czasie wykonywania Instrukcji wartość zmiennej sterującej nie może być zmieniana. Wartość wp (wartość początkowa) i wk (wartość końcowa) musi być zgodna w sensie przypisania z typem zmiennej sterującej. Instrukcja po słowie DO może być instrukcją prostą lub strukturalną. Instrukcja podana po DO nie zostanie wykonana ani razu, gdy 
- wartość wp jest większa od wartości wk (w TO) 
- wartość wp jest mniejsza od wartości wk (w DownTo).
W przypadku próby zmiany wartości zmiennej sterującej w instrukcji wchodzącej w skład instrukcji "dla" wystąpi błąd. 
Realizacja pętli FOR:














 

Łatwo można zauważyć, że poprzednie programy wykonują wielokrotnie te same czynności. INSTRUKCJE ITERACYJNE służą do ograniczenia cykli programowych, tj. wielokrotnego wykonywania pewnych sekwencji instrukcji.

W języku Turbo Pascal występują trzy instrukcje iteracyjne.

instrukcja "dla" FOR,

instrukcja "dopóki" WHILE,

instrukcja "powtarzaj" REPEAT.

Instrukcję iteracyjną "dla" FOR stosuje się w programie w przypadku, gdy liczba powtórzeń jest znana w danym miejscu programu. Instrukcja for może mieć jedną z dwóch postaci:

gdy wartość początkowa się zwiększa

FOR wartość := wartość_pocz TOwartość_końcowa DO instrukcja

gdy wartość początkowa się zmniejsza

FOR wartość := wartość_pocz DOWNTO wartość_końcowa DO instrukcja

 

Program z zastosowaniem pętli FOR "dla" wyświetlający całą tabliczkę mnożenia z jednym pustym wierszem po każdym słupku.

Program Pet_For;

uses Crt;

var mnoznik:byte;

mnozna:byte;

Begin

ClrScr;

For mnoznik:=1 to 10 do

begin

For mnozna:=1 to 10 do

WriteLn(mnozna,'*',mnoznik,'=',mnozna*mnoznik);

WriteLn;

readkey;

end;

End.


 Program z zastosowaniem instrukcji iteracyjnej FOR oczekujący 10 razy na naciśnięcie klawisza a następnie za każdym razem wyświetlający komunikat o treści n-tym razem wcisnąłeś klawisz "a" o kodzie ASCII 65.

Program Pentla_for_ASCII;

uses Crt;

var a:byte;

Klawisz:Char;

Begin

ClrScr;

For a:=1 to 10 do

begin

Klawisz:=readkey;

WriteLn(a,'-razem wcisnąłeś'',klawisz,''o kodzie ASCII=' ,ORD(klawisz));

end;

Readkey;

End.

 

 

Kolejną instrukcją iteracyjną jest instrukcja "dopóki" WHILE . Instrukcja ta służy do sprawdzenia warunku iteracji na początku i ma postać:

WHILE wyrażenie DO instrukcja

Wyrażenie jest najczęściej wyrażeniem porównania, powinno w wyniku dawać wartość logiczną TRUE lub FALSE, a instrukcja po słowie DO może być dowolną instrukcją prostą lub strukturalną. Instrukcja ta wykonywana jest tak długo dopóki wartością wyrażenia jest TRUE.



 Program wyświetlający jeden słupek tabliczki mnożenia z zastosowaniem instrukcji iteracyjnej WHILE - "dopóki".

 

Program Pet_While;

uses Crt;

var mnoznik:byte;

const mnozna:byte=5;

Begin

ClrScr;

mnoznik:=1;

While mnoznik<=10 do

begin

WriteLn(mnozna,'*',mnoznik,'=',mnozna*mnoznik);

Inc(mnoznik);

end;

ReadLn;

readkey;

End.

 

Program z zastosowaniem pętli WHILE wyświetlający całą tabliczkę mnożenia z jednym pustym wierszem po każdym słupku.

Program Pet_While; uses Crt;

var mnoznik:byte;

const mnozna:byte=5;

Begin

ClrScr;

mnoznik:=1;

While mnoznik <=10 do

begin

mnozna:=1;

While mnozna<=10 do

begin

WriteLn(mnozna,'*',mnoznik,'=',mnozna*mnoznik);

Inc(mnozna);

end;

WriteLn;

Inc(mnoznik);

ReadKey;

end;

ReadLn;

End.

REPEAT

instrukcja

instrukcja

UNTIL - warunek logiczny

 

Program z zastosowaniem pętli REPEAT "powtarzaj", wyświetlający jeden słupek tabliczki mnożenia

 

Program Pet_Repeat

uses Crt;

var mnoznik:byte;

Begin

ClrScr;

mnoznik:=1;

Repeat

WriteLn(mnozna,'*',mnoznik,'=',mnozna*mnoznik);

mnoznik:=mnoznik+1;

Until mnoznik>10;

ReadLn;

readkey;

End.

 




W Turbo Pascalu istnieją dwie instrukcje warunkowe:

instrukcja "jeśli" IF - mająca dwie możliwe postacie,

instrukcja wyboru CASE.

Instrukcja IF "jeśli" uzależnia wykonanie innych instrukcji od spełnienia określonego warunku. Ogólna postać tej instrukcji jest następująca:

IF wyrażenie THEN instrukcja

lub

IF wyrażenia THEN instrukcja

ELSE w przeciwnym wypadku instrukcja

Warunkiem wyrażenia jest wartość logiczna TRUE lub FALSE.

W programowaniu często mamy do czynienia z sytuacją, gdy wykonanie różnych poleceń jest uzależnione od wartości zmiennej. Możemy wtedy zastosować instrukcję wyboru, której postać jest następująca:

CASE wyrażenie OF

sekwencja instrukcji wyboru

END

lub

CASE wyrażenie OF

sekwencja instrukcji wyboru

ELSE w przeciwnym wypadku instrukcji

END




 Program gra, testujący znajomość tabliczki mnożenia. Program wykonuje 5-cio krotne losowanie mnożnej i mnożnika i oczekuje na wprowadzenie wyniku. Gdy wynik jest niepoprawny, program informuje o błędzie i powtórnie wyświetla to samo działanie. W przypadku poprawnej odpowiedzi program podaje czas w sekundach z dokładnością do 0,01 s i wyświetla następne pytanie. Po zakończeniu testu program wyświetla średni czas odpowiedzi.

 

Program Test_mnozenia;

uses Crt, Dos;

var godz1, godz2,min1,min2,sek1,sek2,ssek1,ssek2:word;

var licz1,licz2,wynik,n,t,a1,a2,a3,a4,a5:integer;

var g1,g2,m1,m2,s1,s2,ss1,ss2,suma:integer;

Tabczas:Array[1..5] of byte;

var w1,w2,w:word;

Begin

ClrScr;

TextColor(14);

Suma:=0;

WriteLn(' JEST TO PROGRAM SPRAWDZAJĄCY');

WriteLn(' TWÓJ REFLEKS W TABLICZCE MNOŻENIA');

Randomize;

For n:=1 to 5 do

begin

licz1:=Random(10)+1;

licz2:=Random(10)+1;

Repeat

GetTime(godz1,min1,sek1,ssek1

TextColor(10);

WriteLn;

Write(licz1,'*',licz2,'=');

ReadLn(wynik);

IF licz1*licz2=wynik THEN

begin

TextColor(2);

WriteLn('BARDZO DOBRZE');

GetTime(godz2,min2,sek2,ssek2);

end

ELSE

begin

TextColor(124);

WriteLn('ŹLE! SPRÓBUJ JESZCZE RAZ');

end;

Until licz1*licz2=wynik;

g1:=godz1*3600*100; g2:=godz2*3600*100;

m1:=min1*60*100; m2:=min2*60*100;

s1:=sek1*100; s2:=sek2*100;

ss1:=ssek1*1; ss2:=ssek2*1;

w1:=g1+m1+s1+ss1; w2:=g2+m2+s2+ss2;

w:=w2-w1;

WriteLn('Czas namysłu wynosił ',w/100:6:2);

suma:=suma+w;

end;

TextColor(14);

WriteLn;

WriteLn('ŚREDNIA WYNOSI = ',suma/5/199:6:2);

ReadLn;

ReadKey;

End.

 


Ta strona internetowa została utworzona bezpłatnie pod adresem Stronygratis.pl. Czy chcesz też mieć własną stronę internetową?
Darmowa rejestracja