Смекни!
smekni.com

Курс " Информатика " методические указания для выполнения лабораторных работ студентами направления 230100 (стр. 2 из 3)

3.2 Ввод и вывод данных

Удобнее всего вводить данные при помощи поля ввода. Компонент "поле ввода" в Delphi называется LabeledEdit и находится на закладке Additional палитры компонентов Его значок -

. Выделите компонент и щелкните мышью на форме – компонент перенесется на нее. Передвиньте его в желаемое место. Точно также поместите на форму второй такой же компонент. По умолчанию они будут иметь имена LabeledEdit1 и LabeledEdit2 соответственно. Теперь нужно задать свойства полей ввода. Прежде всего обратите внимание на свойство Text. В нем хранится текст (тип данных STRING), вводимый пользователем в поле. Пока там ничего нет. В Text можно записать значения по умолчанию, чтобы при запуске программы поля не были пустыми. Занесите в свойства Text значение "0" (разумеется, без кавычек!) Далее следует задать подпись над полем ввода (кстати, подпись может располагаться и сбоку, и снизу – см. свойство LabelPosition). Разверните свойство EditLabel, щелкнув по плюсику, и найдите свойство Caption – оно написано зелеными буквами. Напишите в свойстве Caption название поля ввода, например, "А" и "В". Эти названия просто выводятся на экран и никак не влияют на работу программы.

Для вывода результатов расчета на закладке Standard найдите компонент Label со значком

. Label – это просто текст, выводимый на экран. Поместите его на форму. Выводимый текст хранится в свойстве Caption. Для начала это свойство надо очистить, чтобы на экране не маячили надписи типа "Label1". Еще раз обратите внимание на то, что содержимое свойств Text и Caption никак не связано с именем компонента (свойство Name).

Наконец, на форму нужно поместить кнопку, при нажатии на которую будет выполняться расчет. Это общее правило Delphi: для выполнения той или иной процедуры должно произойти какое-то событие – щелчок по кнопке, выбор пункта меню, истечение заданного промежутка времени и т.д. Компонент "Кнопка" называется Button (

) и находится на закладке Standard. У кнопки нужно задать свойство Caption – это надпись на ней. Чтобы одна из букв на кнопке работала как горячая клавиша, перед ней надо поставить символ &. Например, если в Caption записано "&Расчет", буква "Р" станет подчеркнутой и на кнопку можно будет нажать комбинацией клавиш Alt+Р. Цвет кнопки поменять нельзя, он устанавливается в Windows.

В результате ваша форма должна принять вид, показанный на рис. 2.

Рис. 2 – Вид формы.


4. События

Предоставленные сами себе, события имеют

тенденцию развиваться от плохого к худшему

Из законов Мэрфи

Итак, нам нужно, чтобы при нажатии на кнопку выполнялась процедура расчета. Для этого нужно в инспекторе объектов перейти на закладку Events (События) и найти событие OnCLick (по щелчку). Очень важно: проверьте, что текущим компонентом является именно кнопка, иначе вы "повесите" событие на щелчок по форме или полю ввода, что, конечно, неправильно. Пока в OnClick ничего не написано. Дважды щелкните мышкой в этом пустом поле. Delphi автоматически создаст заготовку процедуры расчета: заголовок и BEGIN… END. Остальное надо будет писать самим. Заготовка должна выглядеть следующим образом:

procedure TForm1.Button1Click(Sender: TObject);

begin

end;

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

Собственно расчет ничем не отличается от обычного Pascal:

VAR a,b,c:REAL;

c:=SQR(a+b);

Весь вопрос в том, как введенные пользователем в поля ввода числа попадут в переменные a и b и каким образом отобразить на экране значение переменной с. Делается это так:

a:=StrToFloat(LabeledEdit1.Text);

b:=StrToFloat(LabeledEdit2.Text);

c:=SQR(a+b);

Label1.Caption:=FoatToStr(c);

Что же здесь написано? Во-первых, из программы можно обратиться к любому компоненту по имени. Во-вторых, чтобы получить доступ к свойству компонента, достаточно написать название этого свойства через точку после имени самого компонента. Следовательно, запись LabeledEdit1.Text означает обращение к содержимому поля ввода LabeledEdit1, то есть к тому самому введенному пользователем тексту. Наконец, чтобы преобразовать текстовую строку (ведь свойство Text, как мы знаем, имеет тип STRING) в вещественное число, используется встроенная функция StrToFloat. Таким образом, в переменные a и b занесутся числа, введенные в поля ввода на форме. Результат расчета преобразуется из вещественного числа в текст (функция FloatToStr) и этот текст записывается в свойство Caption объекта Label1. Окончательный вид нашей процедуры таков:

procedure TForm1.Button1Click(Sender: TObject);

var a,b,c:real;

begin

a:=StrToFloat(LabeledEdit1.Text);

b:=StrToFloat(LabeledEdit2.Text);

c:=SQR(a+b);

Label1.Caption:=FoatToStr(c)

end;

Все, программу можно запускать. Жмите F9 и проверяйте ее работу. Ваша программа будет запущена как отдельное приложение, ее значок появится в панели задач. В отличие от Pascal программа автоматически не закрывается, вы сами должны завершить ее работу (закрыть ее окно). Вы не сможете редактировать исходный текст программы, если она запущена, поэтому не забывайте прекращать работу программы. Если ваше творение зависло, переключитесь в Delphi и снимите задачу комбинацией клавиш Ctrl+F2.

Кстати, вы сможете запускать программу и без Delphi – при компиляции на диске создается независимый exe-файл.

5. Обработка ошибок

Если за ошибку в расчете отвечает больше

одного человека, виноватых не найти.

Из законов Мерфи

Наша программа страдает существенным недостатком: если в поле ввода вместо числа ввести, скажем, "Вася", программа "свалится" с выдачей сообщения об ошибке (проверьте!) Оно и понятно – функция FloatToStr не может преобразовать "Васю" в вещественное число. В Delphi реализован очень элегантный механизм реакции на ошибки в программе при помощи оператора TRY..EXCEPT..END. Вот его общий вид:

TRY

здесь может произойти ошибка

EXCEPT

эти команды выполняются, если ошибка произошла

END;

Применим данный оператор в нашей процедуре:

procedure TForm1.Button1Click(Sender: TObject);

var a,b,c:real;

begin

try

a:=StrToFloat(LabeledEdit1.Text);

b:=StrToFloat(LabeledEdit2.Text);

c:=SQR(a+b)

except

Label1.Caption:='Неверные данные';

Exit

end;

Label1.Caption:=FoatToStr(c)

end;

Оператор Exit вызывает досрочный выход из всей процедуры. Если бы его не было, оператор Label1.Caption:=FoatToStr(c) выполнятся бы в любом случае, так как он никак не связан с оператором try.

6. Ввод – вывод массивов данных

Не позволяйте фактам вводить вас в заблуждение.

Из законов Мэрфи

Как быть, если результатом работы вашей программы является не один ответ, а целый массив данных? Например, нужно рассчитать значения функции f(x) при х, меняющемся от 0 до 1 с шагом 0.1 или вычислить сумму нескольких чисел, причем заранее неизвестно, сколько их будет.

Для ввода и вывода переменного числа данных удобно использовать компонент Memo, который находится на закладке Standard (

). Главное его свойство – динамический массив текстовых строк Lines. По умолчанию в нем записана одна строчка – "Memo1". При помощи инспектора объектов уберите весь текст из свойства Lines, чтобы "Memo1" не маячило на экране. Для этого щелкните мышью по кнопке с троеточием рядом с Lines – (TStrings) для открытия окна текстового редактора.

Свойство Lines доступно из программы. С ним можно выполнять следующие основные операции:

Memo1.Lines.Clear – полностью очистить все строки;

Memo1.Lines.Add(s) – добавить текстовую строку s в список, отображаемый на экране.

Для обращения к строке с номером I нужно использовать запись Memo1.Lines[i].

7. Пример: расчет синуса

В военное время значение синуса может достигать четырех.

Армейская мудрость.

Решим задачу вычисления значений функции sin(x) при х, меняющемся от a до b с шагом h. Для ввода трех исходных данных (a,b и h) будем использовать привычные компоненты LabeledEdit, а для вывода результата – компонент Memo. Форма должна выглядеть так, как показано на Рис. 3. Чтобы у компонента Memo отображалась вертикальная полоса прокрутки, установите его свойство ScrollBars в значение ssVertical. Свойство ReadOnly этого же компонента надо установить в True, чтобы защитить информацию в нем от изменения пользователем (из программы ее все равно можно будет менять).

Рис. 3 - Вид формы для вычисления функции.

Теперь напишем процедуру, выполняющуюся при щелчке по кнопке "Расчет". Выделяем кнопку на форме, в инспекторе объектов переходим на закладку Events и дважды щелкаем мышкой в поле OnClick. На экране отобразится заготовка процедуры.

Прежде всего надо считать введенные в поля ввода данные и проверить их на корректность. Заведем три переменные Xmin, Xmax и h типа REAL для хранения введенных данных. Следует ясно понимать, что сами по себе переменные с компонентами на форме никак не связаны и значения, введенные пользователем, в переменных автоматически никак оказаться не могут. Поэтому нужно написать (подчеркнуты строки, которые пишет сам Delphi):