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:
Zostaje obliczona wartość wyrażenia po prawej stronie instrukcji
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
K+1=3+1=4
Faza 2
|
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:
L i P mają identyczny typ.
L i P należą do grupy typów porządkowych i jednocześnie wszystkie wartości P należą do zakresu możliwych wartości L.
L jest typu rzeczywistego, a P jest typu całkowitego.
L i P są typu łańcuchowego.
L jest typu łańcuchowego, a P jest typu znakowego.
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