Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ метод ломаных

Автор: _92 2.12.2007 2:20

почему-то выводится max: y=-4, x=1, хотя ведь для y=x^(2/3)*(x-5) max: y=0, x=0



unit Unit1;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls,
Buttons, Math;

type

{ TForm1 }

TForm1 = class(TForm)
Button1: TButton;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
GroupBox4: TGroupBox;
procedure Button1Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;

type
TMyData =
record
U: real;
J: real;
end;

var
Form1: TForm1;

var
a,b,L: real;
MyData: array of TMyData;

implementation

{ TForm1 }

function MyFunction(x:real): real;
begin
//power(x,2/3)*(x-5)
Result:=exp(ln(x*x)/3)*(x-5)
end;

function Peresechenie(i:integer; L:real): real;
begin
Peresechenie:=(MyData[i].J-MyData[i+1].J+L*(MyData[i].U+MyData[i+1].U))/(2*L)
end;

procedure InsertNew(X: real);
var
i,j: integer;
begin
i:=0;

while MyData[i].U<x do
inc(i);

SetLength(MyData,Length(MyData)+1);

for j:=Length(MyData)-1 downto i+1 do
begin
MyData[j].U:=MyData[j-1].U;
MyData[j].J:=MyData[j-1].J;
end;

MyData[i].U:=x;
MyData[i].J:=MyFunction(x)
end;

function MaxIndex: integer;
var
i,j: integer;
max: real;
begin
max:=MyData[0].J;

for i:=1 to Length(MyData)-1 do
begin
if MyData[i].J>max then
begin
max:=MyData[i].J;
j:=i
end
end;

MaxIndex:=j
end;

procedure TForm1.Button1Click(Sender: TObject);
var
Un,Un2: real;
i,k,N: integer;
begin
SetLength(MyData,2);

a:=StrToFloat(Edit2.Text);
b:=StrToFloat(Edit3.Text);
N:=StrToInt(Edit4.Text);

MyData[0].U:=a;
MyData[0].J:=MyFunction(MyData[0].U);
MyData[1].U:=b;
MyData[1].J:=MyFunction(MyData[1].U);

L:=abs(MyData[1].J- MyData[0].J)/abs(MyData[1].U-MyData[0].U);

k:=1;
i:=0;

while i<N do
begin
inc(i);
if k<Length(MyData) then
begin
Un:=Peresechenie(k-1,L);
Un2:=Peresechenie(k,L)
end;
InsertNew(Un);
InsertNew(Un2);
k:=MaxIndex
end;

Edit5.Text:=FloatToStr(MyData[k].U);
Edit6.Text:=FloatToStr(MyData[k].J)
end;


initialization

{$I unit1.lrs}

end.



Автор: Lapp 2.12.2007 3:19

М
Почему вопрос по Дельфи в разделе Паскаль??

Переношу в Дельфи


Автор: volvo 2.12.2007 3:46

Я бы все-таки в функции MaxIndex начальное значение J установил в 0, Дельфи же дает предупреждение, почему не обращаем внимание?

А вообще - неплохо бы узнать, какие значения вводятся в Edit-ы...

Автор: Гость 2.12.2007 17:58

Цитата(volvo @ 1.12.2007 23:46) *

Я бы все-таки в функции MaxIndex начальное значение J установил в 0, Дельфи же дает предупреждение, почему не обращаем внимание?

А вообще - неплохо бы узнать, какие значения вводятся в Edit-ы...


j:=0 - без изменений

edit2=-1
edit3=1
edit4=100