Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
uchebnoe_posobie.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
3 Мб
Скачать
☆

Дополнительное задание 1.

Закройте окно приложения и отредактируйте текст модуля таким образом, чтобы перед выполнением вычислений выполнялась проверка, заданы ли значения операндов. Если значения операндов не заданы, то следует вывести сообщение об этом в отдельном окне.

Окно сообщения о некорректности значения операнда

Поместите перед оператором присваивания 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. В итоге получится следующий текст модуля приложения:

unit Main;

Interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms. Dialogs, StdCtrls, ExtCtris;

type

TForm1 = class(TForm)

Edit1: TEdit;

Edit2: TEdit;

Label1: TLabel;

Label2: TLabel;

RadioGroup1: TRadioGroup;

Button1: TButton;

Edit3: TEdit;

Label3: TLabel;

procedure Button1ClickCSender: TObject);

procedure Edit1KeyPress(Sender: TObject: var Key: Char);

procedure Edit2KeyPress(Sender: TObject; var Key: Char);

private

{Private declarations}

public

{Public declarations}

end;

var

Form1: TForm1;

implementation {$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

{обработчик события щелчка на кнопке Button1}

var

a,b:integer; {2 операнда - целые числа.} с:real; {результат арифметических операций}

begin

if (Edit1.Text<>’’) and (Edit2.Text<>’’) then

begin

a:=StrToInt(Edit1.text); {если значения заданы}

b:=StrToInt(Edit2.text); {преобразование текстовой строки

в целое число}

Edit3.text:=''; {очистить от результата предыдущих вычислений}

{выбор операции в зависимости от значения свойства RadioGroup1.ItemIndex}

Case RadioGroup1.ItemIndex of

  1. : c:=a+b; {сложение}

  2. : c:=a-b; {вычитание}

  3. : c:=a*b; {умножение}

  4. : {деление} if b=0 then ShowMessage('Ha ноль делить нельзя!')

else c:=a/b;

end;

if RadioGroup1.ItemIndex <>3 than {вывод результата операций}

Edit3.text:=F1oatToStrF(c,ffGeneral,10,4)

{преобразование результата вещественного деления в текстовую строку}

else if b<>0 then

Edit3.text:=FloatToStrF(c,ffGeneral,10.4)

end

else ShowMessage('He заданы значения');

end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin {разрешить ввод в Edit1 только цифр}

if not (Key in ['0'..'9','+','-']) then Key:=#0;

end;

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char); begin {разрешить ввод в Edit2 только цифр}

if not (Key in ['0'..'9','+','-']) then Key:=#0;

end;

end.

Сохраните, откомпилируйте и запустите приложение на выполнение. Попро­буйте ввести в качестве значений операндов не цифры, а символы и убедитесь, что созданные выше обработчики событий. OnKeyPress для Edit1 и Edit2 не позволяют пользователю вести нецифровую информацию. Закройте окно приложения.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]