![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Здравствуйте , мне нужно вычислить значение полинома n-ой степени
формула Ai*x^i (i - от 0 до n ) ; Получилось так , подскажите пожалуйста как исправить .. Код:
procedure TForm1.Button1Click(Sender: TObject); var x,n:integer; function fk(n,x:integer;a:array of integer):extended; begin if n=0 then fk:=a[n] else fk:=a[n]+ fk(a[n-1]*(round(Power(x,n+1)))) ;// как обойти несоответствие типов при возведении в степень ? end; begin x:=strtoint(edit1.text); a[n]:=strtoint(stringgrid1.Cells[n-1,0]; label1.caption:=floattostr(fk(n)); end; end. Последний раз редактировалось qpmr, 05.04.2012 в 23:09. |
|
#2
|
|||
|
|||
|
какое несоответствие типов?
то, что в power отсылаются integer'ы, вместо вещественных? power спокойно работает с целыми числами (даже с типом byte). только что проверено лично. а вот функция у Вас вызывается странно. Из тела процедуры Вы ее вызываете с одним параметром, а описана она на трех. Динамический массив нельзя использовать без задания его длины через SetLength(a, <его_длина>); |
|
#3
|
|||
|
|||
|
Цитата:
|
|
#4
|
||||
|
||||
|
Имелось в виду то, что функция декларироана с 3-я параметрами:
Код:
function fk(n,x:integer;a:array of integer):extended; Код:
fk(a[n-1]*(round(Power(x,n+1)))); |
|
#5
|
|||
|
|||
|
Цитата:
Почему же с одним , там ведь задействованы 3 параметра ? Должна быть сумма ? |
|
#6
|
||||
|
||||
|
Имеется ввиду
Код:
floattostr(fk(n)) |
|
#7
|
||||
|
||||
|
И эта строка тоже. У ТС, везде вызов производится с одним параметром, но он упорно считает, что, если подставил в качестве параметра вычисление, то это автоматически засчитается как 3 параметра. Наивный, компилятор не настолько умён.
|
|
#8
|
|||
|
|||
|
Цитата:
Код:
fk:=a[n]+ fk(a[n-1]*(round(Power(x,n+1))); |
|
#9
|
||||
|
||||
|
Это уже черезчур. Считать до трёх умеешь? Где здесь передаётся 3!!! параметра?
Код:
fk := a[n] + fk(a[n -1] * (Rund(Power(x, n + 1))); |
|
#10
|
|||
|
|||
|
Цитата:
Код:
fk:=a[n]+ fk((a[n-1]*(Power(x,n+1))),x,a[n]) |
|
#11
|
||||
|
||||
|
А рекурсия тут вообще к чему? У тебя формула
Цитата:
Последний раз редактировалось YVitaliy, 05.04.2012 в 23:20. |
|
#12
|
|||
|
|||
|
Цитата:
|
|
#13
|
||||
|
||||
|
Массив заполняется вначале в СтрингГрид? Тогда, я думаю, в поле
Цитата:
Последний раз редактировалось YVitaliy, 05.04.2012 в 23:20. |
|
#14
|
|||
|
|||
|
Цитата:
Последний раз редактировалось qpmr, 05.04.2012 в 23:15. |
|
#15
|
||||
|
||||
|
Код:
var x,n,i:integer;
function fk(i,x:integer;a:array of integer):extended;
begin
if i>=length(a) then begin
result:=0;
exit;
end;
if i=0 then result:=a[0]+fk(i+1,x,a) else
result:=a[i]*Power(x,i)+fk(i+1,x,a);
end;
begin
x:=strtoint(edit1.text);
setlength(a,stringgrid1.ColCount);
for i:=0 to length(a)-1 do
a[i]:=strtoint(stringgrid1.Cells[i,0]);
label1.caption:=floattostr(fk(0,x,a));
end;
end.![]() |