Консультация № 174649
28.11.2009, 18:46
0.00 руб.
0 14 1
Добрый день, уважаемые эксперты! Помогите решить одну задачку!
Даны натуральное число n и вещественное число x. Заполнить вещественный массив а (массив одномерный) элементами, значение которых вычисляются по заданной формуле : ai = x в степени i + i! i=1,2,3…….n

Обсуждение

Неизвестный
29.11.2009, 12:26
общий
Если взять x > 1, то ОЧЕНЬ скоро при вычислении "x в степени i + i!" произойдет переполнение: факториал очень быстро растет
Поэтому нужно ввести ограничения. Какие?
А так задание несложненькое - решается одной операцией умножения, ну и циклы for, кнонечно.
Неизвестный
29.11.2009, 13:01
общий
так х у нас же вещественное число.....массив можно взять до n или чего-то я непонимаю
давно
Специалист
246813
155
29.11.2009, 13:41
общий
Так же если взять n>12, то даже при степени типа Longint выполнение программы не возможно.
Предполагаю, что в программе возможны ограничения: 1<=n<=12 и -1<x<1; 1<=n<=7 и -6.76<=x<=6.76 и так далее
Даже при таких ограничениях программа может достаточно долго выдавать результат.
давно
Академик
320937
2216
29.11.2009, 18:05
общий
это ответ
Здравствуйте, angel.nero. Ответ в приложении. Как указывали коллеги, значения ai быстро растут при x>1, так, например, при x=1,1; n=5,
a[5]=149309. Идея заключается в уменьшении количества умножений. a[n]=k1*k2, где k1[1]=x, k1[n]=k1[n-1]*x; k2[1]=x; k2[n]=k2[n-1]^n.


Приложение:
{
Вопрос № 174649
Даны натуральное число n и вещественное число x.
Заполнить вещественный массив а (массив одномерный) элементами,
значение которых вычисляются по заданной формуле : ai = x в степени i + i! i=1,2,3…….n
}
program p174649;
uses
crt;
const
size=100;
type
TVector = array[1..size] of real;
var
v: TVector;
n: integer;
i,j: integer;
x: real;
k1,k2,k2this: real;

begin
clrscr;
write('x=');
readln(x);

write('n=');
readln(n);

k1 := x;
k2 := x;
v[1]:=k1*k2;
for i:= 2 to n do
begin
k1 := k1 * x;
k2this := 1;
for j:= 1 to i do
k2this := k2this*k2;
k2 := k2this;
v[i] := k1*k2;
end;

for i := 1 to n do
writeln('v[',i,']=', v[i]:11:9);
readln;
end.
5
Неизвестный
29.11.2009, 18:06
общий
можете показать для случая -1<x<1,пожалуйста!!
Неизвестный
29.11.2009, 19:47
общий
angel.nero:
Программу запускать пробовали?
n=7
x=0.900000000
v[1]=0.810000000
v[2]=0.656100000
v[3]=0.387420489
v[4]=0.052334763
v[5]=0.000001907
v[6]=0.000000000
v[7]=0.000000000

n=7
x=-0.900000000
v[1]=0.810000000
v[2]=0.656100000
v[3]=-0.387420489
v[4]=0.052334763
v[5]=-0.000001907
v[6]=0.000000000
v[7]=0.000000000

Неизвестный
30.11.2009, 13:03
общий
leonid59:
А вы можете прокоментировать что делает прога с данного места
k1 := x;
k2 := x;
v[1]:=k1*k2;
for i:= 2 to n do
begin
k1 := k1 * x;
k2this := 1;
for j:= 1 to i do
k2this := k2this*k2;
k2 := k2this;
v[i] := k1*k2;
end;

for i := 1 to n do
writeln('v[',i,']=', v[i]:11:9);
readln;
end.

просто я не понял суть метода
Неизвестный
30.11.2009, 19:45
общий
angel.nero:
Добрый вечер!
an=xn+n!=xn[$149$]xn!
an-1=xn-1+(n-1)!=xn-1[$149$]x(n-1)!
Пусть
an = k1n[$149$]k2n, где
k1n=xn, k2n=xn!.
Тогда
an-1 = k1n-1[$149$]k2n-1, где
k1n-1=xn-1, k2n-1=x(n-1)!.
k1n=k1n-1[$149$]x
k2n=k2n-1n
Причем k11=x, k21=x, a11=k11[$149$]k21=x[$149$]x=x2
Неизвестный
20.12.2009, 17:38
общий
lamed:
Добрый вечер,lamed!Вы можете мне подсказать???
вот прога мне что выдает,при заданных х и n
x=2
n=4
v[1]=4.000000000
v[2]=16.000000000
v[3]=512.000000000
v[4]=268435456.000000000

разве она правильно считает???
Неизвестный
20.12.2009, 18:28
общий
angel.nero:
Добрый вечер, angel.nero! Все в мини-форуме поняли как a[i] = x^(i + i!). Может быть, Вы имели в виду a[i] = (x^i) + i!? то есть, для Вашего случая
Код:

x=2
n=4
a[1]=x^1+1!=2^1+1!=2+1=3
a[2]=x^2+2!=2^2+2!=4+2=6
a[3]=x^3+3!=2^3+3!=8+6=14
a[4]=x^4+4!=2^4+4!=16+24=40

Тогда программа выглядит так:
Код:
{
Вопрос № 174649
Даны натуральное число n и вещественное число x.
Заполнить вещественный массив а (массив одномерный) элементами,
значение которых вычисляются по заданной формуле : ai = x^i + i! i=1,2,3…….n
}
program p174649;
uses
crt;
const
size=100;
type
TVector = array[1..size] of real;
var
v: TVector;
n: integer;
i,j: integer;
x: real;
k1,k2,k2this: real;

begin
clrscr;
write('x=');
readln(x);

write('n=');
readln(n);

k1 := x;
k2 := 1;
v[1]:=k1+k2;
for i:= 2 to n do
begin
k1 := k1 * x;
k2 := k2 * i;
v[i] := k1+k2;
end;

for i := 1 to n do
writeln('v[',i,']=', v[i]:11:9);
readln;
end.

Неизвестный
22.12.2009, 19:10
общий
a[i] = (x^i) + i! извините что ввёл вас в замешательство
Неизвестный
22.12.2009, 22:25
общий
angel.nero:
Удачи!
Неизвестный
25.12.2009, 00:08
общий
lamed:
спасибо!Приняли
Неизвестный
25.12.2009, 00:27
общий
angel.nero:
Успехов!
Форма ответа