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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.10.2009, 20:59   #1
-SG-
Пользователь
 
Регистрация: 08.10.2009
Сообщений: 13
Стрелка Pascal. Помогите дорешать задачу (тема - ряды)

Условие:
При некоторых заданных x, N и E, определяемых вводом, вычислить:

a) сумму N слагаемых заданного вида;
b) сумму тех слагаемых, которые по абсолютной величине больше Е.

Для случая b выполнить суммирование для двух значений Е, отличающихся на порядок, и при этом определить количество слагаемых, включенных в сумму. Сравнить результаты с точным значением функции, для которой данная сумма определяет приближенное значение при x,
лежащем в интервале (-R, R).





Вот что есть:
Код:
{$APPTYPE CONSOLE}
uses
RusConsole, StopOnEnd;

const
emax = 0.1;

var
x,e,a,s,b: real;
n,i,j: integer;

begin
  Write('x=');
  ReadLn(x);
  if abs(x)>=1 then
  Write ('Неверно введено x')
  else
    begin
    Write('n=');
    ReadLn(n);
    if n <= 0 then
    WriteLn('Неверно введено n')
    else
      begin
      b:= sqr(x);
      s:= 0;
      i:= 1;
      a:= 1;
      while (i <= n) do
        begin
        s:=s+a;
        a:=a*b*(2*i-1)/(2*i);
        i:=i+1;
        end;
      WriteLn('Последовательность из ',n,' слагаемых: ',s:4:2);
      WriteLn('Левая часть: ',1/sqrt(1-sqr(x)):0:5);
      WriteLn('Введите E <',emax:0:5, ':');
      ReadLn(e);
      if (e > emax) or (e<=0) then
      WriteLn('Неверно введено E')
      else
      for j := 1 to 2 do
        begin
        b:=sqr(x);
        s:=0;
        i:=1;
        a:=1;
        while (abs(a)>E) do
          begin
            s:=s+a;
            a:=a*b*(2*i-1)/(2*i);
            i:=i+1;
          end;
       WriteLn('E = ',e:4:2,' Количество слагаемых: ',(i-1),' Сумма= ',s:4:2);
       e:=e/10;
        end;
      end;
    end;
end.
Помогите подогнать к условию. Или правильно все?

Последний раз редактировалось -SG-; 15.10.2009 в 21:43.
-SG- вне форума Ответить с цитированием
Старый 16.10.2009, 12:30   #2
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Код:
Write('x=');
Я бы сообщила о допустимых значениях, тоже и в
Код:
 Write('n=');
begin
Код:
    b:= sqr(x);
зачем вычисляем корень? необходимо х^2, в С это функция pow(x,2), думаю что в Паскале есть что-то подобное, в крайнем случае x*x;
Код:
  s:= 0;
По моему лучше сразу s:= 1;, тогда
Код:
 i:= 1;
      a:= 1;
      while (i <= n) do
        begin
       a:=a*b*(2*i-1)/(2*i);
       s:=s+a;
       i:=i+1;
        end;
далее
Код:
WriteLn('Левая часть: ',1/sqrt(1-sqr(x)):0:5);
, почему корень из х?, ну далее sqr(x)??.
Синтаксис проверить не могу. На Паскале не программирую.
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 16.10.2009, 12:46   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Sweta, вы видимо не знаете паскаля(в Делфи между прочим так же).
Цитата:
зачем вычисляем корень? необходимо х^2, в С это функция pow(x,2), думаю что в Паскале есть что-то подобное, в крайнем случае x*x;
sqr это квадрат.
Цитата:
, почему корень из х?, ну далее sqr(x)??.
правильно левая часть вычесляется.
sqrt - корень.
sqr - квадрат.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 16.10.2009, 16:50   #4
-SG-
Пользователь
 
Регистрация: 08.10.2009
Сообщений: 13
По умолчанию

Задача сдана в следующем виде:
Код:
{$APPTYPE CONSOLE}
uses
  RusConsole, StopOnEnd;

const
  EMax=0.1;

var
  x,e,a,s,b: real;
  n,i,j: integer;

begin
  Write('x=');
  ReadLn(x);
  if Abs(x)>=1 then
    Write('Неверно введено x')
  else
  begin
    WriteLn('Точное значение = ', (1/Sqrt(1-x*x)):0:8);
    Write('n=');
    ReadLn(n);
    if n<=0 then
      WriteLn('Неверно введено n')
    else
    begin
      b:=Sqr(x);
      s:=0;
      i:=1;
      a:=1;
      while (i<=n) do
      begin
        s:=s+a;
        a:=a*b*(2*i-1)/(2*i);
        i:=i+1;
      end;
      WriteLn('Последовательность из ', n,' слагаемых: ', s:0:8);
      Write('Введите E <', EMax:3:2, ': ');
      ReadLn(e);
      if (e>EMax) or (e<=0) then
        WriteLn('Неверно введено E')
      else
        for j:= 1 to 2 do
        begin
          b:=Sqr(x);
          s:=0;
          i:=1;
          a:=1;
          while(Abs(a)>E) do
          begin
            s:=s+a;
            a:=a*b*(2*i-1)/(2*i);
            i:=i+1;
          end;
          WriteLn('E = ', e:0:8, ' Количество слагаемых: ', (i-1), ' Сумма= ', s:0:8);
          e:=e/10;
        end;
    end;
  end;
end.
Всем спасибо.
-SG- вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите дорешать задачу pavelstraut Общие вопросы C/C++ 4 23.07.2009 16:53
Помогите дорешать задачу на While Andrux Помощь студентам 12 29.12.2008 21:24
Помогите, пожалуйста, решить задачу на Turbo Pascal. Тема: записи. Morrigan13 Помощь студентам 1 28.03.2008 21:09