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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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