| 
| 
 | Вопрос # 2 171/ вопрос открыт / | 
 |  Здраствуйте, уважаемые эксперты!
 В тупик зашел...
 Помогите решить данную задачу.
 
 необходимо вывести на экран таблицу значений функции Y(x) и ее разложения в ряд S(x) для x изменяющихся от xn до xk с шагом h=(xn-xk)/10.
 
 S(x)=1+3*x^2+..+(2*n+1)/n!*x^2*n
 
 Y(x)=1+2*x^2)*e^x^2
 
 Я чтото запутался код ниже, возможно не совсем правильный
 Приложение:Переключить в обычный режим unit Unit1; interface uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls; type  TForm1 = class(TForm)    Edit1: TEdit;    Edit2: TEdit;    Label1: TLabel;    Label2: TLabel;    Edit3: TEdit;    Edit4: TEdit;    Label3: TLabel;    Label4: TLabel;    Memo1: TMemo;    Button1: TButton;    procedure FormCreate(Sender: TObject);    procedure Button1Click(Sender: TObject);  private    { Private declarations }  public    { Public declarations }  end; var  Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject);beginEdit1.text:='0,1'; Edit2.text:='1'; Edit3.text:='14'; Edit4.text:='0,25'; Memo1.Clear;  end; procedure TForm1.Button1Click(Sender: TObject); var x1,x2,x,h,a,s:extended; N,k,c:integer; begin  x1:=StrToFloat(Edit4.Text); Memo1.Lines.Add(' x1='+Edit1.Text); x2:=StrToFloat(Edit2.Text); Memo1.Lines.Add(' x2='+Edit2.Text); N:=StrToInt(Edit3.Text); Memo1.Lines.Add(' N='+Edit1.Text); h:=StrToFloat(Edit4.Text);  Memo1.Lines.Add(' h='+Edit4.Text);  c:=-1; x:=x1; repeat a:=1; S:=1; for k:=1 to N do begin a:=(n-k)/10; s:=s+a; end;   +FloatToStrF(s,ffFixed,6,2)); x:=x+h; until x>x2; end;
|  |   Вопрос задал: Lexa.ak (статус: Посетитель)Вопрос отправлен: 7 декабря 2008, 15:36
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 14; последнее сообщение — 25 декабря 2008, 14:06; участников в обсуждении: 4. 
|   | Ученый (статус: 8-ой класс), 7 декабря 2008, 18:46 [#1]:А что именно не получается? Взял ваш код, проверил все вроде бы идет, только может результат не тот который вам нужен получается? |  
|   | Lexa.ak (статус: Посетитель), 7 декабря 2008, 22:08 [#2]:Результат не тот получаеться, я думаю что не правильно записал функцию и ее разложение в ряд. |  
|   | Мережников Андрей (статус: Абитуриент), 8 декабря 2008, 14:52 [#3]:а какого результата хочется получить, если в приведенном коде отсутствует собственно вычисление заданной функции S(x)??? Вместо приведенной функции вычисляется непонятное значение s:=s+a. |  
|   | Lexa.ak (статус: Посетитель), 8 декабря 2008, 16:30 [#4]:А подскажите как задать S(x) и как факториал записываеться? |  
|   | Вадим К (статус: Академик), 8 декабря 2008, 16:38 [#5]:факториал - это произведение всех натуральных от 1 до n n! = 1*2*3*.....(n-1)*n
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Мережников Андрей (статус: Абитуриент), 9 декабря 2008, 05:25 [#6]:Вы уверены, что разложение правильно записано? Я попробовал подставить в (2*n+1)/n! значение n=2, получается 5/2, а не 3 |  
|   | Lexa.ak (статус: Посетитель), 9 декабря 2008, 16:07 [#7]:Уверен. единственное что я не указал это: xn=0.1; xk=1; n=14 |  
|   | Мережников Андрей (статус: Абитуриент), 9 декабря 2008, 18:06 [#8]:Объявите массив kfc действительных чисел размером [1..13] (если n - фиксированное значение). Вычислите сначала коэффициенты и запишите в элементы этого массива. А затем, в цикле, пробегайте значения от xn до xk, подставляйте их в формулу и получите требуемый результат. S(x)=1+kfc[1]*x^2+...+kfc[n-1]*X^2*n. Для вычисления коэффициентов также можно воспользоваться циклом.
 |  
|   | Lexa.ak (статус: Посетитель), 16 декабря 2008, 18:24 [#9]:Да нет, массив здесь не причем.. Вычислил коффиценты вручную. 
 Только выдает ошибку Incompatible types: 'Integer' and 'Exteded'.
 В чем проблема, какой тип я не правильно указал?
 
 unit Unit3;
 
 interface
 
 uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;
 
 type
 TForm3 = class(TForm)
 Edit1: TEdit;
 Edit2: TEdit;
 Label1: TLabel;
 Label2: TLabel;
 Edit3: TEdit;
 Label3: TLabel;
 Memo1: TMemo;
 Button1: TButton;
 procedure FormCreate(Sender: TObject);
 procedure Button1Click(Sender: TObject);
 private
 { Private declarations }
 public
 { Public declarations }
 end;
 
 var
 Form3: TForm3;
 
 implementation
 
 {$R *.dfm}
 
 procedure TForm3.Button1Click(Sender: TObject);
 
 var
 
 xn,xk,x,x0,h,s:	extended;
 
 N,k,b:integer;
 
 
 
 begin
 
 xn:=StrToInt(Edit1.Text);
 
 Memo1.Lines.Add(' x1='+Edit1.Text);
 
 xk:=StrToInt(Edit2.Text);
 
 Memo1.Lines.Add(' x2='+Edit2.Text);
 
 N:=StrToInt(Edit3.Text);
 
 Memo1.Lines.Add(' N='+Edit1.Text);
 
 
 x:=xn;
 
 
 
 repeat
 
 S:=0; b:=1;
 
 for k:=1 to N-1 do
 
 begin
 
 b:=b+sqr(x)+(2*n+3)/(n+1)*(2*n+1);
 
 s:=s+b;
 
 end;
 
 Memo1.Lines.Add('при x='+FloatToStrF(x,ffFixed,6,2)+' сумма ='
 
 +FloatToStrF(s,ffFixed,6,2));
 
 x:=x+h;
 
 until x>xk;
 
 end;
 
 
 procedure TForm3.FormCreate(Sender: TObject);
 begin
 Edit1.Text:='0.1';
 
 Edit2.text:='1';
 
 Edit3.text:='14';
 
 Memo1.Clear;
 
 Memo1.Lines.Add('Результаты');
 
 
 end;
 
 end.
 |  
|   | Вадим К (статус: Академик), 16 декабря 2008, 18:41 [#10]:Следим внимательно за руками Edit1.Text:='0.1'; - далеко не факт, что точка, может и запятая. Всё зависит от региональных настроек.
 xn:=StrToInt(Edit1.Text); - оба. Вот и оно. StrToInt не может преобразовать в вещественное число. Если бы в поле ввода было целое, то оно конечно то всё сработало.
 Используем StrToFloat
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Lexa.ak (статус: Посетитель), 16 декабря 2008, 20:53 [#11]:Теперь такая ошибка (Incompatible types: 'Integer' and 'Exteded') только у формулы : b:=b+sqr(x)+(2*n+3)/(n+1)*(2*n+1) 
 здесь то что не так?
 |  
|   | Вадим К (статус: Академик), 17 декабря 2008, 03:00 [#12]:Продолжаем внимательно следить за руками. b:=b+sqr(x)+(2*n+3)/(n+1)*(2*n+1);
 b у нас целое. а вот x - вещественное, квадрат от вещественного - тоже вещественное(Exteded). Третье слагаемое - это результат деления двух целых результатов - тоже вещественное число (только теперь это Real)
 Результат сложения Integer + Exteded + real будет Exteded - всегда выбирается "более вместительный" тип. И теперь все это пытаемся присвоить Integer. А такое присваивание неоднозначно. поэтому либо b должно быть типа Exteded, либо надо округлять (например используя Round).
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Lexa.ak (статус: Посетитель), 25 декабря 2008, 12:57 [#13]:Находит только значение при x:=0.1, а мне надо что бы перебирал от 0,1 до 1. как это сделать? 
 unit Unit3;
 
 interface
 
 uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;
 
 type
 TForm3 = class(TForm)
 Edit1: TEdit;
 Edit2: TEdit;
 Label1: TLabel;
 Label2: TLabel;
 Edit3: TEdit;
 Label3: TLabel;
 Memo1: TMemo;
 Button1: TButton;
 procedure FormCreate(Sender: TObject);
 procedure Button1Click(Sender: TObject);
 private
 { Private declarations }
 public
 { Public declarations }
 end;
 
 var
 Form3: TForm3;
 
 implementation
 
 {$R *.dfm}
 
 procedure TForm3.Button1Click(Sender: TObject);
 
 var
 
 b,xn,xk,x,x0,f,s:extended;
 
 N,k:integer;
 
 
 
 begin
 
 xn:=StrToFloat(Edit1.Text);
 
 Memo1.Lines.Add(' x1='+Edit1.Text);
 
 xk:=StrToFloat(Edit2.Text);
 
 Memo1.Lines.Add(' x2='+Edit2.Text);
 
 N:=StrToInt(Edit3.Text);
 
 Memo1.Lines.Add(' N='+Edit1.Text);
 
 
 x:=xn;
 
 
 
 repeat
 
 S:=0; b:=1;
 
 for k:=1 to N-1 do
 
 begin
 
 b:=b+sqr(x)+(2*n+3)/(n+1)*(2*n+1);
 
 s:=s+b;
 
 end;
 
 Memo1.Lines.Add('при x='+FloatToStrF(x,ffFixed,6,2)+' сумма =' +FloatToStrF(s,ffFixed,6,2));
 
 x:=x+s;
 
 until  x>xk;
 
 end;
 
 
 procedure TForm3.FormCreate(Sender: TObject);
 begin
 Edit1.Text:='0,1';
 
 Edit2.text:='1';
 
 Edit3.text:='14';
 
 Memo1.Clear;
 
 Memo1.Lines.Add('Результаты');
 
 
 end;
 
 end.
 |  
|   | Вадим К (статус: Академик), 25 декабря 2008, 14:06 [#14]:Не знаю, цикл сделать пробовали? Галочка "подтверждения прочтения" - вселенское зло. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |