Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.11.2016, 15:57
Tupiy Tupiy вне форума
Прохожий
 
Регистрация: 13.11.2016
Сообщения: 9
Версия Delphi: Delphi 2010
Репутация: 10
Печаль подключить модуль

Вечер добрый ребят, помогите пожалуйста подключить модуль функции чтобы работали функции 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.
работа.rar
Ответить с цитированием
  #2  
Старый 13.11.2016, 21:57
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

не вижу кода функций S(x) и Y(x)
Ответить с цитированием
  #3  
Старый 14.11.2016, 09:02
Tupiy Tupiy вне форума
Прохожий
 
Регистрация: 13.11.2016
Сообщения: 9
Версия Delphi: Delphi 2010
Репутация: 10
По умолчанию

Куда и как прописать их!?
Ответить с цитированием
  #4  
Старый 14.11.2016, 09:11
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Код:
unit Unit1;
...
{$R *.dfm}
uses
   Unit2;
...
Ответить с цитированием
  #5  
Старый 14.11.2016, 11:04
Tupiy Tupiy вне форума
Прохожий
 
Регистрация: 13.11.2016
Сообщения: 9
Версия Delphi: Delphi 2010
Репутация: 10
По умолчанию

как прописать функции
Безымянный.jpg

Последний раз редактировалось Tupiy, 14.11.2016 в 12:41.
Ответить с цитированием
  #6  
Старый 14.11.2016, 12:43
Tupiy Tupiy вне форума
Прохожий
 
Регистрация: 13.11.2016
Сообщения: 9
Версия Delphi: Delphi 2010
Репутация: 10
По умолчанию

как прописать его их?*
Безымянный.png
Ответить с цитированием
  #7  
Старый 14.11.2016, 12:51
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Примерно так, но поскольку кроме объявы нет самого тела функции типа fun, работать полностью (в положении Y(x)) это не будет
Вложения
Тип файла: zip срс5.zip (2.9 Кбайт, 1 просмотров)
Ответить с цитированием
  #8  
Старый 15.11.2016, 09:51
Tupiy Tupiy вне форума
Прохожий
 
Регистрация: 13.11.2016
Сообщения: 9
Версия Delphi: Delphi 2010
Репутация: 10
По умолчанию

а можешь кодом просто написать?
Ответить с цитированием
  #9  
Старый 15.11.2016, 10:05
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Код:
...
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  
Старый 15.11.2016, 10:29
Tupiy Tupiy вне форума
Прохожий
 
Регистрация: 13.11.2016
Сообщения: 9
Версия Delphi: Delphi 2010
Репутация: 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  
Старый 15.11.2016, 11:36
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Как раз то, это нужно для режима в положении радиоптисы на Y(x), но необходим для этой процедуры внятный первый параметр (f:fun), объявление его есть
Код:
Type
       fun = function(x : extended):extended; // Объявление типа функция
но, что должно происходить внутри этой конструкции, и главное, на выходе, не указано, не хватает тела функции
Ответить с цитированием
  #12  
Старый 15.11.2016, 11:49
Tupiy Tupiy вне форума
Прохожий
 
Регистрация: 13.11.2016
Сообщения: 9
Версия Delphi: Delphi 2010
Репутация: 10
По умолчанию

пример подобный вот
Код:
Тексты модуля 
Листинг 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  
Старый 15.11.2016, 12:02
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Вот и скармливайте вашей процедуре функции или sx() либо yx() в зависимости от выбора метки в RadioGroup1
Ответить с цитированием
  #14  
Старый 15.11.2016, 12:38
Tupiy Tupiy вне форума
Прохожий
 
Регистрация: 13.11.2016
Сообщения: 9
Версия Delphi: Delphi 2010
Репутация: 10
По умолчанию

я понять не могу как, я какую-то ересть делаю которая по 100 ошибок выдаёт, поэтому я и обращаюсь к вам, за помощью..
Ответить с цитированием
  #15  
Старый 15.11.2016, 17:20
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

А чего понимать, ведь подключено уже всё, только осталось провести инициализацию переменной m, хотя бы принудительно как m : word = 1;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:05.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter