Вычисление произведения

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

wanty
Сообщения: 3
Зарегистрирован: 26 дек 2010, 16:51

26 дек 2010, 16:55

Delphi: Задание: составить программу вычисления произведения, и закинуть получившееся число в файл, вот два первых члена(n-ый член представлен в самой программе): (1/2-cos|x|)(2/3-cos^2|x|)... (^2 я представил вам степень косинуса).Произведение бесконечное. Вот то что я надумал:
var
n,i:integer;
x,s:double;
f:textfile;

procedure t(var x,s:double;n,i:integer);

begin
s:=1;
for i:=1 to n do
x:=i/(i+1)-exp(i*ln(cos(abs(x))));
s:=s*x;
end;
begin
n:=strtoint(edit1.text);
x:=strtofloat(edit2.text);
assignfile(f,'data.txt');
rewrite(F);
t(x,s,n,i);
writeln(f,s);
closefile(F);
end;

программа работает, но неправильно, например при умножении первых трёх членов друг на друга он выдаёт не правильно число, а при четырёх выдаёт отрицательное число, при том что оно должно быть положительное ! Подскажите что делать, не могу понять, может у меня не правильно составлен код последовательного умножения??? n я в программе заменил на i ! если по заданию то n-ый член выглядит так:
n/(n+1)-exp(n*ln(cos(abs(x))));
Angel666
Сообщения: 37
Зарегистрирован: 17 май 2009, 23:51

26 дек 2010, 21:21

wanty писал(а):Delphi: Задание: составить программу вычисления произведения, и закинуть получившееся число в файл, вот два первых члена(n-ый член представлен в самой программе): (1/2-cos|x|)(2/3-cos^2|x|)... (^2 я представил вам степень косинуса).Произведение бесконечное. Вот то что я надумал:
var
n,i:integer;
x,s:double;
f:textfile;

procedure t(var x,s:double;n,i:integer);

begin
s:=1;
for i:=1 to n do
x:=i/(i+1)-exp(i*ln(cos(abs(x))));
s:=s*x;
end;
begin
n:=strtoint(edit1.text);
x:=strtofloat(edit2.text);
assignfile(f,'data.txt');
rewrite(F);
t(x,s,n,i);
writeln(f,s);
closefile(F);
end;

программа работает, но неправильно, например при умножении первых трёх членов друг на друга он выдаёт не правильно число, а при четырёх выдаёт отрицательное число, при том что оно должно быть положительное ! Подскажите что делать, не могу понять, может у меня не правильно составлен код последовательного умножения??? n я в программе заменил на i ! если по заданию то n-ый член выглядит так:
n/(n+1)-exp(n*ln(cos(abs(x))));

Попробуй вместовот этой строчки:
x:=i/(i+1)-exp(i*ln(cos(abs(x))));
s:=s*x;
написать вот так: s:=s*(i/(i+1)-exp(i*ln(cos(abs(x)))));
wanty
Сообщения: 3
Зарегистрирован: 26 дек 2010, 16:51

26 дек 2010, 21:53

как не странно, но это помогло ! спс огромное ! но я не пойму, почему из-за одной строчки он считал не правильно ?
Angel666
Сообщения: 37
Зарегистрирован: 17 май 2009, 23:51

27 дек 2010, 01:32

wanty писал(а):как не странно, но это помогло ! спс огромное ! но я не пойму, почему из-за одной строчки он считал не правильно ?

Потому что ты изменял значение х, которое в данной формуле не надо изменять, она при каждом умножении остается неизменной, посмотри внимательно на те твои две строчки. Если уж писать как ты писал, то надо было ввести еще одну переменную, и выглядело бы это вот так:
а:=i/(i+1)-exp(i*ln(cos(abs(x))));
s:=s*а;
wanty
Сообщения: 3
Зарегистрирован: 26 дек 2010, 16:51

27 дек 2010, 17:14

Понятно, спс ! и ещё вопрос можно ? мне многие говорили что не хватает операторных скобок после for , но когда я их там ставил , программа начинала считать не правильно, так они нужны или нет ?
Angel666
Сообщения: 37
Зарегистрирован: 17 май 2009, 23:51

28 дек 2010, 00:44

wanty писал(а):Понятно, спс ! и ещё вопрос можно ? мне многие говорили что не хватает операторных скобок после for , но когда я их там ставил , программа начинала считать не правильно, так они нужны или нет ?

Если ты напишешь вот так: s:=s*(i/(i+1)-exp(i*ln(cos(abs(x))))); - то не нужны, но если:
а:=i/(i+1)-exp(i*ln(cos(abs(x))));
s:=s*а;
то надо будет после for написать begin а после вот этой строчки - s:=s*а; надо поставить end; Тогда все будет правильно работать
угрюмый
Сообщения: 2
Зарегистрирован: 19 дек 2012, 12:26

19 дек 2012, 12:28

помогите написать программу
a*(a+1)*(a+2)*...*(a+n-1)
Анастасія
Сообщения: 6
Зарегистрирован: 14 окт 2014, 20:25
Откуда: Lviv

14 окт 2014, 21:26

y= (1/2-cos|x|)(2/3-cos^2|x|)... (n/n+1-cos^n|x|)

Хочу попросити перевірити на паскалі буде так? Якщо ні, то вести поправки..


program riv;
uses crt;
var n,x,a,y:real;
i:integer;
begin
clrscr;
write('n=');
read(n);
write('x=');
read(x);
i:=1;
a:=1;
y:=1;
begin
repeat a:=a*cos(abs(x));
y:=y*(i/(i+1));
i:=i+1;
until (i>n);
end;
writeln('y=',y:4:3);
readln;readln;
end.
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

14 окт 2014, 22:50

В цикле в вычислении переменной У не задействована переменная А
It's a long way to the top if you wanna rock'n'roll
Анастасія
Сообщения: 6
Зарегистрирован: 14 окт 2014, 20:25
Откуда: Lviv

14 окт 2014, 23:17

somewhere писал(а):В цикле в вычислении переменной У не задействована переменная А
так...вже підправила) Спасибі
Ответить