Арифметические операции

Что делать, чтобы стать программистом Что делать, чтобы стать программистом

Многие сегодня хотят стать программистами. Хотят. Но ничего не делают для этого. Не делают даже простых вещей. Не хотят даже прочитать книжку из 10 страниц. В итоге так и остаются никем. Потому что мечты не сбываются никогда. Сбываются только планы… Подробнее...

Мы уже более-менее разобрались с выражениями, операторами и операциями. Теперь будем изучать операции более конкретно. И начнём с самых простых и с самых распространённых. А это, в первую очередь, арифметические операции.

Понятно, что арифметические операции используются для соответствующих вычислений. Каждой арифметической операции соответствует свой оператор. Вычисления можно выполнять с целыми и вещественными числами. Однако есть нюансы, о которых мы будем говорить позже. А пока перечислим операторы, которые используются для выполнения арифметических операций.

Таблица 15.1. Бинарные арифметические операторы.

Оператор Операция Типы данных
+ Сложение Целые, вещественные
- Вычитание Целые, вещественные
* Умножение Целые, вещественные
/ Деление Вещественные
div Целое деление Целые
mod Остаток Целые

Как вы догадались, операторы div и mod нельзя использовать с вещественными числами. А оператор / нельзя использовать с целыми числами. Впрочем, это относится только к языку Паскаль. В других языках, например в С++, таких ограничений нет. С одной стороны это хорошо, но с другой - может привести к труднонаходимым ошибкам.

Арифметические операторы используются в программах примерно так:

var x, y  : integer;

begin
  x := 2;
  y := 10;
  x := x * y;   //x = 20
  x := x + y;   //x = 30 
end.

Операторы +, -, * и / вам знакомы из математики. Поэтому рассказывать о них особо нечего. А вот операторы div и mod некоторым могут показаться непонятными. Поэтому остановимся на них более подробно.

Оператор div выполняет целочисленное деление. Его можно использовать только с целыми типами данных. Как он работает?

Например,

13 div 2

будет равно 6. Хотя на самом деле 13 / 2 = 6,5. Однако, если вы используете целые типы данных, то число 6,5 вы не сможете получить в результате. Вам придётся либо записывать результат в переменную вещественного типа, либо использовать оператор div и смириться с погрешностью.

Оператор mod определяет остаток от целого деления. Например,

13 mod 2

будет равно 1, так как ближайшее целое число, которое можно разделить на 2 - это 12. А 13 - 12 = 1.

ВАЖНО!
При бинарных операциях результат будет целого типа, если ОБА операнда являются выражениями целого типа. Если хотя бы один из операндов является выражением вещественного типа, то и результат будет иметь вещественный тип.

Это означает, что такой код:

Листинг 15.1. Ошибка при компиляции.

var x, y  : integer;
    z     : single;

begin
  x := 2;
  y := 10;
  z := 20;
  x := y + z;    //ОШИБКА!!!
end.

Вызовет ошибку во время компиляции.

Кроме бинарных, как вы помните из предыдущего урока, есть ещё и унарные операции.

Таблица 15.2. Унарные операторы.

Оператор Операция Типы данных
+ Тождество Целые, вещественные
- Отрицание Целые, вещественные

Используются эти знаки также, как и в математике. Например,

y := +y;
х := -y;

А теперь попробуем применить полученные знания на практике. Напишем программу - простой калькулятор, который будет принимать от пользователя два числа и выполнять над ними три операции: сложение, вычитание и умножение.

Листинг 15.2. Простой калькулятор.

program ariphm;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

var x, y  : integer;

begin
  Write('x = ');
  ReadLn(x);
  Write('y = ');
  ReadLn(y);
  WriteLn('x + y = ', x + y);
  WriteLn('x - y = ', x - y);
  WriteLn('x * y = ', x * y);
  ReadLn;
end.
Домашнее задание:

Почему код листинга 15.1 приведёт к ошибке во время компиляции? Исправьте код таким образом, чтобы программа откомпилировалась без ошибок. Повторите программу из листинга 15.2. Подумайте, как можно её усовершенствовать.


Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

Яндекс.Метрика