Изменим предыдущую программу таким образом, чтобы пользователь мог вводить сначала первое число, далее знак (+, -, *, / ), потом второе число, и в ответе получался бы результат применения соответствующего арифметического действия к введенным числам:
var
{в разделе var определяются переменные:}
s: Char;
{переменная s имеет тип "char" т.е."символ"}
x,y,z: real;
{переменные x, y, z -тип "real", т.е. "вещественный"}
begin
{начало программы}
Write(' x=');
{выводится на экран подсказка " x= "}
readln(x);
{считывается с экрана вводимое пользователем значение x}
Write(' Znak='); {выводится на экран подсказка " Znak= "}
readln(s);
{считывается вводимое пользователем значение s (знак)}
Write(' y=');
{выводится на экран подсказка " y= "}
readln(y);
{считывается с экрана вводимое пользователем значение y}
if s='+' then z:=x+y; {если s='+' (введенный знак -"плюс"), то z присваивается X+Y }
if s='-' then z:=x-y; {если s='-' (введенный знак -"минус"), то z присваивается X-Y }
if s='*' then z:=x*y; {если s='*' (введенный знак -"умножить"), то z присваивается X*Y }
if s='/' then z:=x/y; {если s='/' (введенный знак -"делить"), то z присваивается X/Y }
write(x,s,y,'=',z);
{пишем на экран значения X, s, Y, символ "=" и значение Z}
end.
{конец программы}
В этой программе определены переменные x,
y, z -типа "real", т.е. "вещественный". Теперь эти переменные могут принимать дробные значения. Также определена переменная
s, которая имеет тип "char" т.е."символ". В ней будем хранить вводимое пользователем значение знака арифметического действия.
После того, как пользователь, в ответ на подсказки программы, вводит значения
x, s и y, выполняется сравнение знака
(s) с допустимыми арифметическими действиями (+, -, *, / ):
if s='+' then z:=x+y; {если s='+' (введенный знак -"плюс"), то z присваивается X+Y }
if s='-' then z:=x-y; {если s='-' (введенный знак -"минус"), то z присваивается X-Y }
if s='*' then z:=x*y; {если s='*' (введенный знак -"умножить"), то z присваивается X*Y }
if s='/' then z:=x/y; {если s='/' (введенный знак -"делить"), то z присваивается X/Y }
В этих строках применена конструкция " if <условие> then <действие> ", где в данном случае
<условие> - это сравнение s со знаками арифметического действия, а
<действие> - присвоение переменной z соответствующего значения.
Следующая строка
write(x,s,y,'=',z);
выводит на экран значения x, s, y, символ
"=" и значение z, однако, поскольку
x,y,z в этом случае - переменные вещественного
("real") типа, то их значения выводятся в стандартизованном для этого типа виде: если пользователь ввел, к примеру:
x=33
Znak=*
у=100
то ответ будет выглядеть так:
3.3000000000E+01* 1.0000000000E+02= 3.3000000000E+03
Конечно, программист должен понимать такую запись. А понимать ее надо следующим образом: первое число (3.3000000000E+01) равно три целых три десятых (3.300..) умножить на десять в степени, следующей за буквой "E" (+01), то есть три и три умножить на десять в первой степени, что равно тридцать три (как и вводил пользователь). Далее следует знак умножения ( * ), введенный пользователем. Далее - второе число (1.0000000000E+02), равное единице (1.00....), умноженной на десять в степени, следующей за буквой "E" (+02), то есть один умножить на десять во второй, что равно сто (как и вводил пользователь). Далее - знак равенства и подсчитанное компьютером значение переменной
z (3.3000000000E+03), равное 3.3 умножить на десять в степени 3, то есть 3300.
В понимании такой формы записи чисел, которую иногда называют "scientific notation" (научная форма представления чисел), обычно не возникает трудностей даже у людей, знакомых с программой средней школы, однако, дабы не пугать пользователя, в Паскале существует возможность задать формат вывода данных. Сделаем это, в нашем случае, следующим образом. Строку, которой выводим ответ (
write(x,s,y,'=',z); ), перепишем так:
write(x:1:2,s,y:1:2,'=',z:1:2);
Значения, стоящие через двоеточия после переменных, указывают компьютеру, сколько знакомест при выводе отводится под целую и дробную части числа соответственно (задается формат вывода :1:2). При этом, если фактическое количество цифр целой части числа превосходит отведенное форматом, то целая часть числа все равно выводится полностью. И ответ для
x=33
Znak=*
у=100
будет выглядеть удобочитаемо:
33.00*100.00=3300.00
то же на С то же на Basic то же на Fortran
аналог на JavaScript