- •Методика разработки учебных программ в среде Delphi
- •1. Этапы разработки проекта
- •1.1. Анализ задания и декомпозиция задачи
- •Допущения, ограничения, соглашения
- •Требования к программному интерфейсу
- •Требования к пользовательскому интерфейсу
- •Формулировка общей задачи
- •Декомпозиция и формулировка частных задач
- •1.2. Постановка и реализация частных задач
- •1.3. Отладка и тестирование
- •2. Типовые требования тз на учебную разработку проекта
- •Допущения, ограничения и соглашения
- •Программный интерфейс
- •Пользовательский интерфейс
- •Формулировка задачи
- •Оформление программного кода
- •Декомпозиция и формулировка частных задач
- •Подготовка проекта
- •4. 2. Постановка и реализация частных задач Задача 1. Вывод информационного сообщения
- •Задача 2. Ввод исходных данных
- •Задача 3. Преобразование в числовые типы значений полей ввода
- •Процедура преобразования Строка–Целое число
- •Вызов процедуры
- •Задача 4. Вычисления и представление результата
- •4. 3. Тестирование проекта
- •Приложение 1. Элементы схем алгоритмов Обозначения основных элементов схем алгоритмов
- •Приложение 2. Листинг модуля
Приложение 2. Листинг модуля
unit Unit1;
{Вычислить n значений выражения Y = X/(X-5) начиная с X с шагом dX.
Вывести значения X и Y}
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
L_Info: TLabel; //Для информационного сообщения
LE_n: TLabeledEdit; //Для n
LE_X: TLabeledEdit; //Для X
LE_dX: TLabeledEdit; //Для dX
Button1: TButton;
L_Out: TLabel; //Для вывода X, Y
procedure FormActivate(Sender: TObject); //Вывод информационного сообщения
//Контроль ввода n
procedure LE_nKeyPress(Sender: TObject; var Key: Char);
procedure LE_XKeyPress(Sender: TObject; var Key: Char);
procedure LE_dXKeyPress(Sender: TObject; var Key: Char);
procedure Button1Click(Sender: TObject);
end;
var Form1: TForm1;
implementation
{$R *.dfm}
Var n, X, dX: Integer;
//Вывод информационного сообщения
procedure TForm1.FormActivate(Sender: TObject);
begin
L_Info.Caption:= 'Вычисление n значений Y = X/(X-5) от X c шагом dX';
end;
//Контроль ввода 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
procedure TForm1.LE_XKeyPress(Sender: TObject; var Key: Char);
begin
If not (Key in ['0'..'9', '-', #8])
then key := #0 ;
end;
//Контроль ввода dX
procedure TForm1.LE_dXKeyPress(Sender: TObject; var Key: Char);
begin
If not (Key in ['0'..'9', '-', #8])
then key := #0 ;
end;
//Преобразование строка-число
Procedure Inp_Int(LE: TLabeledEdit; var V, Flag: Integer);
{LE - поле ввода переменной, тип - TLabeledEdit;
значение LE.Text будет преобразовано в переменную V целого типа;
Flag=1 - сигнал об ошибке преобразования, если Flag не определён, то ошибки нет }
Var Cod : Integer; //код ошибки преобразования, при Cod=0 - успешное преобразование
begin
Val(LE.Text, V, Cod); //Преобразование строка-число
If Cod <> 0 //ошибка преобразования
then begin //сообщение об ошибке
ShowMessage('Поле ' + LE.EditLabel.Caption + ' ?????');
Flag:= 1;
end;
end;
//Вычисления и вывод результатов
Procedure Out(L: TLabel; n, X, dX: Integer);
//Вычисление и вывод X, Y; L: TLabel - куда выводить
Var I: Byte; //счётчик цикла
Y: Real;
begin
L.Caption := ' '; //очистка метки вывода
L.Caption := ' X Y' + #10#13 ; //заголовок вывода
For I:= 1 to n do
begin
If X <> 5 //Х =0 - деление на 0
then begin
Y:= X/(X - 5); //вывод X, Y
L.Caption := L.Caption + IntToStr(X) + ' ' +
FloatToStrF(Y, ffGeneral, 2, 5)+ #10#13;
end
//вывод X и сообщения о делении на 0
else L.Caption := L.Caption + IntToStr(X) + ' Деление на 0'+ #10#13;
X:= X + dX;
end;
end;
// преобразование, вычисление и вывод
procedure TForm1.Button1Click(Sender: TObject);
var Flag: Integer;
begin
Inp_Int(LE_n, n, Flag); // преобразование в число n, X, dX
Inp_Int(LE_X, X, Flag);
Inp_Int(LE_dX, dX, Flag);
If Flag = 1 //в одной из Inp_Int ошибка преобоазования, досрочное завершение
then exit;
Out(L_Out, n, X, dX); //вывод X, Y
end;
end.