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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2011, 02:08   #1
Начинающий програм
Форумчанин
 
Аватар для Начинающий програм
 
Регистрация: 22.11.2011
Сообщений: 201
По умолчанию функция arth(x) Delphi

Я решил задачу, но во втором случае при вводе х программа вылетает. Подскажите пожалуйста, что не так в коде.



Условие.
При некоторых заданных x, E, n определяемых вводом вычислить: 1) сумму n слагаемых заданного вида. 2) а так же сумму тех слагаемых которые по абсолютной величине не больше E. Для второго случая выполнить суммирование для двух значений Е отличающихся на порядок то есть для Е и Е/10 при этом определить количество слагаемых включенных в сумму. Для пункта 1 и 2 сравнить результат с точным значением функции.


arth(x)=x+(x^3)/3+(x^5)/5+(x^7)/7+...=(x^(2n+1))/(2n+1), abs(x)<1, n от нуля до беcконечности.

Код:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  windows;
var
 choice:integer;
 error:boolean;
 i,n,k:integer;
 tz,s,a,x,E:real;
 exit:char;
begin
 setconsolecp(1251);
 setconsoleoutputcp(1251);

 repeat
  writeln('1.Сумма N слагаемых.');
  writeln('2.Сумма с точностью Е.');
  writeln('3.Выход.');
  repeat
   writeln;
   write('Ваш выбор: ');readln(choice);
   error:=(choice<1)or(choice>3);
   if error then
   writeln('Ошибка ввода!');
  until not error;
  if choice<>3 then
                begin
                  write('Введите x: '); readln(x);
                  writeln('Точное значение ',ln((x+1)/(x-1))/2:11:9);
                  if abs(x)>1 then while abs(x)>1 do
                                     begin
                                       writeln('Ошибка ввода! ');
                                       readln(x);
                                     end;


                 if choice=1 then
                              begin
                               write('Введите количество слагаемых: ');readln(n);
                               s:=0;
                               a:=x;
                               for i:=0 to n-1 do
                               begin
                                s:=s+a;
                                a:=a*x*x*(2*i+1)/(2*i+3);
                               end;
                               writeln('Приближенное значение: ',s:11:9)
                              end

                             else

                             //choice=2

                              begin
                               write('Введите точность:');
                               readln(E);
                               while (E<0) or (E>1) do
                                begin
                                 writeln('Ошибка ввода');
                                 readln(E);
                                end;
                                i:=0;

                                  s:=0;
                                  a:=x;
                                while abs(a)>E do
                                 begin

                                    //for i:=0 to n-1 do
                                    s:=s+a;
                                    a:=a*x*x*(2*i+1)/(2*i+3);
                                    i:=i+1;
                                 end;
                                writeln('Сумма ',i,' слагаемых, модуль которых больше ',E:11:9,' равна: ',s:11:9);
                                while abs(a)>E/10 do
                                 begin
                                //s:=0;
                                //a:=x;
                                //i:=0;
                                  s:=s+a;
                                  a:=a*x*x*(2*i+1)/(2*i+3);
                                  i:=i+1;
                                end;
                               writeln('Сумма ',i,' слагемых, модуль которых больше ',(E/10):11:9,' равна: ',s:11:9);
                               //writeln('Точность: ',tz:11:9);
                               writeln('Приближенное значение: ',s:11:9);
                               writeln('Слагаемых: ',i)
                              end;
                 write('Завершить работу?(Y/N)');
                 readln(exit)
                end

               else
 exit:='y';
 until (Exit='y') or (Exit='Y')
end.
Начинающий програм вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi рекурсивная функция jetmax Помощь студентам 0 08.12.2011 17:23
Delphi функция kop Помощь студентам 3 01.12.2011 10:43
Функция массив (Delphi) kop Помощь студентам 0 09.11.2011 20:21
Функция delphi azalivin Помощь студентам 2 15.03.2011 13:37
Функция и delphi LizaVeta БД в Delphi 4 25.05.2010 09:44