![]()  | 
	
 
  | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Вечер добрый ребят, помогите пожалуйста подключить модуль функции чтобы работали функции  S(x), Y(x) сижу мучаюсь не знаю как подключить и как прописать одно в другое... 
		
	
		
		
			Код программы: Код: 
	unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Edit2: TEdit;
    Label3: TLabel;
    Edit3: TEdit;
    Label4: TLabel;
    Edit4: TEdit;
    Label5: TLabel;
    Button1: TButton;
    RadioGroup1: TRadioGroup;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
const
  xn = 0.1;
  xk = 0.5;
  h = 0.1;
  e = 0.0001;
var
  x, y, t, s: real;
  n: Integer;
begin
  Memo1.Clear;
  Memo1.Lines.Add('Результаты ст. гр. 5В011100 Гулов Е.В.');
  Memo1.Lines.Add('xn=0.1');
  Memo1.Lines.Add('xk=0.5');
  Memo1.Lines.Add('h=0.1');
  Memo1.Lines.Add('e=0.0001');
  x := xn;
  while x <= xk do
  begin
    n := 0;
    t := x;
    s := t;
    while Abs(t) / (2 * n + 1) > e do
    begin
      n := n + 1;
      t := -t * x * x;
      s := s + t / (2 * n + 1);
    end;
    y := arctan(x);
    Memo1.Lines.Add('При х=' + formatfloat('0.0', x) + ' сумма=' + formatfloat
        ('0.0000', s) + ' y=' + formatfloat('0.0000', y) + ' N=' + inttostr
        (n + 1));
    x := x + h;
  end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
memo1.Clear;
RadioGroup1.ItemIndex:=0;
end;
end.код модуля Код: 
	unit Unit2;
interface
uses StdCtrls, SysUtils;
   Type
       fun = function(x : extended):extended; // Объявление типа функция
             {Расчет таблицы функции f (табуляция функции)}
  procedure Tabl(f:fun;xn,xk:extended; m: word; Memo1 : TMemo);
implementation
  procedure Tabl;
     var x,y,h: extended;
         i : integer;
    begin
    x:=xn;  h:=(xn-xk)/m;
for i:=1 to m+1 do begin
     y:=f(x);
    Mem1.Lines.Add(' x='+FloatToStrf(x,fffixed,8,3)+
                                ' y='+FloatToStrf(y,fffixed,8,3));
        x:=x+h;
                               end;
     end;
end. | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 не вижу кода функций S(x) и Y(x) 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#3  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Куда и как прописать их!? 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#4  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Код: 
	unit Unit1;
...
{$R *.dfm}
uses
   Unit2;
... | 
| 
		 
			 
			#5  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 как прописать функции 
		
	
		
		
			Безымянный.jpg Последний раз редактировалось Tupiy, 14.11.2016 в 12:41.  | 
| 
		 
			 
			#6  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 как прописать его их?* 
		
	
		
		
			Безымянный.png  | 
| 
		 
			 
			#7  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Примерно так, но поскольку кроме объявы нет самого тела функции типа fun, работать полностью (в положении Y(x)) это не будет 
		
	
		
		
			 | 
| 
		 
			 
			#8  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 а можешь кодом просто написать? 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#9  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Код: 
	...
uses Unit2;
procedure TForm1.Button1Click(Sender: TObject);
var
  xn, xk, h, e, x, y, t, s: real;
  n: Integer;
  begin
  xn:= StrToFloat(Edit1.Text);//  0.1;
  xk:= StrToFloat(Edit2.Text);//0.5;
  h := StrToFloat(Edit3.Text);//0.1;
  e := StrToFloat(Edit4.Text);//0.0001;
  Memo1.Clear;
  Memo1.Lines.Add('Результаты ст. гр. 5В011100 Гулов Е.В.');
  Memo1.Lines.Add('xn='+ Edit1.Text);
  Memo1.Lines.Add('xk='+ Edit2.Text);
  Memo1.Lines.Add('h=' + Edit3.Text);
  Memo1.Lines.Add('e=' + Edit4.Text);
  if RadioGroup1.ItemIndex = 0 then
  begin
  x := xn;
  while x <= xk do
  begin
    n := 0;
    t := x;
    s := t;
    while Abs(t) / (2 * n + 1) > e do
    begin
      n := n + 1;
      t := -t * x * x;
      s := s + t / (2 * n + 1);
    end;
    y := arctan(x);
    Memo1.Lines.Add('При х=' + formatfloat('0.0', x) + ' сумма=' + formatfloat
        ('0.0000', s) + ' y=' + formatfloat('0.0000', y) + ' N=' + inttostr
        (n + 1));
    x := x + h;
  end;
  end else
    Tabl(nil {должна быть типа fun}  , xn, xk, 10 {для примера}, Memo1);
  end; | 
| 
		 
			 
			#10  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 эт значит не то? 
		
	
		
		
		
		
		
	
		
		
	
	
	Код: 
	 procedure Tabl(f:fun;xn,xk:extended; m: word; Memo1 : TMemo);
implementation
  procedure Tabl;
     var x,y,h: extended;
         i : integer;
    begin
    x:=xn;  h:=(xn-xk)/m;
for i:=1 to m+1 do begin
     y:=f(x);
    Mem1.Lines.Add(' x='+FloatToStrf(x,fffixed,8,3)+
                                ' y='+FloatToStrf(y,fffixed,8,3));
        x:=x+h;
                               end; | 
| 
		 
			 
			#11  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Как раз то, это нужно для режима в положении радиоптисы на Y(x), но необходим для этой процедуры внятный первый параметр (f:fun), объявление его есть 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	Код: 
	Type
       fun = function(x : extended):extended; // Объявление типа функция | 
| 
		 
			 
			#12  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 пример подобный вот 
		
	
		
		
			Код: 
	Тексты модуля 
Листинг 5.1 
unit matfu; 
interface 
uses StdCtrls, SysUtils; 
   Type 
       fun = function(x : extended):extended; // Объявление типа функция 
             {Расчет таблицы функции f (табуляция функции)} 
  procedure Tabl(f:fun;xn,xk:extended; m: word; Mem1 : TMemo); 
implementation 
  procedure Tabl; 
     var x,y,h: extended; 
         i : integer; 
    begin 
    x:=xn;  h:=(xn-xk)/m; 
for i:=1 to m+1 do begin 
     y:=f(x); 
    Mem1.Lines.Add(' x='+FloatToStrf(x,fffixed,8,3)+ 
                                ' y='+FloatToStrf(y,fffixed,8,3)); 
        x:=x+h; 
                               end; 
     end; 
end.  // Конец модуля matfu 
// программа 
unit Unit6; 
interface 
uses 
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  Dialogs, StdCtrls, Buttons, ExtCtrls, Matfu; 
type 
  TForm1 = class(TForm) 
    Label1: TLabel; 
    Label2: TLabel; 
    Label3: TLabel; 
    Label4: TLabel; 
    Edit1: TEdit; 
    Edit2: TEdit; 
    Edit3: TEdit; 
    Edit4: TEdit; 
    RadioGroup1: TRadioGroup; 
    Memo1: TMemo; 
    BitBtn1: TBitBtn; 
    BitBtn2: TBitBtn; 
    procedure FormCreate(Sender: TObject); 
    procedure BitBtn1Click(Sender: TObject); 
  private 
    { Private declarations } 
  public 
    { Public declarations } 
  end; 
var 
  Form1: TForm1; 
  xn,xk,e : extended; 
  m : word; 
implementation 
{$R *.dfm} 
  
function sx(x:extended):extended; 
var a,n,s : extended; 
     k : integer; 
begin 
    k:=-1;  a:=1;  n:=0; s:=1; 
  try 
         while (abs(a) > e) do begin 
              n:=n+1; 
              a:=-a*x/n;    
              s:=s+a; 
           end; 
       Result:=s; 
   except 
on EInvalidOp do   
               k:=MessageDlg('Неправильная операция с плавающей точкой. ’+  
                                        ’ Продолжить вычисления?',mtError,[mbYes,mbNo],0); 
on EOverFlow do  
               k:=MessageDlg('Переполнение при выполне-нии операции с’+ 
      ’ плавающей точкой! Продолжить вычисления?',mtError,[mbYes,mbNo],0); 
      else  
               k:=MessageDlg('Возникла неизвестная исключительная ситуация!’+ 
                                        ‘ Продолжить вычисления?',mtError,[mbYes,mbNo],0); 
   end; 
     case k of 
      mrYes : Result:=0; 
      mrNo  : Halt(1); 
      end;   
end; 
  
function yx(x:extended):extended; 
begin 
  Result:=exp(-x); 
end; 
  
procedure TForm1.FormCreate(Sender: TObject); 
begin 
  Memo1.Clear; 
  RadioGroup1.ItemIndex:=0; 
    Edit1.Text:='0'; 
    Edit2.Text:='2'; 
    Edit3.Text:='6'; 
    Edit4.Text:='0,001'; 
end; 
  
procedure TForm1.BitBtn1Click(Sender: TObject); 
begin 
  Memo1.Clear; 
        Memo1.Lines.Add('Лаб. раб. №6 ст. гр. 552003 Иванова А.А.'); 
     xn:=StrToFloat(Edit1.Text); 
        Memo1.Lines.Add(' xn='+FloatToStrF(xn,ffFixed,6,2)); 
     xk:=StrToFloat(Edit2.Text); 
        Memo1.Lines.Add(' xk='+FloatToStrF(xk,ffFixed,6,2)); 
     m:=StrToInt(Edit3.Text); 
        Memo1.Lines.Add(' h='+IntToStr(m)); 
     e:=StrToFloat(Edit4.Text); 
        Memo1.Lines.Add(' e='+FloatToStrF(e,ffFixed,8,5)); 
    case RadioGroup1.ItemIndex of 
     0 : begin 
          Memo1.Lines.Add('Расчет S(x)'); 
          Tabl(sx,xn,xk,m,Memo1); 
         end; 
     1 : begin 
          Memo1.Lines.Add('Расчет Y(x)'); 
          Tabl(yx,xn,xk,m,Memo1); 
         end; 
    end; 
end; 
end. там надо сделать S(x) Y(X) срс5.rar второй архив задание универа 5 работа если я как то не правильно объясняю, МУ-ЛР-АиОП_5В07030_ИС.rar Последний раз редактировалось Tupiy, 15.11.2016 в 11:55.  | 
| 
		 
			 
			#13  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Вот и скармливайте вашей процедуре функции или sx() либо yx() в зависимости от выбора метки в RadioGroup1 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#14  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 я понять не могу как, я какую-то ересть делаю которая по 100 ошибок выдаёт, поэтому я и обращаюсь к вам, за помощью.. 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#15  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 А чего понимать, ведь подключено уже всё, только осталось провести инициализацию переменной m, хотя бы принудительно как  m : word = 1; 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 |