Арифметические операции, или Учим компьютер считать

Изначально человек создавал компьютер для того, чтобы машина выполняла расчеты. И в настоящий момент вычисления — это одна из основных задач для компьютера. Вычислительные программы запрашивают у пользователя входные данные, проводят вычисления и выдают результат.

Задачи урока

  • Ввод и вывод числовых данных.
  • Преобразование из строкового типа в целочисленный и обратно.

Выполнение упражнения

В этом упражнении мы создадим простейший калькулятор, который будет находить сумму двух чисел. Приложение будет состоять из двух однострочных редакторов для ввода чисел, кнопки «Вычислить» и ещё одного однострочного редактора для вывода результата (рисунок 1).

image084
Рисунок 1. Окно приложения

1. Дизайн приложения

  1. Поместите на форму компоненты, как показано на рисунке 2а.

а)image087 б) image089
Рисунок 2

  1. При помощи окна Инспектор объектов отредактируйте свойства компонентов:
  • очистите содержимое полей ввода;
  • на кнопке сделайте надпись «Вычислить»;
  • в заголовке формы напишите «Калькулятор».

В результате получится форма, показанная на рисунке 2б.

2. Назначение компонентам имён

Теперь корректно назовите компоненты на форме (т. е. измените значения свойства Name):

Имя, которое

было

Имя, на которое

необходимо изменить

Для чего мы так сделали ?

Form1

Form1

Ничего не изменили, т. к. форма одна

Label1, Label2, Label3

LabelNum1, LabelNum2, LabelResult

Эти метки ничего не делают. Они просто информируют пользователя

Edit1, Edit2

EditNum1, EditNum2

Number (переводится как число) — поля для ввода 1-го и 2-го чисел

Edit3

EditResult

Result  (переводится как результат) — поле для вывода результата

Button1 ButtonСalc

Сalculation  (переводится как вычислить ) — кнопка для вычисления

 

3. Обработка события

  1. Дважды щёлкните по кнопке «Вычислить«, чтобы создать для неё обработчик события OnClick. У каждого компонента есть множество событий. Но существует одно, наиболее используемое (по мнению компании Borland). Именно это событие и открывается двойным щелчком по компоненту. Отметим, что не для всех компонентов это событие OnClick.
  2. Что нужно сделать при нажатии на кнопку? Взять число из первого (editNum1) и второго текстовых полей (editNum2), сложить их и вывести результат в третье (editResult). Напишем следующий код:

 

procedure TForm1.ButtonMathClick(Sender: TObject);

begin

editResult.Text := editNum1.Text + editNum2.Text;

end;

 

Листинг 1

  1. Сохраните приложение, затем запустите. Проверьте работу приложения: сложите числа 6 и 9. Вас удивил ответ? (рисунок 3а). Мы получили результат сложения символов из однострочных редакторов.

а) image091б) image093
Рисунок 3

  1. Дело в том, что свойство Text компонента Edit имеет тип String, поэтому получился результат сложения двух текстовых строк: к первой строке была присоединена вторая. Убедитесь в этом, введя строковые значения и нажав на кнопку (рисунок 3б).

Напомним, что операция присоединения одной строки к другой называется конкатенацией.

4. Преобразование типов

Для того чтобы компьютер работал с данными как с числами, необходимо перевести их из строкового типа в числовой, сложить, а затем результат перевести обратно в строковый для вывода на экран. Для перевода из строки в целое число служит функцияStrToInt, а для обратного перевода — IntToStr (перейти к функциям преобразования).

  1. Опишите три локальные переменные: две будут служить для хранения исходных чисел, а третья — для хранения результата. Ниже приведён правильный код процедуры:
procedure TForm1.ButtonMathClick(Sender: TObject);

Var Result, Num1, Num2:Integer;

Begin

         Num1 := StrToInt(EditNum1.text);

         Num2 := StrToInt(EditNum2.text);

         Result := Num1 + Num2;

        EditResult.Text := IntToStr(Result);

end;

 

Листинг 2

В переменную Num1 записывается целое число, преобразованное из однострочного редактора EditNum1, в переменную Num2 — число из EditNum2. Затем в переменную Result заносится их сумма. После этого ответ преобразовывается в строку и выводится в однострочном редакторе EditResult.

  1. Запустите приложение. Теперь калькулятор будет работать так, как надо (рисунок 4).

image084
Рисунок 4

 

5. Коротко о главном

У каждого компонента есть множество событий. Но одно, наиболее используемое (по мнению разработчиков среды Delphi), создаётся после двойного щелчка по компоненту.

Для вывода числового значения на компонент либо для чтения числа из компонента необходимо пользоваться функциями преобразования типов.

6. Выполнение заданий

Особенности заданий

  • Для полей ввода Edit необходимо ввести поясняющие надписи с помощью компонента Label.
  • Компоненты должны иметь осмысленные имена.
  • Кнопка выхода из приложения — обязательна!
  • Комментируйте код программы!
  • Перед размещением компонентов на форме желательно нарисовать их расположение на листе бумаги.

Задания I уровня сложности

1. Создайте приложение «Как дела?«, которое запрашивает имя пользователя с помощью текстового поля Edit, и выдаёт личное приветствие с помощью метки Label. Например, если пользователь ввёл «Олег«, то приложение должно выдать «Привет, Олег! Как дела?«.


2. Создайте приложение с одной кнопкой и двумя областями ввода. В области ввода пользователь вводит размеры окна формы (ширину и высоту). При нажатии на кнопку размеры соответствующим образом изменяются.


3. Создайте приложение «5 лет назад«, которое через две области ввода запрашивает у пользователя его имя и возраст. А при нажатии на кнопку в заголовке формы выводит надпись с именем и возрастом, который был 5 лет назад. Например, если ввели имя «Вася«, а возраст «17» лет, то приложение должно выдать: «Вася, 5 лет назад Вам было 12«. Причём, если было введено число меньше 5, то приложение выводит: «Вы ещё не родились«.


4. Создайте приложение по расчёту значения функции f(x,y)=x+y*3, где x и y вводятся в полях ввода. Результат отображается в метке. Например: «Значение функции f(x,y)=35, при x=5, y=10«. Вводимые значения должны быть целыми.


5. Создайте приложение «Ювелир«, вычисляющее стоимость золотого изделия. В однострочных редакторах пользователь заносит массу изделия и стоимость (в руб.) одного грамма золота. Итоговая цена за изделие должна отобразиться в отдельном однострочном редакторе Edit. Учтите, что масса может быть не целой величиной.


6. Создайте приложение с двумя кнопками и областью ввода Edit. В область ввода пользователь вводит шаг (целое число). При нажатии на первую кнопку все края окна увеличиваются на значение, равное шагу. При нажатии на вторую кнопку окно соответственно уменьшается. Причём центр окна остаётся неизменным! По умолчанию шаг равен 5.


7. Создайте приложение «Двигающаяся форма» с четырьмя кнопками. При нажатии на эти кнопки форма перемещается на один пиксель влево, вправо, вверх либо вниз соответственно. В заголовке формы отображаются текущие координаты формы. Например: «Форма имеет координаты: x=95, y=124«.


8. Создайте приложение «Мини-калькулятор«, которое бы позволяло вычислять четыре арифметических действия с целыми числами: сложение, вычитание, умножение, деление. Каждое действие обозначается отдельной кнопкой. На форме находятся три однострочных редактора: для ввода двух чисел и вывода результата.


Задания II уровня сложности

1. Создайте приложение «Наблюдение за мышью«, которое выводит в заголовке окна текущие координаты курсора при перемещении его по форме. При щелчке по форме мышью в компоненте Label должна появиться информация о координатах щелчка.


2. Создайте приложение «Улучшенный мини-калькулятор«, которое бы позволяло вычислить четыре арифметических действия с действительными числами: сложение, вычитание, умножение, деление. Каждое действие обозначается отдельной кнопкой. На форме находятся три однострочных редактора: для ввода двух чисел и вывода результата. При делении на ноль в однострочном редакторе, предназначенном для вывода результатов, отображается текст «Деление на ноль«.


3. Создайте приложение для нахождения корней квадратного уравнения. Коэффициенты при неизвестных вводятся в три области ввода Edit. Результат выдаётся в компоненте Label после нажатия на кнопку. Если решения нет, то в компоненте Label появляется соответствующая надпись.