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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2013, 13:59   #1
Tabigon
 
Регистрация: 13.10.2013
Сообщений: 7
По умолчанию Почти решил

program Sin2x;

{$APPTYPE CONSOLE}

uses
SysUtils, Math;

var
a, b, c, d, e, f, g, k, l, z, o, p, m, x, eps: Real;
h, i, j, n: Integer;
begin
Writeln('Vvedite x');
Readln(x);
Readln(eps);
n:=0;
g:=1;
z:=0;
while abs(z)<= eps do
begin
inc(n);
for i:= 1 to n do
g:= g*(2*i);
z:=z+power(-1,n-1)*power(2,2*n-1)*Power(x,2*n)/g;
end;
writeln(z:10:8);
Readln;
end.
Программа решает всё правильно,но она проводит цикл вайл только один раз почему-то.Я пишу к примеру,что ЕПС должен быть больше модуля окончательного числа и только тогда программа должна останавливаться,но она в любом случае только один раз вычисляет и выходит из цикла. Помогите пожалуйста

Последний раз редактировалось Tabigon; 20.10.2013 в 14:25.
Tabigon вне форума Ответить с цитированием
Старый 20.10.2013, 15:16   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,431
По умолчанию

1) g := 1 должно быть, скорее всего, сразу перед for i:= 1 to n do
2) Вам нужно, скорее всего, проверять не весь Z (abs(z)<= eps), а текущий элемент суммы
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 20.10.2013, 15:25   #3
Tabigon
 
Регистрация: 13.10.2013
Сообщений: 7
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
1) g := 1 должно быть, скорее всего, сразу перед for i:= 1 to n do
2) Вам нужно, скорее всего, проверять не весь Z (abs(z)<= eps), а текущий элемент суммы
Вы натолкнули меня на мысль
написал,что а= этой большой формуле,а потом z = z+a. В проверку вайла вставил а,но оно всё равно отказывается выполнять больше одного раза
Tabigon вне форума Ответить с цитированием
Старый 20.10.2013, 15:55   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,431
По умолчанию

Выложите исправленный код и само задание.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 20.10.2013, 18:05   #5
Tabigon
 
Регистрация: 13.10.2013
Сообщений: 7
По умолчанию

Код:
program Sum_progressii_Cikl;

{$APPTYPE CONSOLE}

uses
  SysUtils, Math;

var
    a, b, c, d, e, f, g, k, l, z, o, p, m, x, eps: Real;
    h, i, j, n: Integer;
begin
Writeln('Vvedite x');
Readln(x);
Readln(eps);
n:=0;
g:=1;
z:=0;
while abs(a)<= eps do
begin
inc(n);
for i:= 1 to n do
g:= g*(2*i);
a:=power(-1,n-1)*power(2,2*n-1)*Power(x,2*n)/g;
z:=z+a;
end;
writeln(z:10:8);
Readln;
end.
Вычислите sin2(x) с точностью EPS по формуле Маклорена, т.е. вычисление суммы ряда нужно продолжать до тех пор, пока абсолютная величина очередного члена ряда не станет меньше EPS. Определите количество членов ряда, которое для этого понадобилось. Формула Маклорена работает правильно (по ней вычисляется а)



________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 20.10.2013 в 18:12.
Tabigon вне форума Ответить с цитированием
Старый 20.10.2013, 19:01   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,431
По умолчанию

Проверьте:
Код:
program Sum_progressii_Cikl;

{$APPTYPE CONSOLE}

uses
  SysUtils, Math;

var
    a, g, x, z, eps: Real;
    n: Integer;
begin
    Writeln('Vvedite x');
    Readln(x);
    Readln(eps);
    n := 1;
    g := 2;
    z := 0;
    a := x * x;
    while abs(a) > eps do
    begin
        z := z + a;
        inc(n);
        g:= (2 * n) * (2 * n - 1) * g;
        a := power(-1, n - 1) * power(2, 2 * n - 1) * Power(x, 2 * n) / g;
    end;
    writeln(z:10:8, ' ', n - 1);
    Readln;
end.
UPD
Исправлена ошибка
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 20.10.2013 в 20:46.
BDA вне форума Ответить с цитированием
Старый 20.10.2013, 19:51   #7
Tabigon
 
Регистрация: 13.10.2013
Сообщений: 7
По умолчанию

Выводит все нули.В моей программе одна ошибка - не повторяется цикл... и я не понимаю почему
Tabigon вне форума Ответить с цитированием
Старый 20.10.2013, 20:14   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,431
По умолчанию

Ой, я забыл поменять знак
while abs(a) > eps do
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 20.10.2013, 20:29   #9
Tabigon
 
Регистрация: 13.10.2013
Сообщений: 7
По умолчанию

Работает! Не могли бы вы объяснить,почему именно больше эпсилон?И ещё,а как мне вывести z,чтобы количество знаков после запятой равнялось эпсилон? Я знаю,что как-то через логарифм,но у меня выдаёт ошибку "неизвестный тип"

Последний раз редактировалось Tabigon; 20.10.2013 в 20:35.
Tabigon вне форума Ответить с цитированием
Старый 20.10.2013, 20:47   #10
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,431
По умолчанию

Я добавляю a, пока оно больше eps. Как только оно станет меньше, то добавлять бессмысленно, т.к. влияние на всю сумму будет незначительным.
Вроде как надо: writeln(z:0:round(-ln(eps) / ln(10)), ' ', n - 1);

UPD
Пожалуйста
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 20.10.2013 в 21:11.
BDA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почти решил задачу(она почему иногда неправильно считает) J-Max Паскаль, Turbo Pascal, PascalABC.NET 2 10.01.2012 16:24
Я решил написать книгу. V@Programmer Свободное общение 3 26.08.2011 17:07
Отличная загадка! Почти решил уже. Fellics{новичок} Свободное общение 8 18.05.2009 19:45
решил подучиться работе с БД Fireleo БД в Delphi 6 20.08.2007 09:01