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

Delphi Sources



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

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

Здравствуйте , мне нужно вычислить значение полинома 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  
Старый 05.04.2012, 21:50
nixel nixel вне форума
Начинающий
 
Регистрация: 12.12.2011
Адрес: Москва
Сообщения: 150
Версия Delphi: XE2-U4
Репутация: 131
По умолчанию

какое несоответствие типов?
то, что в power отсылаются integer'ы, вместо вещественных?
power спокойно работает с целыми числами (даже с типом byte). только что проверено лично.

а вот функция у Вас вызывается странно. Из тела процедуры Вы ее вызываете с одним параметром, а описана она на трех.

Динамический массив нельзя использовать без задания его длины через SetLength(a, <его_длина>);
Ответить с цитированием
  #3  
Старый 05.04.2012, 22:16
qpmr qpmr вне форума
Прохожий
 
Регистрация: 12.12.2011
Сообщения: 27
Репутация: 10
По умолчанию

Цитата:
Сообщение от nixel
какое несоответствие типов?
то, что в power отсылаются integer'ы, вместо вещественных?
power спокойно работает с целыми числами (даже с типом byte). только что проверено лично.

а вот функция у Вас вызывается странно. Из тела процедуры Вы ее вызываете с одним параметром, а описана она на трех.

Динамический массив нельзя использовать без задания его длины через SetLength(a, <его_длина>);
С массивом понятно . С функцией , вы имели ввиду что условие только для n ?
Ответить с цитированием
  #4  
Старый 05.04.2012, 22:24
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Имелось в виду то, что функция декларироана с 3-я параметрами:
Код:
  function fk(n,x:integer;a:array of integer):extended;
а вызывается с одним:
Код:
  fk(a[n-1]*(round(Power(x,n+1))));
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #5  
Старый 05.04.2012, 22:32
qpmr qpmr вне форума
Прохожий
 
Регистрация: 12.12.2011
Сообщения: 27
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
а вызывается с одним:
Код:
  fk(a[n-1]*(round(Power(x,n+1))));

Почему же с одним , там ведь задействованы 3 параметра ? Должна быть сумма ?
Ответить с цитированием
  #6  
Старый 05.04.2012, 22:36
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Имеется ввиду
Код:
floattostr(fk(n))
Ответить с цитированием
  #7  
Старый 05.04.2012, 22:43
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

И эта строка тоже. У ТС, везде вызов производится с одним параметром, но он упорно считает, что, если подставил в качестве параметра вычисление, то это автоматически засчитается как 3 параметра. Наивный, компилятор не настолько умён.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #8  
Старый 05.04.2012, 22:44
qpmr qpmr вне форума
Прохожий
 
Регистрация: 12.12.2011
Сообщения: 27
Репутация: 10
По умолчанию

Цитата:
Сообщение от YVitaliy
Имеется ввиду
Код:
floattostr(fk(n))
Ах вот оно в чем , не заметил сразу , но до того момента меня не пускает из-за
Код:
 fk:=a[n]+ fk(a[n-1]*(round(Power(x,n+1)));
Ответить с цитированием
  #9  
Старый 05.04.2012, 22:52
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Это уже черезчур. Считать до трёх умеешь? Где здесь передаётся 3!!! параметра?
Код:
  fk := a[n] + fk(a[n -1] * (Rund(Power(x, n + 1)));
не учили, что передаваемые параметры отделяются запятыми?
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #10  
Старый 05.04.2012, 22:53
qpmr qpmr вне форума
Прохожий
 
Регистрация: 12.12.2011
Сообщения: 27
Репутация: 10
По умолчанию

Цитата:
Сообщение от qpmr
Ах вот оно в чем , не заметил сразу , но до того момента меня не пускает из-за
Код:
 fk:=a[n]+ fk(a[n-1]*(round(Power(x,n+1)));
нужно наподобие
Код:
fk:=a[n]+ fk((a[n-1]*(Power(x,n+1))),x,a[n]) 
?
Ответить с цитированием
  #11  
Старый 05.04.2012, 22:55
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

А рекурсия тут вообще к чему? У тебя формула
Цитата:
Ai*x^i;
, тут рекурсию никак не вставить. Возможно, имелось ввиду "сумма{Ai*x^i}" или "произведение{Ai*x^i}"?

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

Цитата:
Сообщение от YVitaliy
А рекурсия тут вообще к чему? У тебя формула , тут рекурсию никак не вставить. Возможно, имелось ввиду "сумма{Ai*x^i}" или "произведение{Ai*x^i}"?
так да , i-индекс при А , и найти значение полинома , организовать нужно с рекурсией и без
Ответить с цитированием
  #13  
Старый 05.04.2012, 23:03
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Массив заполняется вначале в СтрингГрид? Тогда, я думаю, в поле
Цитата:
edit1.text
вводится значение x? Алгоритм нужно переделать.

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

Цитата:
Сообщение от YVitaliy
Массив заполняется вначале в СтрингГрид? Тогда, я думаю, в поле вводится значение x? Алгоритм нужно переделать. Да.
Да,именно так. Я понимаю, что тут задание на пару строчек и времени 10 минут , но не до всех все так быстро доходит .

Последний раз редактировалось qpmr, 05.04.2012 в 23:15.
Ответить с цитированием
  #15  
Старый 05.04.2012, 23:14
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Код:
 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.
На коленке. За работоспособность и оптимальность не ручаюсь
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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