Найти сумму отрицательных членов последовательности

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: Найти сумму отрицательных членов последовательности

Re: Найти сумму отрицательных членов последовательности

somewhere » 27 ноя 2013, 10:00

Поскольку ваш компилятор не отличает вызов функции от обращения к текущему результату функции, то можете использовать следующий код:

Код: Выделить всё

type plongint = ^longint;
function fact(n: integer): longint;
var i: integer;
begin
fact := 1;
for i := 1 to n do fact := plongint(longint(@i)+2)^ * i;
end;
или стандартный вариант с локальными переменными заместо имени функции.

Re: Найти сумму отрицательных членов последовательности

Олесенька » 26 ноя 2013, 23:45

uses crt;
Var a, b, x0, h, p, x,ma, ak, s, c, d, p0,ss,ssum: real;
n, m, l, g, k,o,q: integer;

function fact(n: integer): longint;
var i: integer;
begin
fact:=1;
for i:= 1 to n do
fact:=fact * i;
end;

begin

clrscr;
writeln('VVEDITE a, b, c, d, x0, h, m');
read(a, b, c, d, x0, h, m);
if a>b then p:=a
else p:=b;
if c>p then p:=c;
if d>p then p:=d;
{perebor X}
ssum:=0;
for i:=1 to m do
begin
x:=x0+(i-1)*h;
for k:=1 to n do

ss:=(exp(k+1)*log(-1))*exp((k-1)*log(x))*exp((-k*i)*log(e))/fact(k+1);
if ss<0 then ssum:=ssum+x;
writeln(ssum);
end;

end.

Re: Найти сумму отрицательных членов последовательности

somewhere » 26 ноя 2013, 23:13

Полный листинг выкладывать не забывайте

Re: Найти сумму отрицательных членов последовательности

Олесенька » 26 ноя 2013, 20:08

все поправила как вы сказали
пишет ошибку..
Program1.pas(10) : Нельзя преобразовать тип function(n: integer): integer к integer

Re: Найти сумму отрицательных членов последовательности

Хыиуду » 25 ноя 2013, 11:45

1. Вычислять факториал рекурсивно можно только для одной цели - объяснить, что такое рекурсия. На будущее - забудьте этот способ раз и навсегда!

Код: Выделить всё

function fact(n: integer): longint;
var i: integer; 
begin 
   fact:=1;
   for i:= 1 to n do 
     fact:=fact * i;
end;
функции power в Паскале нет (хотя хз, сто лет не работал, может, в новых версиях уже есть). Вообще a^b вычисляется как exp(b*log(a)). Не забудьте вручную обработать исключительные ситуации, вроде тех, когда аргументы равны нулю или отрицательные. Константы e тоже нет, но есть собственно функция экспоненты - exp.
Остальное вроде верно

Найти сумму отрицательных членов последовательности

Олесенька » 22 ноя 2013, 18:10

помогите исправить задачу пожалуйста

Найти сумму отрицательных членов последовательности....
последовательность ((-1)^(k-1)*x^(h-1)*e^(-p*k))/(k+1)!
где
x=x0+(i-1)*h;
p=max(a,b,c,d);
i=1,...,m

с клавы вводим значения- a=1.2 b=-0.5 c=-3.4 d=1.3 x0=1.4 h=0.2 m=5
n=7

то что смогла сделать, не понимаю что не так...

Код:

uses crt;
Var a, b, x0, h, p, x,ma, ak, s, c, d, p0,ss,ssum: real;
n, m, l, g, i, k,o,q: integer;

function fact(n:integer):longint;
begin
if q=1 then fact:=1
else fact:=fact(q-1)*q;
end;
begin

clrscr;
writeln('VVEDITE a, b, c, d, x0, h, m');
read(a, b, c, d, x0, h, m);
if a>b then p:=a
else p:=b;
if c>p then p:=c;
if d>p then p:=d;
{perebor X}
ssum:=0;
for i:=1 to m do
begin
x:=x0+(i-1)*h;
for k:=1 to n do

ss:=(power(-1,k-1)*power(x,k-1)*power(e,-k*i))/fact(k+1);
if ss<0 then ssum:=ssum+x;
writeln(ssum);
end;

end.

Вернуться к началу