Математичний вираз має дійсний (real) тип, якщо у ньому є:
В інших випадках математичний вираз має цілий тип (integer, word, longint,…).
Нехай змінні у програмі описані так:
Var x, y: integer; a, b: real;
Тоді значення виразу має такий тип:
| Математичний вираз, значеня якого присвоюється змінній | Тип виразу |
|---|---|
| Z1:=x+y; | Цілий |
| Z2:=x-a; | Дійсний |
| Z3:=2*b; | Дійсний |
| Z4:=0.5*x; | Дійсний |
| Z5:=y/x; | Дійсний |
| Z6:=a+b; | Дійсний |
| Z7:=50/2; | Дійсний |
| Z8:=x div 10; | Цілий |
| Z9:=y mod 7; | Цілий |
| Z10:=sqr(x); | Цілий |
| Z11:=sqr(a); | Дійсний |
| Z12:=abs(a); | Дійсний |
| Z13:=abs(y); | Цілий |
| Z14:=sqrt(b); | Дійсний |
| Z15:=sqrt(y); | Дійсний |
| Змінна | := | Вираз |
|---|---|---|
| Ціла | := | Цілого типу |
| Дійсна | := | Цілого типу або дійсного типу |
Нехай змінні у програмі описані так:
Var x, y :integer; a, b: real; z: longint; n, m: byte;
Чи буде вірним оператор присвоювання?
| Математичний вираз, який присвоюється змінній | Результат присвоювання |
|---|---|
| X:=-100; | Вірно. Змінна ціла, вираз цілий. |
| y:=4*x; | Вірно. Змінна ціла, вираз цілий. |
| a:=25*x+y; | Вірно. Змінна дійсна, вираз цілий. |
| a:=a/b; | Вірно. Змінна дійсна, вираз дійсний. |
| X:=a+5; | Невірно. Змінна ціла, вираз дійсний. |
| b:=a+x; | Вірно. Змінна дійсна, вираз цілий. |
| b:=y; | Вірно. Змінна дійсна, вираз цілий. |
| y:=a; | Невірно. Змінна ціла, вираз дійсний. |
| a:=x mod y; | Вірно. Змінна дійсна, вираз цілий. |
| X:=a div b; | Невірно. Операція div не використовується для дійсних змінних a та b. |
| y:=y mod 10; | Вірно. Змінна ціла, вираз цілий. |
| y:=sqr(x); | Вірно. Змінна ціла, вираз цілий. |
| X:=sqr(b); | Невірно. Змінна ціла, вираз дійсний. |
| X:=sqrt(y); | Невірно. Змінна ціла, вираз дійсний. |
| N:=-25; | Невірно. Тип не допускає від’ємних значень |
| y:=33000; | Невірно. Максимальне додатне значення цього типу 32767. |
| Z:=33000; | Вірно. |
| Z:=6; n:=z; | Вірно. Z має маленьке додатне значення, яке можна присвоїти змінній типу byte. |
| Z:=33000; x:=z; | Невірно. Z має занадто велике додатне значення, яке не можна присвоїти змінній типу integer. |
Окрім помилок, які виявляються в процесі трансляції програми, існують помилки, які виникають, коли програма вже почала виконуватись. Приклади у таблиці:
| Програма | Опис помилки |
|---|---|
| Program P1; Var z:real; x,y:integer; Begin x:=100; z:=x/y; Writeln('z=',z:1:3); End. | Змінній y не присвоєне значення. Паскаль присвоює їй значення 0. В операторі z:=x/y виконується ділення на 0. |
| Program P2; Var z:real; x,y:integer; Begin x:=100; y:=200; z:=sqrt(x-y); Writeln('z=',z:1:3); End. | В операторі z:=sqrt(x-y) добувається корінь квадратний з від’ємного числа -100. |
| Program P3; Var a,h,o:longint; Begin a:=500; h:=100; o:=sqr(sqr(sqr(a)*sqr(h))); Writeln(o); End. | Обчислимо значення змінної„о”. sqr(h)=10000,sqr(a)=250000 sqr(a)*sqr(h)=2500000000=25*108. sqr(sqr(a)*sqr(h))=625*1016. sqr(sqr(sqr(a)*sqr(h)))= 390625*1032. Це перевищує максимальне значення, яке поміщається у змінну типу longint. |