Учебник по программированию.

Первые шаги. Язык программирования PascalABC.

Предыдущий параграф Назад в содержание Следующий параграф


§3. Оператор присваивания. Арифметические выражения.

Оператор присваивания.

Мы научились в предыдущем параграфе записывать какие-либо значения в переменную с помощью команды Read. Другим способом записать значение в переменную можно с помощью оператора присваивания :=. Именно двоеточие со знаком равно. Не надо путать этот оператор просто со знаком равно =. Знак равно используется для сравнения двух величин, а оператор присваивания используется для записи какого-либо значения в переменную. Выражение «записать значение в переменную» было использовано для более простого понимания. На практике используется другое выражение «присвоить значение переменной». Далее в учебнике будет использоваться именно такое выражение.

Далее пример использования оператора присваивания:


  A:=25;

  A:=B;

  A:=32+1;

  A:=A+B+1;


Из примера видно, что с лева от оператора присваивания находится имя переменной, которой должно присвоиться значение того, что находится справа от оператора присваивания. Причём справа может быть просто какое-либо число, может быть имя другой переменной, тогда значение правой переменной будет присвоено левой переменной. Так же справа может находиться какое-либо выражение, тогда результат этого выражения будет присвоен левой переменной. Так же стоит отметить, что в правой части может находиться сама левая переменная.

Здесь стоит ещё раз обратить внимание на сам термин «переменная». В течении всей программы одной переменной можно присваивать различные значения в различных местах программы. Т.е. её значение может меняться. Отсюда и название «переменная».

Арифметические выражения.

Далее разберём, как производить арифметические операции с переменными. Существуют следующие основные арифметические операции: сложение, вычитание, умножение и деление. Символы, которыми обозначаются данные операции, и примеры использования приведены в таблице:


Наименование операции.

Символ, которым обозначается операция.

Пример использования.

Сложение

+

А:=B+C

Вычитание

-

А:=B-C

Умножение

*

А:=B*C

Деление

/

А:=B/C


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

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

Теперь сделаем небольшой обзор того, что мы знаем и умеем. Мы умеем объявлять переменные типа Byte. Переменная типа Byte может содержать в себе число от 0 до 255. Следовательно, все арифметические операции мы можем производить только с этими числами, и так же результат должен быть тоже в этом же диапазоне. Мы можем организовать диалог между человеком и компьютером. Можем считать данные с клавиатуры. Всего этого вполне достаточно чтобы написать простейший калькулятор:


Var

  A,B,C:Byte;

begin

  Writeln('Введите два числа');

  Read(B,C);

  A:=B+C;

  WriteLn(B,'+',C,'=',A);

end.

____________________________________________

Введите два числа

2

3

2+3=5


Данный калькулятор складывает два введённых числа. На практике с помощью компьютеров решаются более сложные задачи. Например, перед нами может стоять следующая задача: в какой точке будет находиться тело, если оно движется по следующему закону: , где координата тела, время его движения? Время необходимо вводить с клавиатуры.

Решение:


Var

  X,t:Byte;

begin

  Writeln('Введите время t');

  Read(t);

  X:=5*t+24;

  Write('Во время t=',t,' тело будет находиться в точке с координатой ');

  WriteLn('X=',X,'.');

end.

_________________________________________________________________________

Введите время t

3

Во время t=3 тело будет находиться в точке с координатой X=39.


Теперь усложним задачу. Закон движения будет следующий: , где , , какие-то параметры заранее неизвестные, должны вводиться с клавиатуры.

Что бы реализовать данную функцию нам понадобиться знание того, в каком порядке программа выполняет арифметические операции. Дело в том, что программа выполняет операции не одновременно все сразу, а по порядку. В Pascal для установки приоритета используются круглые скобки, т.е. вначале выполняется то, что находится в скобках. Причём если в скобках есть ещё скобки, то выполняются вначале внутренние скобки. Порядок выполнения арифметических операций без учёта скобок следующий:

  1. выполняются слева направо все операции умножения и деления;
  2. выполняются все операции сложения и вычитания.

Данная функция в языке Pascal будет выглядеть следующим образом:


  X:=(5*t+(С1+С2)/24)*С3.

Далее, что бы было ещё понятнее, приведу в таблице поэтапный процесс формирования данной формулы:


Этап

Вид формулы в математике

Вид формулы в Pascal

1

(С1+С2)/24

2

5*t+(С1+С2)/24

3

(5*t+(С1+С2)/24)*C3


Предположим что: , , , . Тогда, в соответствии с порядком, вычисления будут происходить следующим образом:


     X:=(5*5+(20+4)/24)*3

  1. X:=( 25+ (24) /24)*3
  2. X:=( 25+    1    )*3
  3. X:=(    26       )*3
  4. X:=       78


Далее приведён текст программы, решающей данную задачу:


Var

  X,t,C1,C2,C3:Byte;

begin

  Writeln('Введите время t и параметры С1,С2,С3');

  Read(t,C1,C2,C3);

  X:=(5*t+(C1+C2)/24)*C3;

  Write('Во время t=',t,' тело будет находиться в точке с координатой ');

  Writeln(' X=',X,'.');

end.


Казалось бы, всё написано правильно, однако после нажатия на кнопку «выполнить»,  компилятор выдаёт ошибку. Эта ошибка отображается в списке ошибок, который появляется вместо окна вывода:



В столбике «Строка» находится цифра 6, значит ошибка находится в шестой строке. В столбике «Описание» написано следующее: «Нельзя преобразовать тип real к byte». Что это значит? В выражении присутствует операция деления, в результате её работы может получиться дробное число. Дробное число не может содержаться в переменной типа byte, а может содержаться в переменной типа real. Значит, в результате вычисления выражения получается значение типа real, а переменная X у нас имеет тип byte. Присвоить значение типа real переменной типа byte невозможно. Наоборот сделать можно, а так нельзя. Что бы понять, почему так устроено, мы должны познакомиться с типом данных real.

Прежде чем двигаться дальше, хочу сделать небольшое отступление. Вы могли заметить, что я писал тип данных Byte с большой буквы, а в столбике «Описание» этот тип данных написан с маленькой (byte). Дело в том, что, в отличие от некоторых других языков, в языке Pascal нет разницы между большой и маленькой буквой. То есть команды можно писать как большими, так и маленькими буквами, например:


  Writeln;

  writeln;

  WRITELN;

  WriteLn;


В принципе это всё одна и та же команда Writeln. То же самое относится и к именам переменных, например:


Var

  A:byte;

Begin

  a:=2;

  Writeln(a);

End.


Во всех случаях, когда встречается большая буква «A» или маленькая «a» они являются именами одной и той же переменной.

Теперь пришло время познакомиться с типом данных real. Переменная данного типа может содержать в себе любое число. Целое, дробное, отрицательное или положительное. В памяти компьютера оно занимает 48 элементарных ячеек памяти. Подробно об этом типе мы узнаем в параграфе, посвящённом типам данных. Сейчас нам важно усвоить, что в переменной данного типа мы можем хранить любое число. Для того что бы ввести дробное число необходимо разделить целую и дробную части точкой. Именно точкой, а не запятой.

Перепишем нашу программу, заменив тип переменных byte на тип real.


Var

  X,t,C1,C2,C3:Real;

begin

  Writeln('Введите время t и параметры С1,С2,С3');

  Read(t,c1,C2,C3);

  X:=(5*t+(C1+C2)/24)*C3;

  Write('Во время t=',t,' тело будет находиться в точке с координатой ');

  Writeln('X=',X,'.');

end.

_________________________________________________________________________

Введите время t и параметры С1,С2,С3

4

56

4

2

Во время t=4 тело будет находиться в точке с координатой X=45.


Я специально не стал в самом начале использовать тип real, что бы показать к каким ошибкам может привести невнимательное использование различных типов. Будьте внимательны при выборе типа переменных. С одной стороны мы можем сэкономить ресурсы компьютера, выбрав тип, занимающий меньше памяти, с другой стороны мы получим ошибку при выполнении программы.


В данном параграфе мы познакомились с оператором присваивания, изучили арифметические операции и порядок их выполнения. Узнали, что в Pascal большая и маленькая буквы имеют одно то же значение. А так же познакомились с типом данных real.


Задачи.

Написать программы вычислений по заданным формулам. Значения переменным x присваивать во время выполнения программы с помощью оператора присваивания, значения переменным С присваивать с помощью команды read. Варианты формул приведены в таблице:


Вариант

Формула

1

2

3

4

5


Получившиеся программы должны иметь названия и комментарии.


Решение.

Приведу только один пример решения, остальные решения должны получиться подобными:


program Kalkulyator;

Var //Объявляем переменные

  y,x,C:real;

begin

  x:=5;//инициализируем переменную x

  write('Введите параметр С ');//Предлагаем ввести параметр С

  read(C);//Считываем введённые данные

  y:=(4*x*x+C)/2;//Производим вычисления по формуле

  Writeln('y=',y);//Выводим результат

end.

______________________________________________________________

Введите параметр С 8

y=54




Предыдущий параграф Назад в содержание Следующий параграф