Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.12.2011, 18:49   #1
Rik_Igle
Пользователь
 
Регистрация: 03.12.2011
Сообщений: 10
Вопрос Ошибка в подсчете

Помогите найти ошибку в коде. Данной код считает, или по крайней мере должен, интерполяционный полином Лагранжа. Он работает но ответ неверный.
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, XPMan, Grids, ExtCtrls, Math;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Edit1: TEdit;
    Label1: TLabel;
    XPManifest1: TXPManifest;
    Button1: TButton;
    Button2: TButton;
    StringGrid2: TStringGrid;
    StringGrid3: TStringGrid;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  X,Y,Z,Mas:array of real;
  n,m,q,p:real;
  r:integer;
implementation

{$R *.dfm}
Function Lagrand(v:real):real;
var i,j,t,e:integer;
    Dob,Znam:real;
Begin
    SetLength(Mas,r);
    t:=0; Dob:=1;
 Znam:=1; Lagrand:=0;
   for i:=0 to r-1 do
     begin
       For j:=0 to r-2 do
        begin
          if (t = i) then t:= t+1;
          if (t > (r-1)) then exit;
          Dob:=Dob*(v-X[t]);
          Znam:=Znam*(X[i]-X[t]);
          t:=t+1;
        end;
        Mas[i]:=Y[i]*(Dob/Znam);
     end;

   for j:=0 to r-1 do
    Lagrand:= Lagrand(v)+ Mas[j];
end;

procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
    StringGrid1.Cells[1,0] :=  '  '+'X';
    StringGrid1.Cells[2,0] :=  '  '+'Y';
end;

procedure TForm1.Edit1Change(Sender: TObject);
Var i:integer;
begin
    r:=StrToInt(Edit1.Text);
    StringGrid1.RowCount:=r+1;
   for i := 1 to r do
    begin
    StringGrid1.Cells[0,i] :=  '  '+IntToStr(i);
    end;
    SetLength(X,r);
    SetLength(Y,r)
end;


procedure TForm1.Button1Click(Sender: TObject);
var i,k,j:Integer;
begin
SetLength(Z,3);
K:=0;
   For i:=1 to 3 do
        Z[i-1]:=StrToFloat(StringGrid2.Cells[1,i]);
            k:=0;
    For j:=1 to r do
    begin
        X[j-1]:=StrToFloat(StringGrid1.Cells[1,j]);
        Y[k]:=StrToFloat(StringGrid1.Cells[2,j]);
        k:=k+1;
    end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
begin
    for i:=0 to 2 do
    StringGrid3.Cells[1,i]:=FloatToStr(Lagrand(Z[i]));

end;

end.
Rik_Igle вне форума Ответить с цитированием
Старый 03.12.2011, 18:57   #2
SL1M_DOGG
Пользователь
 
Регистрация: 08.06.2009
Сообщений: 96
По умолчанию

Код:
 SetLength(Y,r)
так и должно быть без ";"?
SL1M_DOGG вне форума Ответить с цитированием
Старый 03.12.2011, 20:09   #3
Rik_Igle
Пользователь
 
Регистрация: 03.12.2011
Сообщений: 10
По умолчанию

Должно. Но суть от этого не меняется.
Rik_Igle вне форума Ответить с цитированием
Старый 03.12.2011, 21:14   #4
Skalp
Пользователь
 
Регистрация: 01.12.2011
Сообщений: 52
По умолчанию

Если код компилируется, это только значит, что синтаксических ошибок в коде нет, но это не значит, что код верный.
Skalp вне форума Ответить с цитированием
Старый 03.12.2011, 21:58   #5
Rik_Igle
Пользователь
 
Регистрация: 03.12.2011
Сообщений: 10
По умолчанию

Так я и хочу, что бы мне помогли разобраться его исправить.
Rik_Igle вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Простая задача о подсчете чисел AlexP777 Паскаль, Turbo Pascal, PascalABC.NET 1 18.10.2011 11:52
Интегрирование(ошибка при подсчете) Erwin Общие вопросы C/C++ 1 03.05.2011 19:43
при подсчете хеш-суммы ошибка Integer Overflow. как обойти? Человек_Борща Общие вопросы Delphi 2 09.02.2011 11:20
Неисправность в подсчете символов в строке(С++) allmax Помощь студентам 3 17.01.2010 16:06
исправить в задаче ощибку при подсчете суммы ряда пыхонин филипп Помощь студентам 1 05.01.2009 13:12