Помощь - Поиск - Пользователи - Календарь
Полная версия: задача на while или repeat
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Leito
Нажмите для просмотра прикрепленного файла
решить задачу нужно через цикл while или repeat
вот что у меня получилось - программа компилируется, но при вводе любых n и x или выдается 205 ошибка (A floating-point overflow) или программа просто повисает
Код
program zicle;
var x,b,n,e,s,y:real;
c,p,i:integer;
begin
writeln ('vvedite n');
readln (n);
writeln('vvedite x');
readln (x);
if x<1 then writeln ('vi4islenie nevozmojno);
s:=0;
n:=1;
i:=1;
c:=0;
for c:=0 to i do
p:=p*(-1);
b:=exp((2*n)*ln(x))/(2*n);
e:=abs(p*exp((2*i)*ln(x)))/(2*i);
while e<0.0001 do
begin
p:=1;
while i>=c do
begin
p:=p*(-1);
c:=c+1;
end;
y:=p*b;
s:=y+s;
n:=n+1;
i:=i+1;
b:=exp((2*n)*ln(x))/(2*n);
end;
writeln ('s = ',s:2:2);
readln;
end.
Айра
Намудрил ты как-то)) сколько помню, косинус так считался: (или какие-то особые критерии написания программы есть?)
var prom: extended; //промежуточный член ряда
s,n,x,x2: extended;
const e=0.0001;
begin
write('введите значение x: ');
readln(x);
x2:=x*x;
s:=1;
prom:=1;
n:=2;
while abs(prom)>=e do
begin
prom:=-prom*x2/(n*(n-1));
s:=s+prom;
n:=n+2;
end;
writeln(s:14:13);
writeln(cos(x):14:13); //для сравнения пусть комп посчитает сам
end.

Только учти, что х - это не градусы, поэтому на значениях >44 результат уже не будет правильным..
kvadrat
var prom: extended; //промежуточный член ряда
s,n,x,x2: extended;
const e=0.0001;
begin
write('введите значение x: ');
readln(x);
x2:=x*x;
s:=1;
prom:=1;
n:=2;
repeat
prom:=-prom*x2/(n*(n-1));
s:=s+prom;
n:=n+2
until abs(prom)<e;
writeln(s:14:13);
writeln(cos(x):14:13); //для сравнения пусть комп посчитает сам
end.


А вот решение через репит cool.gif
Leito
Айра, спасиба
ЗЫ в репит я уже сам переделал)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.