Задание
Используя функцию разработать программу, содержащую: процедуру с открытыми параметрами формирования массива X; процедуру с открытыми параметрами формирования массива Y значений функции начиная с X0 и приращением dX,; процедуру с открытыми параметрами вывода результатов в форме таблицы значений (№, Х, У); процедуру с открытыми параметрами вывода результатов в обратном порядке; процедуры контроля ввода данных;
Задание выполнить с использованием различных операторов повторений в двух вариантах: 1 - для постоянного количества элементов массивов; 2 – для переменного количества элементов массивов.
Алгоритмы нелинейных процедур
Схема алгоритма. Формирование массива Mx
procedure Cr_Mx(Str_Ed, Str_d : string; Var MM: T_Mxy)
Схема алгоритма. Формирование массива My
procedure Cr_My(Mx: T_Mxy; var My: T_Mxy; n: real )
Листинг модуля с открытыми параметрами
unit Koposova_Pr5;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls, Pr_func1; // добавлен модуль Pr_func
type
TForm1 = class(TForm)
L_inf1: TLabel; // Назначение программы
LE1: TLabeledEdit; // ввод X,dX,A,n
LE2: TLabeledEdit;
LE3: TLabeledEdit;
LE4: TLabeledEdit;
L_Out: TLabel; //Вывод Y
L_inf3: TLabel; //Инструкция
L_inf4: TLabel; //Инструкция
L_Mx: TLabel;
BTN1: TBitBtn; //Кнопка вычислить
L_My: TLabel;
BTN2: TBitBtn; // Кнопка сброс
L_inf5: TLabel; //вывод результата
procedure FormActivate(Sender: TObject);
procedure LE1KeyPress(Sender: TObject; var Key: Char);
procedure LE2KeyPress(Sender: TObject; var Key: Char);
procedure LE3KeyPress(Sender: TObject; var Key: Char);
procedure LE4KeyPress(Sender: TObject; var Key: Char);
procedure FormClick(Sender: TObject);
procedure BTN2Click(Sender: TObject);
procedure BTN1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
inf3='1) Введите числовые значения для A,X,n,dX.' + #10#13 + 'после шелкните по форме.'; //Инструкция
inf4='2) Нажмите кнопку "Вычислить!"'; //инструкция
m = 15; //количество элементов массива
type
T_Mxy = array [0..m]of Real; //тип массива
var A,n:Real;
Mx,My: T_Mxy; // переменная массива
procedure TForm1.FormActivate(Sender: TObject);
const
inf1='Демонстрация вычисления' + #10#13 + 'Y=(A*X^n)-POWER(A-X^n)';
// Инф. сообщ.
inf2='Инструкция'; // инструкция
begin
L_inf1.Caption:= inf1; // Инф.сообщ.
L_inf3.Caption:= inf2; // Инструкция
L_inf4.Caption:= inf3; // Инструкция
L_inf5.Caption:='№'+#9+'X'+#9+'Y'; // названия столбцов вывода резултытов
end;
procedure TForm1.LE1KeyPress(Sender: TObject; var Key: Char);
begin
Inp_Key(Key,LE1.Text); //Вызов процедуры из Pr_func
end;
procedure TForm1.LE2KeyPress(Sender: TObject; var Key: Char);
begin
Inp_Key(Key,LE2.text); //Вызов процедуры из Pr_func
end;
procedure TForm1.LE3KeyPress(Sender: TObject; var Key: Char);
begin
Inp_Key(Key, LE3.Text); //Вызов процедуры из Pr_func
end;
procedure TForm1.LE4KeyPress(Sender: TObject; var Key: Char);
begin
Inp_Key(Key,LE4.Text); //Вызов процедуры из Pr_func
end;
procedure TForm1.FormClick(Sender: TObject);
begin
L_inf4.Caption:= inf4; // инструкция
end;
procedure TForm1.BTN1Click(Sender: TObject);
var i: Byte;
begin
L_Out.Caption:=''; // очистка поля вывода
if LE1.Text=''
then begin
ShowMessage('Введите X!'); //вывод сообщения при пустом поле
Exit
end;
if LE2.Text=''
then begin
ShowMessage('Введите dX!'); //вывод сообщения при пустом поле
Exit
end;
if LE4.Text<>''
then n:= StrToFloat(LE4.Text) //преобразование в число
else begin
ShowMessage('Введите n!'); //вывод сообщения при пустом поле
Exit
end;
if LE3.Text<>''
then A:=StrToFloat(LE3.Text) //преобразование в число
else begin
end;
ShowMessage('Введите A!'); //вывод сообщения при пустом поле
Exit
end;
procedure Cr_Mx(x,dx:integer;Var MM:T_Mx);
var i:integer;
begin
MM[0]:=x;
For i:=1 to High(MM) do
MM[i]:=MM[i-1]+dx;
end;
Procedure Cr_My(a:real;Mx:T_Mx;n:integer;Var MM:T_My);
var i:integer;
begin
for i:=0 to High(MM) do
MM[i]:=Fdy(a,Mx[i],n);
end;
Cr_Mx(LE1.Text,LE2.Text,Mx); //вызов процедуры формирования массива X
Cr_My(Mx,My,A); //вызов процедуры формирования массива Y
for i:= 0 to High(Mx) do //Цикл вывода значений X,Y
L_Out.Caption:=L_Out.Caption + IntToStr(i+1)+#9+
FloatToStrF(Mx[i],ffGeneral,5,3)+#9+
FloatToStrF(My[i],ffGeneral,5,3)+#13;
L_inf4.Caption:='3) Для повтора, нажмите "Сброс!"'; // инструкция
end;
procedure TForm1.BTN2Click(Sender: TObject);
begin
LE1.Text:= ''; //опустошение полей
LE2.Text:= '';
LE3.Text:= '';
LE4.Text:= '';
L_Out.Caption:= '';
L_inf4.Caption:= inf3; //вывод начала инструкции заново
end;
end.