Математика. Запись математических выражений
Если вы - школьник не самых старших классов, то не всё, что здесь написано, будет вам понятно. Не огорчайтесь, при дальнейшем чтении непонятные вещи вам не понадобятся.
В правой части оператора присваивания и в операторе WriteLn мы записывали выражения, имеющие численное значение (например, a+b-8). Такие выражения называются арифметическими. В будущем мы увидим, что выражения могут быть не только арифметическими. А сейчас рассмотрим математические возможности Паскаля.
Четыре действия арифметики (и еще два) обозначаются в Паскале следующим образом:
| Действие | Результат | Смысл |
|---|---|---|
| 2 + 3 | 5 | Сложение |
| 4 - 3 | 1 | Вычитание |
| 2 * 3 | 6 | Умножение |
| 10 / 5 | 2 | Деление |
| 1 / 2 | 0.5 | |
17 div 5 | 3 | Целочисленное деление |
17 mod 5 | 2 | Остаток от целочисленного деления |
Функции
modиdivмы подробно разберём чуть позже.
На уроках математики мы привыкли писать ab+cd, подразумевая: а умножить на b плюс c умножить на d. В Паскале это выражение мы обязаны писать так: a*b+c*d. Иначе компьютер подумает, что нужно к переменной, имеющей имя ab, прибавить переменную, имеющую имя cd. Во избежание двусмысленности знак умножения положено писать всегда. Например, a * (b+c).
Скобки
Ввиду того, что с клавиатуры всю информацию приходится вводить символ за символом в одну строку, ввод двухэтажных выражений (дробей), таких как

очень затруднен. Поэтому для обозначения деления и выбрана косая черта. Это выражение на Паскале положено записывать так: (a+1)/(b+1). Если бы мы не поставили скобок, то выражение получилось бы таким a+1/b+1, а это неправильно, так как компьютер, как и мы, всегда перед сложением и вычитанием выполняет умножение и деление, поэтому в последнем случае он бы сначала разделил 1 на b, а затем к результату прибавил а и 1.
Вопрос: когда в выражениях можно ставить скобки?
Ответ: всегда, когда у вас возникают сомнения в правильной очередности действий. Лишняя пара скобок не помешает.
Например, требуется записать на Паскале выражение:

Его можно было бы записать так: (1 + а / (2+a*b)) / (3+а) * b. Однако, при такой записи мы не знаем, что Паскаль будет делать раньше - делить (1 + а / (2+a*b)) на (3+а) или умножать (3+а) на b. А от этого зависит результат. Добавим для верности пару скобок: ((1 + а / (2+а*b)) / (3+а)) * b. Теперь всё в порядке.
К сожалению, в выражениях разрешается писать только круглые скобки. Квадратные и фигурные запрещены. От этого сложные выражения с большим количеством скобок на глаз воспринимаются с трудом, так как трудно для конкретной скобки увидеть ее законную пару. В этом случае советуем идти «от малого к большому», то есть сначала заметить самые малые из взятых в скобки фрагменты выражения (у нас это 3+а и 2+а*b). После этого будет уже легче заметить более крупные фрагменты, такие как 1 + а / (2+а*b), и т.д.
Запись десятичных дробей. Почти во всех языках программирования и уж, конечно, в Паскале, в десятичных дробях принято вместо запятой ставить точку. Пример: 62.8 - шестьдесят две целых восемь десятых.
Математические функции
Кроме четырех действий арифметики Паскаль может выполнять и другие математические действия, например, возведение в квадрат, для чего имеется специальная функция - Sqr. На уроке математики мы обозначаем показатели степени маленькими цифрами и буквами. На компьютере такие цифры и буквы вводить не всегда возможно, поэтому в Паскале принято другое обозначение. Например, пять в квадрате обозначается так - Sqr(5), a+b в квадрате так – Sqr(a+b). Здесь Sqr - сокращение от английского слова square - квадрат. То, что нужно возвести в квадрат, записывается в скобках.
Приведём неполный список математических функций Паскаля:
| Действие | Результат | Смысл |
|---|---|---|
Sqr(5); | 25 | Возведение в квадрат |
Sqrt(25); | 5 | Корень квадратный |
Pi; | 3.1415... | Число π |
Frac(23.192); | 0.192 | Дробная часть числа |
Int(3.98); | 3.0 | Целая часть числа |
Round(5.8); | 6 | Округление |
Abs(-20); | 20 | Абсолютная величина (модуль) числа |
Power(5,2); | 25 | Rower(x,y) - возводит число x в произвольную степень y |
Random; | 0.73088 | Случайное число из диапазона (0 - 1) |
Random(200); | 106 | Случайное целое число из диапазона (0 - 199) |
Кроме этого, имеются функции sin, cos, arctan, exp, ln и процедура Randomize.
Примеры:
| Выражение | Sqr(2+1); | При вычислении даст 9 |
| Выражение | 10+Sqr(2+1); | При вычислении даст 19 |
| Выражение | 1+Abs(5-8); | При вычислении даст 4 |
| Выражение | Sqr(2)+Sqrt(35+1); | При вычислении даст 10 |
| Выражение | Sqrt(8+Int(41.5)); | При вычислении даст 7 |
| Выражение | 21 div (Round(Pi+1)); | При вычислении даст 5 |
Пример. Напишем выражение

на языке программирования Паскаль и поместим в переменную s. Получим следующий результат:
s:=abs((sqrt(a+b)+d)/sqr(c-d));
Задание 1
Определите без компьютера, что напечатает данная программа:
Var a, b: Integer;
Begin
a:=(Sqr(2)+1)*(20- Sqr(2*2))-11;
b:=11 div (a-4);
WriteLn(Sqr(a)+b-1);
End.
Вещественные числа в Паскале
Пример ошибочной программы:
Var a, b, y: Integer;
Begin
a:=10;
b:=6;
y:= a / b;
WriteLn(y);
End.
Паскаль откажется выполнять эту программу, так как знает, что при делении целого на целое результат может получиться дробный, а это значит, что в ячейку у придется записывать дробное число. Но описание Var a,b,y: Integer запрещает это делать. Вот вам еще один пример придирчивости Паскаля. Если бы мы даже вместо b:=6 написали b:=2 , все равно Паскаль отказался бы делить.
Что же делать? Конечно же, Паскаль предлагает простой выход. Программист имеет право любую переменную описать не как целую (Integer), а как вещественную (Real). В этом случае переменная имеет право принимать любые целые и дробные значения.
Пример правильной программы:
Var a, b: Integer;
y: Real;
Begin
a:=10;
b:=6;
y:=a/b;
WriteLn(y);
End.
По-английски Real читается «риэл», переводится «вещественный». Под переменную типа Real Паскаль отводит в памяти ячейку размером в 6 байтов.
Что мы увидим на экране в результате выполнил оператора WriteLn(у)? Если вы думаете, что 1.666666, то ошибаетесь. Переменные, описанные как Real, Паскаль выводит на экран в так называемом экспоненциальном формате. Чтобы заставить Паскаль выводить вещественные числа в обычном, понятном виде, допишем кое-что в оператор вывода - WriteLn(у :8:3). Это значит, что мы хотим численное значение переменной у типа Real видеть на экране в привычном виде с 3 знаками после десятичной точки, а всё изображение числа не должно занимать больше 8 символов, включая целую часть, дробную часть, знак и десятичную точку. Этот оператор напечатает на экране 1.667. Здесь напечатано действительно 8 символов (три пробела, предшествующие единице, видны вам, как пустое место). Вместо 8 и 3 в операторе программист может писать любые имеющие смысл числа.
Рассмотрим пример, в котором значение переменной x равно 123.45678. Знаком «_» будем обозначать 1 отступ (пробел).
| Как пишем команду в программе | Что видим в результате на экране |
|---|---|
Write(x); | 123.45678 |
Write(x:8:2); | _ _123.46 |
Write(x:10:4); | _ _123.4568 |
Поэкспериментируйте:
Турбо-Паскаль 7.0 - Самоучитель
Лукин С.Н.