Dla dowolnego typu porządkowego określone są następujące funkcje : ord ( w ) - liczba porządkowa elementu „w” w ciągu wartości typu porządkowego; pred ( w ) - wyznaczenie elementu poprzedniego do „w” w ciągu wartości typu porządkowego; succ( w ) - wyznaczenie elementu następnego do „w” w ciągu wartości typu porządkowego; gdzie: w - wyrażenie, którego wartość jest typu porządkowego.
I nstrukcja iteracyjna FO
R
a)
b)
for zmster := wp to wk do instrukcja for zmster := wp downto wk do instrukcja Opis instrukcji FOR przy wykorzystaniu wcześniej poznanej instrukcji warunkowej i iteracyjnej WHILE.
a) FOR...TO...DO
b) FOR...DOWNTO...DO
if wp <= wk then
if wp >= wk then
begin
begin
zmster := wp ;
zmster := wk ;
instrukcja;
instrukcja;
while zmster <> wk do
while zmster <> wp do
begin
begin
zmster := succ(zmster) ;
zmster := pred(zmster) ;
instrukcja
instrukcja
end
end
end
end
gdzie: zmienna sterująca zmster oraz wyrażenia wp i wk są tego samego typu porządkowego.
Przykłady:
{ wyświetlenie kolejnych liter 'A'..'Z',
{ wyświetlenie kolejnych liczb całkowitych
każda w osobnym wierszu }
od 105 do -30 }
PROGRAM Litery ;
PROGRAM Liczby ;
VAR litera_i : char;
VAR liczba_i : shortint;
BEGIN
BEGIN
FOR litera_i := 'A' TO 'Z' DO
FOR liczba_i := 105 DOWNTO -30 DO
writeln ('kolejna litera: ', litera_i)
write ( liczba_i :4 )
END.
END.
{ wyświetlenie prostokąta o bokach N, M,
{ program oblicza sumę elementów tabliczki
składającego się ze znaków # }
mnożenia o N wierszach i kolumnach}
PROGRAM Prostokat ;
PROGRAM Suma_elementow ;
VAR N, M,
VAR N, w, k : byte;
w, k : byte;
element : word;
BEGIN
suma : longint;
write (’Wprowadź N: '); readln (N);
BEGIN
write (’Wprowadź M: '); readln (M);
REPEAT
IF (n>0) AND (m>0) THEN
write (’Wprowadź N: '); readln (N);
FOR w := 1 TO N DO
UNTIL N>0 ;
BEGIN
suma := 0 ;
FOR k := 1 TO M DO write(' # ') ;
FOR w := 1 TO N DO
writeln
FOR k := 1 TO N DO
END
BEGIN
END.
element := w * k ;
suma := suma + element
END;
Writeln( 'suma elementów=', suma)
END.
PAU - Pascal cz. 3
1 / 3
SE
case wyrażenie of
Przykłady list wartości:
lista_wartości1 : instrukcja1 ;
a)
137
lista_wartości2 : instrukcja2 ;
b)
2, 3, 5, 7, 11, 13
. . .
c)
-10 .. -5, 0, 10 .. 100
lista_wartościN : instrukcjaN
d)
'A'
else instrukcja_else
e)
'0' .. '9', '+', '-', '='
end
f)
'A' .. 'Z', 'a' .. 'z'
gdzie: wyrażenie oraz elementy na listach_wartości są tego samego typu porządkowego.
Interpretacja :
1/ jeżeli wartość wyrażenia jest równa jednej z umieszczonych na lista_wartości1
to wykonaj instrukcja1 i przejdź na koniec CASE
w przeciwnym przypadku przejdź do następnego punktu
2/ jeżeli wartość wyrażenia jest równa jednej z umieszczonych na lista_wartości2
to wykonaj instrukcja2 i przejdź na koniec CASE
w przeciwnym przypadku przejdź do do następnego punktu
. . .
N/ jeżeli wartość wyrażenia jest równa jednej z umieszczonych na lista_wartościN
to wykonaj instrukcjaN i przejdź na koniec CASE
w przeciwnym przypadku do następnego punktu
ELSE/ w przeciwnym razie wykonaj instrukcja_else
Przykłady:
PROGRAM Zamiana_liczby ;
PROGRAM Liczba_dni_w_miesiacu ;
VAR liczba : byte ;
VAR miesiac : byte ;
BEGIN
BEGIN
write ('Wprowadź liczbę arabską : ') ; readln (liczba) ;
REPEAT
CASE liczba OF
write ('Wprowadź numer miesiąca [1..12] : ') ;
1 : writeln (' I ') ;
readln(miesiac)
2 : writeln (' II ') ;
UNTIL (miesiac>=1) AND (miesiac<=12) ;
3 : writeln (' III ') ;
CASE miesiac OF
4 : writeln (’ IV ') ;
2
: writeln ('28 lub 29 dni') ;
5 : writeln (’ V ')
1,3,5,7,8,10,12 : writeln ('31 dni') ;
else writeln ( 'Uzupełnić pozostałe warianty' )
4,6,9,11
: writeln ('30 dni')
END
END
END.
END.
{ Program podlicza wartość stanu magazynu z zachowaniem podziału na towar ze stawką VAT 0%, 7% i 22% }
(* Zastosowanie instrukcji: warunkowej, wyboru i iteracyjnych *) PROGRAM Inwentaryzacja;
VAR
netto, netto0, netto7, netto22, brutto_razem : real;
VAT : byte;
n, i : word;
BEGIN
write ( 'Wprowadź stan magazynu (liczba pozycji) : ' ); readln(n); IF n <= 0 THEN write( 'Kończymy zanim jeszcze zaczeliśmy? ' ) ELSE
BEGIN
netto0 := 0; netto7:= 0; netto22 := 0;
{ przypisanie wartości początkowych }
{ ciąg dalszy programu na następnej stronie }
PAU - Pascal cz. 3
2 / 3
BEGIN
{- kontrola wprowadzanych danych; tylko wartości większe od zera -}
REPEAT
write( ' Wprowadź wartość towaru (', i,') : ' ); readln(netto); UNTIL (netto>0);
{- kontrola wprowadzanych danych; tylko 0, 7 i 22 -}
REPEAT
write( 'stawka VAT [0, 7, 22] : ' ); readln(VAT)
UNTIL (VAT=0) OR (VAT=7) OR (VAT=22) ;
{- zwiększenie wartości odpowiedniej zmiennej w zależności od wprowadzonej stawki VAT towaru -}
CASE VAT OF
0
: netto0
:= netto0 + netto ;
7
: netto7
:= netto7 + netto ;
22 : netto22
:= netto22 + netto
END
END;
{- wyświetlenie wyników -}
brutto_razem := netto0 + netto7*1.07 + netto22*1.22 ;
{ suma kwot netto powiększonych o VAT }
writeln ( ' W magazynie zgromadzono towar o wartości (bez VAT)=', netto0 + netto7 + netto22,
' z VAT = ' , brutto_razem :0:2, ' w tym:') ;
writeln ( ' wartość towaru o stawce VAT= 0% - bez VAT = ' , netto0,
' z VAT=' , netto0
) ;
writeln ( ' wartość towaru o stawce VAT= 7% - bez VAT = ' , netto7,
' z VAT=' , netto7 * 1.07
) ;
writeln ( ' wartość towaru o stawce VAT= 22% - bez VAT = ' , netto22, ' z VAT=' , netto22 * 1.22
)
END
END.
PAU - Pascal cz. 3
3 / 3