Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_Delphi_Ч1.doc
Скачиваний:
7
Добавлен:
02.11.2018
Размер:
2.38 Mб
Скачать

Реализация проекта «Организация разветвлений»

Новый проект мы создадим на основе проекта, созданного для предыдущей лабораторной работы. Откройте новый проект, удалите в нем форму и модуль, и добавьте вместо них разработанную на прошлой лабораторной работе форму и ее модуль. Сохраните модуль формы под именем UnitIfCase, воспользовавшись функцией меню File->SaveAs, а форме присвойте имя frmIfCase. В заголовке формы напишите текст «Программирование разветвлений».

      1. Разработка интерфейса проекта

Измените интерфейс формы в соответствии с рисунком 4.8. Его отличие от предыдущего состоит только в том, что появился список контрольных примеров, который реализован с помощью компонента ListBox. Расположите такой компонент на форме и назовите его lstVariant.

Рисунок 4.37 – Интерфейс проекта

Компоненты для работы со списками

При решении многих задач информацию, предоставляемую пользователю компьютера, удобно представлять в виде списков. Для вывода списков можно использовать различные компоненты, но наиболее распространенные из них – это ListBox и ComboBox. Эти компоненты похожи, основное отличие заключается в том, что содержимое второго из них можно увидеть только тогда, когда список раскрывается, а в обычном режиме показывается только текстовая строка, куда переносится выбранная из списка запись.

Содержание списков определяется свойством Items, значением которого является набор строк.

В нашем примере это свойство должно быть представлено строками:

Вещественные корни

Комплексные корни

Чисто мнимые корни

Линейное уравнение

Любое решение

Нет решений

Ниже мы напишем процедуры, которые будут реагировать на выбор элемента в списке.

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

Группа создается следующим образом. Вначале устанавливается компонент RadioGroup, представляющий собой рамку для размещения кнопок. Затем в свойство Items этого компонента заносится список предполагаемых вариантов выбора. Для каждого варианта автоматически создается свой компонент RadioButton, который размещается в рамке. Под свойством Items здесь понимается набор компонент RadioButton, а не надписи возле компонент. Для доступа к тексту, выводимому возле кнопки с определенным номером можно использовать, например, такую цепочку обращений group1.Items.Strings[0], где group1- имя компонента.

Компонет RadioGroup имеет также свойство itemIndex, значение которого соответствует номеру выбранной кнопки. Кнопки нумеруются, начиная с нуля. Первоначально этому индексу присваивается значение -1, это означает, что ни одна из кнопок не включена.

Процедуры обработки событий выбора из списка

Событие выбора из списка происходит тогда, когда путем нажатия на левую кнопку мыши осуществляется выбор строки списка. Такое же событие происходит, когда с помощью клавиш управления курсором осуществляется переход к последующей или предыдущей стоке списка. Имя этого события – onClick.

Процедуры обработки события onClick для списков - это процедуры с разветвлениями. В этих процедурах выполняемые действия зависят от выбора строки списка. Возможны различные способы организации этих процедур.

Первый способ состоит в том, что для выбора используется номер выбранной строки, доступ к которому возможен через свойство списка ItemIndex. Для организации разветвлений в процедуре в этом случае можно использовать инструкцию case, в которой будет анализироваться номер выбранной строки. Ниже приведен фрагмент тела процедуры, в котором реализован такой подход для задания значений коэффициентов квадратного уравнения в зависимости от выбранного варианта контрольного примера.

case lstVariant.ItemIndex of

0: //вещественные корни

setKoef(0.5,3,2.5);

1: //комплексные корни

setKoef(0.25,3,25);

2: //чисто мнимые корни

end;

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

Другой способ состоит в том, что процедура анализирует строки списка. Доступ к выбранной строке возможен через свойство Items списка, которое возвращает массив строк списка, и индекс выбранной строки ItemIndex. В этом случае инструкция case неприменима, так как строка не относится к порядковым типам. Поэтому для организации разветвлений используется цепочка операторов if.

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

var text:String;

begin

text := lstVariant.Items[lstVariant.ItemIndex];

if text='Вещественные корни'

then setKoef(0.5, 3, 2.5)

else if text='Комплексные корни'

then setKoef(0.25, 3, 25)

…;

end;

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

Создайте шаблон процедуры обработки события onClick для списка lstVariant и напишите тело процедуры одним из рассмотренных выше способов. Коэффициенты, обеспечивающие получение требуемого варианта подберите сами.

Процедуру setKoef мы уже использовали в предыдущей работе, подобную процедуру следует написать и в данном проекте.

Проверьте работу созданных процедур.