Лабораторная работа №2
Создайте
приложение, реализующее ввод двух целых чисел, по щелчку на кнопке с символом
«=» вычисляющее результат операции вещественного деления и выводящее значение
результата на экран.
Окно приложения, выполняющего
операцию вещественного деления
Алгоритм
выполнения работы
1. Запустите ИСР Delphi и создайте новый проект командой Файл
► Создать ► Приложение. В результате создания проекта в окне Delphi будет
раскрыто окно формы, на которой вы будете размещать визуальные
компоненты проекта. Сохраните новый проект при
помощи команды Файл ► Сохранить
проект Как. В окне Сохранить Как создайте новую папку для файлов создаваемого
проекта, например, «Вещественное деление». Затем в
окне Сохранить Как откройте созданную папку, задайте в поле Имя
файла имя main и щелкните на кнопке Сохранить. После сохранения файла модуля main.pas откроется
окно Сохранить проект Как, в котором следует задать имя файла проекта, например, delenie, а затем
нажать кнопку Сохранить.
2. Измените свойства формы.
Для изменения размеров формы захватите угол окна формы и, не отпуская левую
кнопку мыши, перемещайте мышь, задавая требуемый размер формы.
3. Измените надпись в заголовке формы Form1 с помощью Инспектора объектов. Для этого в окне
Инспектора объектов выберите объект Form1, откройте страницу Свойства, затем выберите свойство Caption (Заголовок)
и задайте новое значение этого свойства, например,
«Вещественное деление двух целых чисел».
4. Разместите на форме
компоненты Edit1,
Edit2,
Edit3,
Label1,
Label2,
Label3,
Label4
и Button1, как показано на рис. 22.
5. Удалите текст Edit1,
Edit2,
Edit3 из соответствующих компонентов, для чего выберите
объект в окне Инспектора объектов, на странице Properties выберите свойство Text .
6. Задайте для свойства Caption компонента Label1 значение «/».
7. Измените размер символов компонента Label1, для чего в окне Инспектора объектов выберите в списке объект Label1, затем на странице Свойства разверните список свойств Font.
В списке
свойств Font выберите
свойство Size и задайте для него значение 20, как показано на рис. 16. Аналогичным
образом задайте для свойства Caption
компонента Button1 значение «=» и размер символов
20.
8. Задайте для свойства Caption компонента Label2 значение «Делимое», для Label3
— «Делитель», для Label4 — «Частное».
9. Зафиксируйте положение
компонентов на форме, выбрав команду Правка ►Зафиксировать.
После редактирования свойств визуальных компонентов форма приложения будет выглядеть следующим образом:
Рис.
22. Вид формы приложения с визуальными компонентами
10. Нажав F12,
откройте окно Редактора кода и просмотрите текст модуля, сгенерированный Delphi в процессе визуального проектирования формы.
Обратите внимание, что в тексте программы еще не
описаны переменные и нет процедуры вычисления
операции вещественного деления.
11. Чтобы приложение выполняло
вычисления при щелчке мышью на кнопке Button1 с изображением
символа «=», следует написать код обработки этого события. Для создания кода обработчика события следует воспользоваться помощью Инспектора объектов. Выберите в его окне
объект Button 1, затем на странице События дважды щелкните мышью на
пустом поле списка в событии OnClick. После этого окно Редактора кода
немедленно получит фокус, в котором в разделе
interface появится запись процедуры обработчика события:
procedure
TForm1.Button1Click(Sender: TObject);
В разделе implementation появится текст заготовки этой процедуры:
procedure
TForm1.Button1Click(Sender: TObject);
begin
...
end;
Курсор будет расположен в пустой строке между ключевыми словами begin и end. Этот код является заготовкой
обработчика события, которое будет выполняться при щелчке мышью на кнопке Button1. Остается только разместить в промежутке между begin и end необходимые
операторы. Так как в задаче необходимо выполнить деление двух
целых чисел, а результат их вещественного деления
всегда будет вещественным числом, то в разделе описания
переменных следует ввести следующее описание:
var
a, b : integer; {2 операнда - целые числа}
с : real; {частное - вещественное число}
В тело процедуры обработки события введите текст:
a:=StrToInt(Edit1.text); {преобразование
текстовой строки в целое число}
b:=StrToInt(Edit2.text);
с:=а/b; {выполнение
операции вещественного деления и присваивание
результата переменной с}
Edit3.text:=FloatToStrF(c,ffGeneral,7,4); {преобразование вещественного числа в текстовую строку}
ПРИМЕЧАНИЕ
Поскольку свойства text
объектов Editl, Edit2
имеют строковые значения, для их преобразования в целые числа используется
стандартная функция Object Pascal
— StrToInt. Так как свойству Edit3.text
нужно присвоить значение вещественного частного, то для преобразования
вещественного числа в текстовую строку используется функция FloatToStrF.
12. Для получения справочной
информации о синтаксисе функции FloatToStrF укажите курсором название функции и нажмите F1. В окне
справки описано назначение параметров этой функции.
13. Откомпилируйте и запустите
программу на выполнение при помощи команды Выполнить ►
Выполнить или щелчка мышью на кнопке Выполнить в панели инструментов или нажатием клавиши
F9. После этого на экране компьютера появится окно созданной вами формы с
компонентами Edit1,
Edit2, в которые можно вводить значения, как
показано на рис. 23.
Рис.
23. Окно приложения, выполняющего операцию вещественного
деления
При щелчке на кнопке Button1 «=» обработчик этого события будет выполнять операцию вещественного
деления двух чисел и выводить частное в окне Edit3.
14. Завершите работу приложения
любым из стандартных способов, например, щелчком мышью на кнопке Закрыть
в правом верхнем углу окна.
Дополнительное
задание 1.
Измените программу
обработчика события таким образом, чтобы перед операцией деления выполнялась проверка
делителя на равенство нулю. В случае равенства делителя нулю вместо выполнения деления в окне Edit3 должно отображаться сообщение «На
ноль делить нельзя!».
Вставьте в
процедуру обработчика события TForm1.Button1Click оператор if then else, а в качестве условия выполнения операции вещественного деления задайте b<>0. Фрагмент программы, проверяющий условие отличия делителя от нуля и выполняющий деление, если условие выполняется, может быть записан следующим образом:
var
a,b : integer; {2 операнда - целые
числа}
с : real; {частное
- вещественное число}
begin
a:=StrToInt(Edit1.text); {преобразование
текстовой строки в целое число}
b:=StrToInt(Edit2.text);
if b<>0 then {проверка отличия
делителя от 0}
begin
с:=а/b; {выполнение операции вещественного деления и
присваивание результата переменной с}
Edit3.text:=F1oatToStrF(c,ffGeneral,7,4);
{преобразование
вещественного числа в текстовую строку}
end
else
{вывод
сообщения}
Edit3.text: = 'На ноль делить нельзя!'
end;
Откомпилируйте модифицированную программу командой Проект
(Project) ► Компилировать (Compile). Запустите программу на выполнение при
помощи команды Выполнить ► Выполнить или щелчка мышью на кнопке Выполнить в панели инструментов или нажатием клавиши
F9. Проверьте работу приложения, задавая в качестве делителя разные
значения.
Дополнительное задание 2.
Отредактируйте текст
модуля таким образом, чтобы перед выполнением вычислений выполнялась проверка, заданы ли значения
операндов. Если значения операндов не заданы, то следует вывести сообщение об этом в отдельном
окне.
Поместите
перед оператором присваивания a:=StrToInt(Edit1.text); строку
if (Edit1.Text<>") and (Edit2.Text<>") then begin
которая проверяет значения свойств Edit1.Text и Edit2.Text.
Если эти значения не пустые, то выполняется
вычисление арифметической операции, в противном случае управление передается на
следующий фрагмент программы, который нужно
вставить перед последним оператором end;
end;
else ShowMessage('He заданы значения');
Сохраните, откомпилируйте и запустите приложение на выполнение. Проверьте работу приложения для случая, когда не заданы значения операндов
и убедитесь, что в этом случае выводится сообщение в отдельном
окне. Попробуйте ввести в качестве значений операндов не цифры, а символы,
например, «а» и «б». Щелкнув на кнопке Button1, убедитесь
в том, что приложение завершается и выдает сообщение
об ошибке, которая возникает из-за того, что приложение пытается преобразовывать символы в число.
Для предупреждения данной ошибки введем обработку события нажатия на клавишу в
окне Edit1 и Edit2, чтобы
запретить ввод любых символов, кроме цифр от
0 до 9 и знаков -, +.
Для создания процедуры обработчика события нажатия на клавишу в окне Edit1 выберите в окне Инспектора объектов компонент Edit1 и на странице События
дважды щелкните левой кнопкой мыши на пустом поле списка в событии OnKeyPress. После этого окно Редактора кода немедленно получит фокус и в разделе interface появится запись процедуры обработчика
события
procedure Edit1KeyPress(Sender: TObject: var Key:Char);
Параметр Key в обработчике этого события соответствует символу нажатой клавиши.
В разделе implementation появится текст заготовки этой процедуры:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key:Char);
begin
end;
Вставьте в
тело процедуры следующий оператор:
if not (Key in ['О'..'9','+','-'])
then Key:=#0;
Действие
оператора сводится к сравнению значения переменной Key с множеством значений ['0'..'9','+','-']. Если символ
нажатой клавиши не входит во множество,
то Key присваивается значение нулевого символа
(#0). Таким образом, в окне Edit1 будет
отображаться текст, состоящий из цифр и знаков «+»
и «-».
Аналогичным образом создайте процедуру обработчика события нажатия на клавишу в окне Edit2.
Сохраните,
откомпилируйте и запустите приложение на выполнение. Попробуйте ввести в качестве значений операндов не
цифры, а символы и убедитесь, что созданные выше обработчики событий. OnKeyPress для Edit1 и Edit2 не позволяют пользователю вести нецифровую
информацию. Закройте окно приложения.