6. INSTRUKCJA PRZYPISANIA

6.1. Składnia i działanie

Instrukcja przypisania to jedna z najczęściej używanych instrukcji. Jej ogólna postać jest następująca:

Nazwa_zmiennej := Wyrażenie;

Po lewej stronie instrukcji może wystąpić wyłącznie nazwa zmiennej, a po niej operator przypisania „:=”.

Nie należy mylić operatora przypisania ':=' ze znakiem równości '='. Operator przypisania jest symbolem operacji przesyłania danej w kierunku od prawej do lewej strony instrukcji.

Po prawej stronie instrukcji występuje jakieś wyrażenie (stała, zmienna, wywołanie funkcji lub ich kombinacja połączona odpowiednimi operatorami.

Przykład:

var X,I:Byte;

A:Integer;

Delta,Odleglosc,Pole_trojkata,X:Real;

begin

X:= 0;

I:=I+1;

Delta:=Sqrt(B*B-4*A*C);

Odleglosc:=Sqrt(Sqr(X1-X2)+Sqr(Y1-Y2));

Pole_trojkata:=Podstawa*Wysokosc/2;

X:=Pi;

A:=Abs(A);

end.

Kroki instrukcji przypisania:

  1. Zostaje obliczona wartość wyrażenia po prawej stronie instrukcji

  2. Wynik zostaje zapamiętany w zmiennej, której nazwa jest po lewej stronie instrukcji. (Poprzednia wartość tej zmiennej zostaje wymazana).

Przykład:

const K:Byte=3;

begin

K:=K+1;

end.

Faza 1

0x08 graphic

0x08 graphic
K 3

K+1=3+1=4

0x08 graphic

Faza 2

0x08 graphic

0x08 graphic
K 3 4

Przykład: Zamiana miejscami wartości dwóch zmiennych

program Ex6_1;

{Zamienia miejscami aktualne wartości zmiennych A,B.}

uses Crt;

var A,B,Kopia:Integer;

begin

Clrscr;

A:=88;

B:=5;

Writeln('Wartosci poczatkowe:');

Writeln(' A=',A,', B=',B);

{Zamiana miejscami}

Kopia:=A; {A=88, Kopia=88}

A:=B; {B=5, A=5}

B:=Kopia; {Kopia=88, B=88}

Writeln;

Writeln('Wartosci po zamianie:');

Writeln(' A=',A,', B=',B);

Readln;

end.

6.2. Zgodność typów w sensie przypisania

Wykonanie instrukcji przypisania:

L:=P;

jest możliwe, gdy typ zmiennej L jest zgodny z typem wyrażenia P. J

Zgodność ma miejscy, gdy:

6.3. Obliczanie wartości wyrażeń

Pisząc wyrażenia, musimy pamiętać, że pomiędzy operatorami występuje hierarchia, decydująca o porządku wykonywania operacji.

Operacje o jednakowym priorytecie są wykonywane w kolejności ich zapisu w wyrażeniu - od lewej do prawej.

Jeżeli w wyrażeniu występują operatory o różnym poziomie priorytetu, to te poziomy wyznaczają porządek wykonywania działań. Na przykład w wyrażeniu: A*B+C*D mamy operator '*' o wyższym priorytecie od operatora '+'. Dlatego najpierw zostaną kolejno obliczone iloczyny A*B oraz C*D , a dopiero potem ich suma da wartość całego wyrażenia.

Porządek obliczeń wynikający z priorytetów operatorów można zawsze zmienić, stosując nawiasy zwykłe, na przykład pisząc: A*(B+C)*D.

Operatory Pascala

Operatory

Priorytet

Kategoria

+, -, not

*, /, div, mod, and

+, -, or, xor

=, <>, <, >, <=, >=, in

1 (max)

2

3

4 (min)

Jednoargumentowe

Multiplikatywne

Addytywne

Relacyjne

Uwaga:

Jeżeli w wyrażeniu wystąpi chociaż jedna wartość rzeczywista, to wartość całego wyrażenia także będzie typu rzeczywistego.

Wynik zwykłego dzielenia (operator `/ `) jest zawsze typu rzeczywistego.

Funkcje arytmetyczne Turbo Pascala

Wywołanie

Wielkość zwracana

Typ argumentu

Typ wyniku

Arctan(x)

Arcus tangens od x

Dowolny liczbowy

Real

Sin(x)

Sinus kąta x (x w radianach)

Dowolny liczbowy

Real

Cos(x)

Cosinus kąta x (x w rad.)

Dowolny liczbowy

Real

Exp(x)

ex

Dowolny liczbowy

Real

Ln(x)

Logarytm naturalny z x

Liczbowy nieujemny

Real

Sqr(x)

Kwadrat liczby x

Liczbowy

jak argumentu

Sqrt(x)

Pierwiastek kwadratowy z x

Liczbowy nieujemny

Real

Pi

Liczba π = 3.14159…..

Real

Random(x)

Liczba losowa z przedziału [0..x-1]

Word

Word

Random;

Liczba losowa z przedziału

[0, 1)

Real

Abs(x)

Wartość bezwzględna x

Dowolny liczbowy

jak argumentu

Frac(x)

Część ułamkowa x

Real

Real

Int(x)

Część całkowita x

Real

Real

Round(x)

Konwersja x do typu całkowitego z zaokrągleniem

Real

Longint

Trunc(x)

Konwersja x do typu całkowitego z odrzuceniem części ułamkowej x

Real

Longint

6 4. Przykłady programów

Przykład: Iteracyjne obliczenie x3

program Ex6_2;

{Iteracyjnie oblicza trzecią potęgę liczby czytanej z klawiatury.}

uses Crt;

var X,Wynik:Real;

begin

Clrscr;

Write('Podaj liczbe: ');

Readln(X);

Wynik:=1.0; { Wynik=1.0}

Wynik:=Wynik*X; { Wynik=1*X }

Wynik:=Wynik*X; { Wynik=(1*X)*X }

Wynik:=Wynik*X; { Wynik=(1*X*X)*X }

Write('Wynik: ',Wynik:0:6);

Readln;

end.

Przykład: Iteracyjne obliczenie wartości silni liczby 6

program Ex6_4;

{Oblicza iteracyjnie silnię liczby 6.}

var S:Longint;

I:Byte;

begin

I:=0; {I=0} {Inicjalizacja}

S:=1; {S=1}

I:=I+1; {I=0+1=1} {Krok 1}

S:=S*I; {S=1*1=1}

I:=I+1; {I=1+1=2 {Krok 2}

S:=S*I; {S=1*2=2}

I:=I+1; {I=2+1=3} {Krok 3}

S:=S*I; {S=2*3=6}

I:=I+1; {I=3+1=4} {Krok 4}

S:=S*I; {S:=6*4=24}

I:=I+1; {I=4+1=5} {Krok 5}

S:=S*I; {S=24*5=120}

I:=I+1; {I=5+1=6} {Krok 6}

S:=S*I; {S=120*6=720}

Write(' 6! = ',S);

Readln;

end.

29