Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2012, 20:54   #1
xxxartikxxx
Пользователь
 
Регистрация: 12.10.2012
Сообщений: 23
По умолчанию Исправьте ошибку в программе

должен находить sin(x)

код:

Код:
program sin;
 uses crt;
 var
 y,x2,x,dy,eps,i:real;
 begin
 write('x=');
 readln(x);
 eps:=x-6;
 x:=(x*Pi)/180;
 y:=x;
 dy:=x;
 x2:=x*x;
 i:=1
 while abs(dy) > eps do
 begin
 i:i+2;
 dy:=-dy*x2/(i*(i-1));
 y:=y+dy
 end;
 write('sin=',y:5:2);
 end.

Последний раз редактировалось Stilet; 25.11.2012 в 21:33.
xxxartikxxx вне форума Ответить с цитированием
Старый 25.11.2012, 21:16   #2
Nik Raider
Пользователь
 
Регистрация: 03.02.2012
Сообщений: 14
По умолчанию

Цитата:
должен находить sin(x)
А почему бы не использовать функцию sin()?
Nik Raider вне форума Ответить с цитированием
Старый 25.11.2012, 21:45   #3
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Насколько понимаю, у Вас разложение синуса в ряд Тейлора?
Тогда у Вас ошибка не столько в задаче, сколько в самой математике (хотя и в программе полно).

Код:
program sinus;
uses crt;
var
x2,x,dy,eps:real;
fakt,i,z: integer;

begin
  write('x=');
  readln(x);
  eps:=x-6;
  x:=(x*Pi)/180;
  dy:=0;
  x2:=x;
  i:=1;
  z:=1;
  fakt:=1;
  while abs(z*x2/fakt) >= eps do begin
    dy:=dy+z*x2/fakt;
    i:=i+2;
    fakt:=fakt*i*(i-1);
    z:=z*(-1);
  end;
  write('sin=',dy:5:2);
end.
Как-то так. Не проверял.

Причем вынужден заметить, что вот из-за этого условия цикл вычисления может вообще стать непрерывным:

Цитата:
eps:=x-6;
А так как исходное задание Вы выложить поленились, предоставив нам догадываться, что эта программа делает, то сами и исправляйте этот эпсилон. Может он по заданию вообще руками вводится или константой задан?
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 25.11.2012 в 21:52.
Sciv вне форума Ответить с цитированием
Старый 25.11.2012, 22:10   #4
xxxartikxxx
Пользователь
 
Регистрация: 12.10.2012
Сообщений: 23
По умолчанию

я немного изменил и у меня вышло такое:

код:

Program program1;
uses crt;
var x,y,x2,dy,eps,i:real;
begin
write('x=');
readln(x);
eps := 1e-6;
x :=(x*Pi)/180;
y := x;
dy := x;
x2 := x * x;
i := 1;
while abs(dy) > eps do
begin
i := i + 2;
dy := -dy * x2 / (i * (i - 1));
y := y + dy
end;
write('sin= ',y:5:2);
end.
xxxartikxxx вне форума Ответить с цитированием
Старый 25.11.2012, 22:16   #5
xxxartikxxx
Пользователь
 
Регистрация: 12.10.2012
Сообщений: 23
По умолчанию

У меня только один вопрос как sin (x) оформить функцией?
xxxartikxxx вне форума Ответить с цитированием
Старый 26.11.2012, 07:02   #6
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Так и оформить:

Код:
y:=sin(x);
writeln(y:2:2);
P.S. А Вы вообще мой ответ читали? Там у каждого члена ряда разные знаки, а в Вашей программе этого точно нет.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 26.11.2012 в 07:04.
Sciv вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Исправьте ошибку!! Krivaia_soplea Паскаль, Turbo Pascal, PascalABC.NET 5 07.11.2012 20:15
исправьте ошибку в программе Tolian92 Помощь студентам 0 20.05.2012 12:38
Исправьте ошибку 15104 Общие вопросы C/C++ 2 06.10.2011 11:07
Исправьте ошибку.С# Tase4ka Помощь студентам 8 12.02.2011 14:09
Исправьте ошибку kipapsih Помощь студентам 0 07.01.2011 20:19