русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2014-11-28; просмотров: 1443; Нарушение авторских прав


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

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

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

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

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

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

Вещественные корни Комплексные корни Чисто мнимые корни Линейное уравнение Любое решение Нет решений

 

 


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

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

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



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

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

Событие выбора из списка происходит тогда, когда путем нажатия на левую кнопку мыши осуществляется выбор строки списка. Такое же событие происходит, когда с помощью клавиш управления курсором осуществляется переход к последующей или предыдущей стоке списка. Имя этого события – 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 мы уже использовали в предыдущей работе, подобную процедуру следует написать и в данном проекте.

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

4.2.1.3 Процедуры обработки событий onKeyPress

Эти события возникают при нажатии клавиш клавиатуры во время ввода данных в текстовые поля. Процедуры обработки этих событий дают доступ к вводимому символу через параметр процедуры key.

На рисунке 4.9 приведен пример написания такой процедуры.

Рисунок 4.9 – Процедура обработки события onKeyPress

В списке параметров этой процедуры, помимо параметра Sender, есть параметр Key символьного типа, передаваемый по наименованию, о чем свидетельствует слово var перед именем параметра. Это означает, что если символ, передаваемый параметром key, в процедуре изменить, то это изменение сохранится после выхода из процедуры. Передаваемый символ можно вовсе удалить, если заменить его символом #0.

В процедуре приведенной на рисунке 4.9 анализируются символы, вводимые в текстовое поле edtA. Для анализа и изменения введенного символа используется процедура testRealKey, рассмотренная в пункте 4.1.3.2.

После обработки символа производится проверка, не является ли введенный символ, символом перевода строки. Если это так, то курсор переносится в поле edtB для ввода следующего коэффициента.

Для того чтобы проверить работу этой процедуры следует предварительно написать процедуру testRealKey. Так как эта процедура может использоваться и в других приложениях, то ее лучше разместить в дополнительном модуле unitDop, а в данном сделать на него ссылку в инструкции uses.

После того, как это будет сделано, напишите процедуры обработки событий onKeyPress для всех трех полей ввода коэффициентов. Отличаться они будут только тем, куда передается управление после нажатия клавиши «Enter». Проверьте работу созданных процедур.

4.2.1.4 Решение квадратного уравнения

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

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

Выше уже рассматривались некоторые из этих алгоритмов. На рисунке 4.1 изображен корневой алгоритм решения задачи, в котором анализируется значение коэффициента «а» и, в соответствии с его значением вызывается либо процедура решения линейного уравнения, либо процедура решения квадратного уравнения.

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

Схему алгоритма решения квадратного уравнения нужно разработать самостоятельно. Эта схема должна иметь две ветви, одна из которых обеспечивает вычисление и вывод значений вещественных корней, а другая – комплексных корней. Выбор ветви должен производиться на основании значения дискриминанта.

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

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

После этого можно запрограммировать решение линейного уравнения в соответствии с алгоритмом, представленным на рисунке 4.2. Его следует реализовать в виде процедуры с именем linUr. Это может быть процедура модуля, в которую в качестве параметров передаются коэффициенты «в» и «с». Выводить результаты следует в протокол выполненных расчетов, в качестве которого используется компонент TMemo.

Далее следует запрограммировать решение квадратного уравнения в соответствии с разработанной самостоятельно схемой алгоритма. Алгоритм следует реализовать в виде процедуры с именем kvUr. Это может быть процедура модуля, в которую в качестве параметров передаются коэффициенты «а», «в» и «с». В процедуре следует использовать обращение к написанной ранее функции вычисления дискриминанта. Выводить результаты следует в протокол выполненных расчетов, в качестве которого используется компонент TMemo.

Последней вспомогательной процедурой будет процедура считывания коэффициентов уравнения из компонентов TEdit формы. Процедуру getKoef мы уже использовали в предыдущей работе, подобную процедуру следует написать и в данном проекте.

Выполнив подготовительную работу, можно прейти к написанию процедуры обработки события onClick для кнопки «Найти корни». В этой процедуре следует реализовать алгоритм представленный на рисунке 4.1. Начало процедуры может быть таким же, как и в процедуре расчета по формуле в предыдущем проекте, но затем должно быть организовано разветвление. В ветвях должны быть обращения к процедуре решения линейного уравнения linUr и к процедуре решения квадратного уравнения kvUr.

Завершив написание процедур, проверьте работу проекта для всех контрольных примеров.

4.3 Содержание отчета

– Наименование работы.

– Цель работы.

– Краткое описание логического типа данных и правил записи логических выражений.

– Описание новых компонент, используемых в создаваемом проекте.

– Схема разработанного самостоятельно алгоритма решения квадратного уравнения.

– Тексты процедур, используемых в модуле формы с пояснениями в виде комментариев.

– Текст дополнительного модуля.

– Результаты тестирования проекта, в виде таблицы.

– Выводы.

4.4 Контрольные вопросы

– Характеристики логического типа данных и варианты его появления.

– Запись логических выражений и правила их вычисления.

– Основные логические операции и таблицы для вычисления результатов этих операций.

– Правила составления схем разветвляющихся алгоритмов.

– Инструкция if…then…else и ее варианты. Примеры.

– Инструкцияcase ofи пример ее использования

– Компонент List Box и его свойства.

– Событие on Key Press и его обработка.

– Объяснение текстов подпрограмм модуля и связей их с событиями и другими подпрограммами.

– Написать подпрограмму с разветвлениями по заданию преподавателя, например, функцию для определения максимального (минимального, среднего) из двух (трех) чисел.

– Написать подпрограмму вычисления стипендии в зависимости от статуса студента (бюджет или нет) и среднего балла.

5 Лабораторная работа № 5.
Построение циклов с инструкциями „while” и „repeat”

Цели работы:

– Ознакомиться с принципами использования циклов WhileиRepeat.

– Разработать проект, обеспечивающий решение математических задач численными методами.

5.1 Краткие теоретические сведения



<== предыдущая лекция | следующая лекция ==>
Программирование разветвлений | Циклические алгоритмы


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.378 сек.