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

I nstrukcja wyboru CA

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

FOR i := 1 TO n DO

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