- •Методика разработки учебных программ в среде Delphi
- •1. Этапы разработки проекта
- •1.1. Анализ задания и декомпозиция задачи
- •Допущения, ограничения, соглашения
- •Требования к программному интерфейсу
- •Требования к пользовательскому интерфейсу
- •Формулировка общей задачи
- •Декомпозиция и формулировка частных задач
- •1.2. Постановка и реализация частных задач
- •1.3. Отладка и тестирование
- •2. Типовые требования тз на учебную разработку проекта
- •Допущения, ограничения и соглашения
- •Программный интерфейс
- •Пользовательский интерфейс
- •Формулировка задачи
- •Оформление программного кода
- •Декомпозиция и формулировка частных задач
- •Подготовка проекта
- •4. 2. Постановка и реализация частных задач Задача 1. Вывод информационного сообщения
- •Задача 2. Ввод исходных данных
- •Задача 3. Преобразование в числовые типы значений полей ввода
- •Процедура преобразования Строка–Целое число
- •Вызов процедуры
- •Задача 4. Вычисления и представление результата
- •4. 3. Тестирование проекта
- •Приложение 1. Элементы схем алгоритмов Обозначения основных элементов схем алгоритмов
- •Приложение 2. Листинг модуля
Задача 2. Ввод исходных данных
Исходные данные:
n – количество вычисляемых значений, глобальная переменная на уровне модуля, тип – целый;
X – глобальная переменная на уровне модуля, тип – целый;
dX – приращение, глобальная переменная на уровне модуля, тип – целый.
Соглашение: при вводе будем контролировать только соответствие вводимых символов алфавиту целых чисел.
Выбор компонентов: для всех переменных – компонент класса TLabeledEdit.
Выбор события: для всех компонентов – OnKeyPress.
Установить компонент TLabeledEdit для ввода n.
Переопределить свойства компонента.
Переименовать в LE_n.
Изменить свойство Положение метки LabelPosition на LpLeft.
Изменить размер шрифта метки на 10.
Назначить событие LE_nKeyPress и разработать код процедуры обработки события.
Протестировать результат, вводя недопустимые символы для алфавита целых типов.
Фрагмент листинга модуля.
type
TForm1 = class(TForm)
LInfo: TLabel; //Для информационного сообщения
LE_n: TLabeledEdit; //Для ввода n
procedure FormActivate(Sender: TObject); {Вывод информационного сообщения}
procedure LE_nKeyPress(Sender: TObject; var Key: Char); {Контроль ввода n}
...........................
implementation
..............................
//Контроль ввода n
procedure TForm1.LE_nKeyPress(Sender: TObject; var Key: Char);
//Проверка соответствия вводимого символа алфавиту целых чисел
// Key - вводимый символ
begin
If not (Key in ['0'..'9', '-', #8])
//несоответствие Key алфавиту вещественных чисел, #8 - <Backspace>
then key := #0 ; //подмена недопустимого Key пустым значением
end;
.................................
Аналогичные действия выполните для ввода и контроля переменных X и dX.
Блок-схему алгоритма Контроль ввода n поместите в отчёт.
Процедуры контроля ввода X и dX и их алгоритмы приводить в отчёте не следует, так как они аналогичны рассмотренной.
Задача 3. Преобразование в числовые типы значений полей ввода
Исходные данные: свойства Text компонентов LE_n, LE_X и LE_dX.
Разделим задачу на две подзадачи: разработка процедуры пользователя преобразования Строка–Целое число; вызов процедуры для определения значений переменных n, X, dX .
Процедура преобразования Строка–Целое число
Критическая ситуация может возникнуть при пустых значениях полей ввода или при синтаксической ошибке значения свойства Caption.
Соглашения.
Для преобразования Строка–Число используем процедуру
Val(S: string; var V; var Code: Integer), где
S – значение свойств Text компонентов LE_n или LE_X, или LE_dX;
V – числовое значение переменных, соответственно n или X, или dX;
Code – код ошибки преобразования, при Cod=0 – успешное
преобразование, при Cod > 0 – ошибка преобразования;
Решение оформим в виде процедуры
Inp_Int(LE: TLabeledEdit; var V, Flag: Integer) пользователя с формальными параметрами:
входной параметр: LE – компонент типа TLabeledEdit;
выходные параметры:
V – числовое значение переменной;
Flag - сигнал ошибки, если Cod > 0 то Flag:= 1, иначе Flag не определён – ошибки нет.
Код процедуры Inp_Int(LE: TLabeledEdit; var V, Flag: Integer).
//Преобразование строка – целое число
Procedure Inp_Int(L: TLabeledEdit; var V, Flag: Integer);
{LE - поле ввода переменной, тип - TLabeledEdit;
значение L.Text будет преобразовано в переменную V целого типа;
Flag=1 - сигнал об ошибке преобразования, если Flag не определён, то ошибки нет}
Var Cod : Integer; {код ошибки преобразования, при Cod=0 - успешное преобразование}
begin
Val(L.Text, V, Cod); //Преобразование строка-число
If Cod <> 0 //ошибка преобразования
then begin //сообщение об ошибке
ShowMessage('Поле ' + LE.EditLabel.Caption + ' ?????');
Flag:= 1;
end;
end;