Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Laboratornaya_rabota__2.doc
Скачиваний:
4
Добавлен:
12.11.2019
Размер:
611.33 Кб
Скачать

Лабораторная работа №2

Цель работы: детальное изучение основных приемов работы с компонентами Edit, Memo, ComboBox, Button. Обработка исключительных ситуаций.

В Object Pascal существуют средства обработки исключительных ситуаций (исключений), позволяющие избежать краха программы. В нашей программе такие средства используются при преобразовании строковых записей операндов в число функцией StrToFloat, а также при делении. Обработчики исключений записываются в виде:

try

<защищенный блок операторов>

except

<обработка исключения>

end;

Все операторы, располагающиеся между зарезервированными словами try (попытаться) и except (исключение), относятся к защищенному блоку. Если при выполнении любого из них возникнет исключение, управление будет передано в блок операторов, располагающийся между except и end, но если обработка защищенного блока пройдет без ошибок, блок <обработка исключения> игнорируется и управление передается оператору, следующему за end.

Задание Вариант 1

1. Пример(необходимо выполнить)

Составить программу, которая вычисляет произведение двух заданных пользователем чисел.

Решение.

Для ввода чисел можно использовать поле ввода (TEdit). Весь диалог пользователя с программой будем отражать в мемо-поле (TMemo).

Как сообщить программе, что введено первое число, а затем второе число? Можно использовать для этого две кнопки (например, с надписями «Первое число» и «Второе число». Одной кнопки недостаточно, так как необходимо в программе различать, какое введено число: первое или второе. От этого зависят дальнейшие действия: после ввода первого числа надо запомнить его в некоторой переменной, вывести в мемо-поле сообщение о вводе первого числа, а после ввода второго числа надо вывести в мемо-поле сообщение о вводе второго числа и результат умножения двух чисел.

Итак, последовательность действий пользователя во время работы с программой должна быть следующей: ввести первое число в поле ввода; нажать на кнопку «Первое число»; ввести второе число в поле ввода; нажать на кнопку «Второе число»; прочитать в мемо-поле результат. Но где гарантия, что программой воспользуется только такой дисциплинированный пользователь? Если будут доступны сразу две кнопки, то можно сначала нажать на вторую кнопку, и тогда программа начнет вычислять произведение с неопределенным первым числом. Решение этой проблемы состоит в том, чтобы сделать вторую кнопку недоступной, пока не введено первое число. Можно для этого воспользоваться свойством Enabled, которое определяет, будет ли компонент доступен во время работы программы, то есть будет ли он реагировать на сообщения от мыши, клавиатуры и таймера. Во время разработки проекта зададим значение этого свойства для второй кнопки False. В обработчике события OnClick первой кнопки сделаем ее недоступной, а вторую кнопку, наоборот, доступной. В обработчике события OnClick второй кнопки сделаем симметрично: вторую - недоступной, первую - доступной. Таким способом мы добьемся того, что в каждый момент времени пользователь сможет нажать только на одну какую-либо кнопку, причем после запуска программы - только на первую.

Итак, разместите на форме компоненты: три кнопки (TButton), мемо-поле (TMemo), поле ввода (TEdit) и метку (TLabel) - для вывода подсказок. Задайте им, а также самой форме, следующие свойства, отличные от умалчиваемых:

Форма

Свойство

Значение

Примечания

Name

fmMult

Caption

Произведение чисел

Поле ввода

Свойство

Значение

Примечания

Name

edInput

Text

Удаление текста в поле ввода во время проектирования программы приведет к тому, что при запуске программы поле ввода будет пустым.

Кнопка btFirst

Свойство

Значение

Примечания

Name

btFirst

Caption

Первое число

Кнопка предназначена для подтверждения ввода первого числа

Кнопка btSecond

Свойство

Значение

Примечания

Name

btSecond

Caption

Второе число

Кнопка предназначена для подтверждения ввода второго числа

Enabled

False

Кнопка недоступна, т.е. не реагирует на сообщения от мыши, клавиатуры и таймера

Кнопка btClose

(для завершения работы программы)

Свойство

Значение

Примечания

Name

btClose

Caption

Close

Надпись на кнопке.

Метка

Свойство

Значение

Примечания

Name

lbMessage

Caption

Введите первое число:

Многострочный редактор (мемо-поле)

Свойство

Значение

Примечания

Name

mmOutput

Lines

Очистка мемо-поля.

Align

alTop

Расположение мемо-поля - всегда в верхней части формы.

ScrollBars

ssBoth

Поместить обе линейки прокрутки - горизонтальную и вертикальную.

Ниже приводится полный текст модуля, соответствующего форме fmMult (жирным шрифтом по-прежнему выделены те предложения, которые пишем мы).

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons;

type

TfmMult = class(TForm)

btFirst: TBitBtn;

btSecond: TBitBtn;

edInput: TEdit;

mmOutput: TMemo;

btClose: TButton;

lbMessage: TLabel;

procedure btCloseClick(Sender: TObject);

procedure btFirstClick(Sender: TObject);

procedure btSecondClick(Sender: TObject);

procedure FormActivate(Sender: TObject);

private

{ Private declarations }

X,Y:integer;

public

{ Public declarations }

end;

var

fmMult: TfmMult;

implementation

{$R *.DFM}

procedure TfmMult.btCloseClick(Sender: TObject);

begin

Close;

end;

procedure TfmMult.btFirstClick(Sender: TObject);

begin

//Преобразуем текст из edInput в целое число:

X:=StrToInt(Trim(edInput.Text));

//Сообщаем в мемо-поле о вводе первого числа:

mmOutput.Lines.Add('Первое число - '+edInput.Text);

//Очищаем поле ввода:

edInput.Text:='';

//Возвращаем фокус полю ввода:

edInput.SetFocus;

//Выводим подсказку в поле метки:

lbMessage.Caption:='Введите второе число:';

//Делаем первую кнопку недоступной, а вторую доступной:

btFirst.Enabled:=False;

btSecond.Enabled:=True;

end;

procedure TfmMult.btSecondClick(Sender: TObject);

begin

//Преобразуем текст из edInput в целое число:

Y:=StrToInt(Trim(edInput.Text));

//Сообщаем в мемо-поле о вводе второго числа:

mmOutput.Lines.Add('Второе число - '+edInput.Text);

//Вычисляем и показываем результат:

mmOutput.Lines.Add('Результат: '+IntToStr(X)+'*'+

IntToStr(Y)+'='+IntToStr(X*Y));

//Очищаем поле ввода:

edInput.Text:='';

//Возвращаем фокус полю ввода:

edInput.SetFocus;

//Выводим подсказку в поле метки:

lbMessage.Caption:='Введите первое число:';

//Делаем первую кнопку доступной, а вторую недоступной:

btFirst.Enabled:=True;

btSecond.Enabled:=False;

end;

procedure TfmMult.FormActivate(Sender: TObject);

begin

//Передаем фокус полю ввода edInput:

edInput.SetFocus;

end;

end.

Примерный вид работающей программы будет таким:

Такая программа будет нормально работать с достаточно дисциплинированным пользователем, который вводит только «хорошие» данные, то есть целые числа. Если же в момент нажатия на какую-либо из кнопок btFirst или btSecond в поле ввода edInput будут содержаться символы, не являющиеся символьным представлением какого-либо целого числа, либо это поле будет пустым, то это вызовет ошибку и аварийное завершение работы программы (проверьте).

Задание 1.

Дополните программу защитой от некорректного ввода данных.

Задание 2.

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

Указание. Объект Lines, который хранит строки мемо-поля, обладает методом Clear, с помощью которого можно очистить содержимое мемо-поля.

Задание 3.

Измените программу так, чтобы при вводе первого числа была бы видна только кнопка btFirst, а кнопка btSecond была бы невидимой (а не недоступной), а при вводе второго числа, наоборот, кнопка btSecond стала бы видимой, а кнопка btFirst - невидимой.

Задание 4.

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

Указание. Функция function StrToFloat(const S: string): Extended преобразует строку символов в вещественное число. Строка S должна содержать символьное представление какого-либо вещественного числа, например, следующие строки функция StrToFloat корректно преобразует в вещественные числа (здесь целая часть отделяется от дробной точкой):

‘2.89’;

‘-67.001’;

‘1.2E7’;

‘4e-01’.

Строки

’56 км’;

’34 5’;

‘E5’;

‘ноль’,

используемые в качестве аргумента, вызовут ошибку.

Примечание. Разделитель целой и дробной частей зависит от настройки Windows (этот разделитель можно выбрать с помощью Пуск/Настройка/Панель управления/Язык и стандарты).

Функция function FloatToStr(Value: Extended): string выполняет обратное преобразование: вещественное число - в строку символов.

2. Создать программу, выполняющую перевод чисел из 16-ой, 8-ой, 10-ой систем счисления в двоичную систему.

Необходимые компоненты:

Форма

Свойство

Значение

Caption

Программа перевода чисел из одной с.с. в другую

Поле ввода, в которое вводится исходное число

Свойство

Значение

Примечания

Text

Удаление текста в поле ввода во время проектирования программы приведет к тому, что при запуске программы поле ввода будет пустым.

Комбинированный список ComboBox (для выбора одного из нескольких вариантов)

Свойство

Значение

Items

16->2

8->2

10->2

Кнопка Button

Свойство

Значение

Caption

Выполнить

Многострочный редактор Memo (для вывода результата)

Свойство

Значение

Caption

Выполнить

Замечание: Необходимые метки(компонент Label) добавляйте по своему усмотрению.

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