|
|||||||||||||||||||||||||||||||||||||||||||||||
§3. Оператор присваивания. Арифметические выражения. Оператор присваивания. Мы научились в предыдущем параграфе записывать какие-либо значения в переменную с помощью команды Read. Другим способом записать значение в переменную можно с помощью оператора присваивания :=. Именно двоеточие со знаком равно. Не надо путать этот оператор просто со знаком равно =. Знак равно используется для сравнения двух величин, а оператор присваивания используется для записи какого-либо значения в переменную. Выражение «записать значение в переменную» было использовано для более простого понимания. На практике используется другое выражение «присвоить значение переменной». Далее в учебнике будет использоваться именно такое выражение. Далее пример использования оператора присваивания: A:=25; A:=B; A:=32+1; A:=A+B+1; Из примера видно, что с лева от оператора присваивания находится имя переменной, которой должно присвоиться значение того, что находится справа от оператора присваивания. Причём справа может быть просто какое-либо число, может быть имя другой переменной, тогда значение правой переменной будет присвоено левой переменной. Так же справа может находиться какое-либо выражение, тогда результат этого выражения будет присвоен левой переменной. Так же стоит отметить, что в правой части может находиться сама левая переменная. Здесь стоит ещё раз обратить внимание на сам термин «переменная». В течении всей программы одной переменной можно присваивать различные значения в различных местах программы. Т.е. её значение может меняться. Отсюда и название «переменная». Арифметические выражения. Далее разберём, как производить арифметические операции с переменными. Существуют следующие основные арифметические операции: сложение, вычитание, умножение и деление. Символы, которыми обозначаются данные операции, и примеры использования приведены в таблице:
В принципе ничего сложного нет. Почти как в обычной математике. Разница лишь в том, что знак равно здесь не ставиться, а ставиться оператор присваивания между переменной выражением, причём переменная находится слева, а выражение справа. Здесь можно подытожить и сформулировать, что такое арифметическое выражение. Этот термин вы будете часто встречать в различной литературе, в том числе и в данной книге. Арифметическое выражение – совокупность переменных, констант и операций, составляющих определённую математическую формулу, при вычисление которой должен получиться какой-либо результат, который в свою очередь называется результатом арифметического выражения. Теперь сделаем небольшой обзор того, что мы знаем и умеем. Мы умеем объявлять переменные типа 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 для установки приоритета используются круглые скобки, т.е. вначале выполняется то, что находится в скобках. Причём если в скобках есть ещё скобки, то выполняются вначале внутренние скобки. Порядок выполнения арифметических операций без учёта скобок – следующий:
Данная функция в языке Pascal будет выглядеть следующим образом: X:=(5*t+(С1+С2)/24)*С3.
Далее, что бы было ещё понятнее, приведу в таблице поэтапный процесс формирования данной формулы:
Предположим что: , , , . Тогда, в соответствии с порядком, вычисления будут происходить следующим образом: X:=(5*5+(20+4)/24)*3
Далее приведён текст программы, решающей данную задачу: 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. Варианты формул приведены в таблице:
Получившиеся программы должны иметь названия и комментарии. Решение. Приведу только один пример решения, остальные решения должны получиться подобными: 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
|