Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2011, 20:00   #1
Danil_59
Пользователь
 
Регистрация: 05.12.2011
Сообщений: 11
Восклицание Рациональное решение; Pascal

uses crt;
Var sum,x: real;
p,i: integer;
function pow(x: real; n: integer):real;
Var i: integer;
p: real;
Begin
p:=1;
for i:=1 to n do
p:=p*x;
pow:=p;
End;

Begin
clrscr;
sum:=0;
write('‚Введите p: ');
readln(p);
write('‚Введите x: ');
readln(x);
for i:=1 to p do
sum:=sum+(2*i-1)*pow(x,2*i+1)/(2*i*(2*i+1));
writeln('Сумма : ',sum:10:4);
readln;
End.

после проверки препод сказал что sum:=sum+(2*i-1)*pow(x,2*i+1)/(2*i*(2*i+1)); эта строчка не рациональна, слишком много действий, что можно сделать?

Последний раз редактировалось Danil_59; 22.12.2011 в 07:48.
Danil_59 вне форума Ответить с цитированием
Старый 21.12.2011, 20:10   #2
JuniorProger
Форумчанин
 
Регистрация: 16.09.2011
Сообщений: 114
По умолчанию

1. это не C++.
2. почему у препода не спросил?
3. условие задачи напиши.
JuniorProger вне форума Ответить с цитированием
Старый 21.12.2011, 21:51   #3
Danil_59
Пользователь
 
Регистрация: 05.12.2011
Сообщений: 11
По умолчанию

я чтото задумался, Pascal)
лишние действия сказал
Изображения
Тип файла: jpg Безымянный.jpg (23.0 Кб, 117 просмотров)
Danil_59 вне форума Ответить с цитированием
Старый 21.12.2011, 21:51   #4
Danil_59
Пользователь
 
Регистрация: 05.12.2011
Сообщений: 11
По умолчанию

в изображении задание
Danil_59 вне форума Ответить с цитированием
Старый 22.12.2011, 08:01   #5
Danil_59
Пользователь
 
Регистрация: 05.12.2011
Сообщений: 11
По умолчанию

помогите с решением кто нибудь, очень хочется сдать сегодня
Danil_59 вне форума Ответить с цитированием
Старый 22.12.2011, 08:23   #6
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

Код:
var x,sum,a:real; i,p:integer;
begin
readln(p,x);
a:=x*x*x/6; //n=1
sum:=a;
for i:=2 to p do begin
  a:=a*2*(i-1)*(2*i-1)/(2*i-3)*x*x*(2*i-1)/(2*i*(2*i+1));
  sum:=sum+a;
end;
writeln (sum:0:4);
end.
Как-то так можно, в цикле элемент считается используя предыдущий (замудрено правда :-[)

Можно еще сделать так - в "a" запоминать x из предыдущего, чтобы не считать эту степень каждый раз, а просто домножать:
Код:
a:=x*x*x;
sum:=a/6;
for i:=2 to p do begin
  a:=a*x*x;
  sum:=sum+(2*i-1)*a/(2*i*(2*i+1));
end;
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Старый 22.12.2011, 21:58   #7
JuniorProger
Форумчанин
 
Регистрация: 16.09.2011
Сообщений: 114
По умолчанию

Хороший вариант предложил Zer0 :
Код:
a:=x*x*x;
sum:=a/6;
for i:=2 to p do begin
  a:=a*x*x;
  sum:=sum+(2*i-1)*a/(2*i*(2*i+1));
end;
Можно его еще оптимизировать подключив математику: посмотрим на член без Х, т.е. (2*i - 1)/(2*i*(2*i+1)). Число операций равно 7. Сократим числитель и знаменатель на 4*i. Тогда получим: (0.5 - 0.25*i)/(i+0.5). Число операций равно 4. Подставим в код Zer0:
Код:
a:=x*x*x;
sum:=a/6;
for i:=2 to p do begin
  a:=a*x*x;
  sum:=sum+(0.5 - 0.25*i)*a/(i+0.5);
end;
Хотя, наверное, тебе это уже не нужно, но раньше написать я не мог.
JuniorProger вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение в C++ semenpetr Фриланс 13 07.04.2010 09:09
решение задачи на c++ hay20 Фриланс 7 18.12.2009 00:03
решение ДУ Gronex Паскаль, Turbo Pascal, PascalABC.NET 0 20.05.2009 20:51
решение ДУ DEBAZOL Паскаль, Turbo Pascal, PascalABC.NET 1 04.04.2008 21:49