IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> метод ломаных, правильный ли алгоритм
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 22
Пол: Мужской
Реальное имя: alex

Репутация: -  0  +


почему-то выводится 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.




--------------------
лишь утратив всё, мы обретаем свободу...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


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

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



--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






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

А вообще - неплохо бы узнать, какие значения вводятся в Edit-ы...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






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

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

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


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

edit2=-1
edit3=1
edit4=100
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 28.03.2024 19:05
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name