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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.05.2012, 22:57
qpmr qpmr вне форума
Прохожий
 
Регистрация: 12.12.2011
Сообщения: 27
Репутация: 10
По умолчанию Нахождение корней

Здравствуйте ,алгоритм задания на картинке , подскажите в чем ошибка .

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ExtCtrls, TeeProcs, TeEngine, Chart, Series;

type
  TForm1 = class(TForm)
    Chart1: TChart;
    BitBtn1: TBitBtn;
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Series1: TLineSeries;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var

  Form1: TForm1;

implementation

{$R *.dfm}

type
t=function(x:extended):extended ;
function y(x:extended):extended;
begin
y:=2*x*x+x;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
edit1.clear;
edit2.clear;
edit3.clear;
edit4.clear;
label5.caption:='';
end;

procedure TForm1.Button1Click(Sender: TObject);
var x1,x0,a,b,shag,c,pog,x:extended; 
begin
  a:=strtofloat(edit1.text);
  b:=strtofloat(edit2.text);
  shag:=strtofloat(edit3.text);
  pog:=strtofloat(edit4.text);
    series1.clear;
    x0:=a;  x1:=b;
    x:=(x0+x1)/2;
    repeat
    series1.AddXY(x0,y(x0),'',clblue);
    x0:=x0+0.1;   // шаг
    repeat
    series1.AddXY(x1,y(x1),'',clred);
     x1:=x1+0.1;
    if (y(x0))*(y(x))>0 then  (x1=x)  else
     (x0=x)  ;

     c:=(x0+x1)/2;
     label5.caption:=+floattostr(c);
     until (x1-x0)<0.000000001 ;
end;
       end.
Изображения
Тип файла: jpg 22.JPG (84.0 Кбайт, 19 просмотров)

Последний раз редактировалось qpmr, 24.05.2012 в 23:21.
Ответить с цитированием
  #2  
Старый 24.05.2012, 22:58
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Смотря каково её проявление.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #3  
Старый 24.05.2012, 22:59
qpmr qpmr вне форума
Прохожий
 
Регистрация: 12.12.2011
Сообщения: 27
Репутация: 10
По умолчанию

[Error] Unit1.pas(71): Statement expected, but expression of type 'Boolean' found
При задании условия ..
Ответить с цитированием
  #4  
Старый 24.05.2012, 23:03
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Код:
 if (y(x0))*(y(x))>0 then  (x1=x) and (y(x1)=y(x)) else
     (x0=x) and (y(x0)=y(x)) ;
Вот этого чтоли?
Ну так конечно. And - логическа операция, а не объединение действий.
Вообще смысл не очень понял. Перевожу написанное на русский язык:
"Если y(x0)*y(x) больше 0 то (x1 равно x) ^ (y(x1) равно y(x)) иначе ..."
Ну равно x и y(x1), компьютеру-то что делать?
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #5  
Старый 24.05.2012, 23:07
Аватар для cotseec
cotseec cotseec вне форума
Активный
 
Регистрация: 16.07.2008
Сообщения: 353
Версия Delphi: D7,TDE06,RAD09
Репутация: 1443
По умолчанию

предположу, что где-то тут, что-то не так...
Код:
if (y(x0))*(y(x))>0 then  (x1=x) and (y(x1)=y(x)) else
     (x0=x) and (y(x0)=y(x)) ;
предположу, что ТС вовсе не хочется узнать значение логического выражения
Код:
 (x1=x) and (y(x1)=y(x))
или
Код:
(x0=x) and (y(x0)=y(x))
а что на самом деле надо?
__________________
Понять, что хочет заказчик - бесценно, ведь он платит MasterCard
Ответить с цитированием
  #6  
Старый 24.05.2012, 23:09
qpmr qpmr вне форума
Прохожий
 
Регистрация: 12.12.2011
Сообщения: 27
Репутация: 10
По умолчанию

так ведь в алгоритме именно так и написано ..
Ответить с цитированием
  #7  
Старый 24.05.2012, 23:12
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Так надо отличать в алгоритме условия и нахождение значения переменных.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #8  
Старый 24.05.2012, 23:18
qpmr qpmr вне форума
Прохожий
 
Регистрация: 12.12.2011
Сообщения: 27
Репутация: 10
По умолчанию

А как отличить , по алгоритмам мы еще не писали ничего , получается функции нужно поубирать ?
Ответить с цитированием
  #9  
Старый 27.05.2012, 11:09
qpmr qpmr вне форума
Прохожий
 
Регистрация: 12.12.2011
Сообщения: 27
Репутация: 10
По умолчанию

Вот поправил , но не рисует почему-то..

Последний раз редактировалось qpmr, 31.05.2012 в 22:24.
Ответить с цитированием
  #10  
Старый 31.05.2012, 22:25
qpmr qpmr вне форума
Прохожий
 
Регистрация: 12.12.2011
Сообщения: 27
Репутация: 10
По умолчанию

Наконец удалось . частично . Считает только один корень и почему -то не выводит в chart !
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, TeEngine, Series, TeeProcs, Chart;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Chart1: TChart;
    Series1: TLineSeries;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

Function f(x: extended): extended;
Begin
f:=x*x+x+1;
End;

procedure TForm1.Button1Click(Sender: TObject);
var a,b,e,c,x,h: extended;

begin
series1.clear;
 a:=strtofloat(edit1.Text);
 b:=strtofloat (edit2.Text);
 e:=strtofloat(edit4.Text);
 h:=strtofloat(edit3.text);
 repeat
   c:=(a+b)/2;
   if f(a)*f(c)>0 then

       a:=c
         else
         b:=c;

   until abs(b-a)<e ;
    label1.caption:='Корень = '+floattostr(c);
x:=с;
repeat
x:=x+h;
  series1.AddXY(x,f(x));
   until abs(b-a)>=e;
  end;


procedure TForm1.FormCreate(Sender: TObject);
begin
edit1.Clear;edit2.Clear;edit3.Clear;edit4.Clear;

end;

end.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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