3. Изрази: аритметични и логически изрази, видове операции и приоритет за тяхното изпълняване.

Изразите биват:

В тази точка се разглеждат само първите два вида.

Изразът може да бъде:

Операциите имат приоритет и равно приоритетните операции се изпълняват отляво надясно. Приоритетът се нарушава чрез скобите. Използват се само кръгли скоби () независимо от тяхното влагане. Според броя на операндите си операциите биват: Аритметични изрази. В целочислените изрази участват само целочислени константи, променливи, функции и операции. В реалните изрази могат да участват както цели, така и реални константи, променливи и функции, но само реални операции. Аритметичните операции са (отгоре надолу според приоритета):

    - (отрицателна стойност) - унарна: -a, -(a + b)
    + (положителна стойност) - унарна: +a, +(a - b)
    * (умножение), / (реално деление), div (целочислено деление), mod (модул)
    + (събиране), - (изваждане).

Целочислената деление е деление без остатък

    1 div 2 = 0, 7 div 3 = 2.

Модулът е остатъка от целочисленото деление

    6 mod 3 = 0, 7 mod 3 = 1, 8 mod 3 = 2.

Освен тези операции в Pascal съществуват и побитови операции, които не се разглеждат в това ръководство.

Логически изрази. В тези изрази участват операции за сравнение и логически операции.

Операциите за сравнение са 6: >, >=, <, <=, =, <> или ><. Те са бинарни, като от двете страни на операцията стоят еднотипни изрази. Резултатът от тях е true или false според това, дали сравнението се удовлетворява или не. Те са равноприоритетни и са с по-малък приоритет от аритметичните операции. Примери:

    a < 0, k > n div 4, s / n >= 3.5 + x, ch = 'ж', name <> 'Иван Петров'.

Към тези операции може да се добави и операцията in, която проверява, дали един елемент принадлежи към множество.

Логическите операции са 4 и са следните:

    not - логическо не (отрицание), унарна;
    and
- логическо и (конюнкция), бинарна;
    or
- логическо или (дизюнкция), бинарна;
    xor
- логическо или, или (изключващо или, сума по модул 2), бинарна.

Те действат върху логически изрази и резултатът от тях е true или false. not е с по-висок приоритет от останалите три, които са равно приоритетни. В стандартният Pascal логическите операции са с по-нисък приоритет от операциите за сравнение, обаче в Borland Pascal те са с по-висок приоритет и поради това сравненията трябва да се заграждат в скоби. Например:

not (a < 0), (a = 0) and (b = 0).

Нека a, b: boolean; Действието на логическите операции у следното:
 
a not a
true false
false true
 
b true false
a
a and b
true true false
false false false
 
b true false
a
a or b
true true true
false true false
 
b true false
a
a xor b
true false true
false true false
Някои свойства на логическите операции:

    a and b = b and a, a or b = b or a, a xor b = b xor a

    a or (b and c) = (a or b) and (a or c), a and (b or c) = (a and b) or (a and c)

    not not a = a

    true or a = true

    false and a = false

Закони на Деморган:

    not (a and b) = not a or not b,
    not (a or b) = not a and not b

Задача 3.1: Дадена е точка P с координати (xp,yp) и права L с уравнение Ax+By+C = 0. Да се състави програма, която изчислява разстоянието от точката до правата.

Анализ

    Входни данни: xp, yp, A, B, C - реални.
    Изходни данни: s - реална.
     Знание:

Алгоритъм

    Начало
        1.Въведи xp, yp
        2.Въведи A, B, C
        3.
        4.Изведи s
    Край.

Програма

program distance;
    uses WinCrt;
    var
        a, b, c, xp, yp, s: real;
    begin
        write('Въведете координати на точката:');
        readln(xp, yp);
        write('Въведете коефициенти на правата:');
        readln(a, b, c);
        s := (a * xp + b * yp + c) / sqrt(a * a + b * b);
        writeln('Разстояние:', s:6:2);
    end.

Упътване: sqrt(x) е библиотечна функция в Pascal за квадратен корен.

Задача 3.2. Даден е интервал от две числа (a,b) и трето число x. Да се състави програма, която проверява дали числото е в интервала.

Анализ
    Входни данни: a, b, x - реални.
    Изходни данни: yes - логическа.
    Знание Числото е в интервала, ако  (a<x) and (x<b) = true.

Алгоритъм

    Начало
        1.Въведи a, b
        2.Въведи x
        3.yes <- (a < x) and (x < b)
        4.Изведи yes
    Край.

Програма

program interval;
    uses WinCrt;
    var
        a, b, x: real;
        yes: boolean;
    begin
        write('Въведете интервал:');
        readln(a, b);
        wride('Въведете число:');
        yes := (a < x) and (x < b);
        writeln('Числото е в интервала ?', yes);
    end.

Забележка. Тази програма не проверява дали a<b.

Задача 3.3. Дадена е окръжност с координати на центъра (xc,yc) и дължина на радиуса r, дадена е точка с координати (x,y). Да се състави програма, която проверява дали точката е вътре в окръжността.

Анализ
    Входни данни: xc,yc, r, x, y - реални.
    Изходни данни: yes - логическа
    Знание: Точката е в окръжността ако (xc - x)2 + (yc + y)2 < r2 = true.

Алгоритъм

    Начало
        1.Въведи xc, yc
        2.Въведи r
        3.Въведи x, y
        4.yes <- (xc - x)2 + (yc + y)2 < r2
        5.Изведи yes
    Край.

Програма

program p_in_circle;
    uses WinCrt;
    var
        xc, yc, r, x, c: real;
        yes: boolean;
    begin
        write('Въведете координати на центъра:');
        readln(xc, yc);
        write('Въведете дължина на радиуса:');
        readln(r);
        write('Въведете координати на точка:');
        readln(x, y);
        yes := sqr(xc - x ) + sqr(yc - y) < r * r;
        writeln('Точката е вътре в окръжността ?', yes);
    end.

Упътване: sqr(x) е библиотечна функция за x2.


Съдържание


2.Език за програмиране Pascal. Азбука на езика, думи в езика, структура на програма на Pascal. Основни вградени числови данни в Pascal. Деклариране на константи и променливи. Коментарии в програмата. Празен оператор. Оператор за присвояване. Стандартни входни и изходни процедури в Pascal. 


4. Оператори за логическо управление на програмата. Логически оператор. Съставен оператор (оператор-блок). Оператор за безусловен преход. Оператор за избор.