• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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

  • Автор темы wanty
  • Дата начала
Статус
Закрыто для дальнейших ответов.
W

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))));
 
N

nayke

s:=1;
for i:=1 to n do
x:=i/(i+1)-exp(i*ln(cos(abs(x))));
s:=s*x;
а надо

Код:
s:=1;
for i:=1 to n do
begin
x:=i/(i+1)-exp(i*ln(cos(abs(x))));
s:=s*x;
end;
Это из того что бросилось в глаза.
P.S. такие ошибки легко отлавливаются дебаггером
 
W

wanty

бросилось в глаза то да ! то считает он не правильно !я пробовал делить на калькуляторе !
 
N

nayke

x:=i/(i+1)-exp(i*ln(cos(abs(x))));

в этой строке на каждой итерации x-меняется, т.е. меняется аргумент у косинуса не уверен что так должно быть, попробуйте

Код:
s:=1;
for i:=1 to n do
begin
y:=i/(i+1)-exp(i*ln(cos(abs(x))));
s:=s*y;
end;

p.s. В функцию cos аргумент(угол) надо передавать в радианах, ну так на всякий случай.
 
W

wanty

Спс ! я уже всё сделал ! Операторные скобки не нужны, и надо было написать не так:
y:=i/(i+1)-exp(i*ln(cos(abs(x))));
s:=s*y;
а так:s:=s*(i/(i+1)-exp(i*ln(cos(abs(x)))));(извините подправил)
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!