Страница 1 из 2
Вычисление произведения
Добавлено: 26 дек 2010, 16:55
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))));
Re: Вычисление произведения
Добавлено: 26 дек 2010, 21:21
Angel666
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)))));
Re: Вычисление произведения
Добавлено: 26 дек 2010, 21:53
wanty
как не странно, но это помогло ! спс огромное ! но я не пойму, почему из-за одной строчки он считал не правильно ?
Re: Вычисление произведения
Добавлено: 27 дек 2010, 01:32
Angel666
wanty писал(а):как не странно, но это помогло ! спс огромное ! но я не пойму, почему из-за одной строчки он считал не правильно ?
Потому что ты изменял значение х, которое в данной формуле не надо изменять, она при каждом умножении остается неизменной, посмотри внимательно на те твои две строчки. Если уж писать как ты писал, то надо было ввести еще одну переменную, и выглядело бы это вот так:
а:=i/(i+1)-exp(i*ln(cos(abs(x))));
s:=s*а;
Re: Вычисление произведения
Добавлено: 27 дек 2010, 17:14
wanty
Понятно, спс ! и ещё вопрос можно ? мне многие говорили что не хватает операторных скобок после for , но когда я их там ставил , программа начинала считать не правильно, так они нужны или нет ?
Re: Вычисление произведения
Добавлено: 28 дек 2010, 00:44
Angel666
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; Тогда все будет правильно работать
Re: Вычисление произведения
Добавлено: 19 дек 2012, 12:28
угрюмый
помогите написать программу
a*(a+1)*(a+2)*...*(a+n-1)
Re: Вычисление произведения
Добавлено: 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.
Re: Вычисление произведения
Добавлено: 14 окт 2014, 22:50
somewhere
В цикле в вычислении переменной У не задействована переменная А
Re: Вычисление произведения
Добавлено: 14 окт 2014, 23:17
Анастасія
somewhere писал(а):В цикле в вычислении переменной У не задействована переменная А
так...вже підправила) Спасибі