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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.09.2012, 22:14   #1
Начинающий програм
Форумчанин
 
Аватар для Начинающий програм
 
Регистрация: 22.11.2011
Сообщений: 201
По умолчанию Сумма N слагаемых (Delphi)

Всем доброго времени суток! Помогите пожалуйста найти ошибку в коде!

Мой препод говорит что в этой части ошибка
Код:
 //Вычисление суммы последовательности
 S:=0;
 a:=1;
 for i:=2 to N do
 begin
  S:=S+a;
  a:=a*(x*x)/((2*i)*(2*i-1));
 end;
 writeln('Сумма=',S:10:8);
 writeln;
Код:
Program summarida;
Var
 x,E,a,S,S_1,S_2:real;
 N,i,k_1,k_2:integer;

 //Условие задачи:
 //1. Вычислить сумму N слагаемых ряда 1+x*x/2!+x*x*x*x/4+...
 //2. Вычислить сумму и количество слагаемых, модуль которых больше E и E/10.
BEGIN
 writeln;
 //Ввод числа x
 writeln('Часть 1');
 repeat
  write('Введите x(-1<x<1):');
  readln(x);
  if (x<=-1) or (x>=1) then
   writeln('Ошибка ввода!');
 until (x>-1) and (x<1);

 //Ввод количества слагаемых
 repeat
  write('Введите количество слагаемых N(N>0):');
  readln(N);
  if N<1 then
   writeln('Ошибка ввода!');
 until N>=1;

 //Вычисление суммы последовательности
 S:=0;
 a:=1;
 for i:=2 to N do
 begin
  S:=S+a;
  a:=a*(x*x)/((2*i)*(2*i-1));
 end;
 writeln('Сумма=',S:10:8);
 writeln;

 writeln('Часть 2');

 //Ввод точности E
 write('Введите точность вычисления E:');
 readln(E);

 //Вычисление суммыи количества слагаемых, больше E
 S_1:=0;
 k_1:=0;
 a:=1;
 i:=1;
  while abs(a)>E do
  begin
   S_1:=S_1+a;
   a:=a*(x*x)/((2*i)*(2*i-1));
   K_1:=k_1+1;
   i:=i+1;
  end;

 //Вычисление суммы количества слагаемых, больше E/10
 S_2:=0;
 k_2:=0;
 a:=1;
 i:=1;
  while abs(a)>E/10 do
  begin
   S_2:=S_2+a;
   a:=a*(x*x)/((2*i)*(2*i-1));
   K_2:=k_2+1;
   i:=i+1;
  end;

 //Вывод результатов
 writeln('Точное значение функции=',((exp(x)+exp(-x))/2):10:8);
 writeln('Точность вычисления=',E);
 writeln('Приближенное значение для  E=',S_1:10:8);
 writeln('Количество слагаемых=',k_1);
 writeln;
 writeln('Точность вычисления=',E/10);
 writeln('Приближенное значение для E/10=',S_2:10:8);
 writeln('Количество слагаемых=',k_2);
 writeln;
END.

Последний раз редактировалось Начинающий програм; 27.09.2012 в 22:35.
Начинающий програм вне форума Ответить с цитированием
Старый 27.09.2012, 22:27   #2
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

возможно вы саму формулу последовательности не так ввели... по вашим записям получается:

а(n) = ( a(n-1) * x * x) / ( 2 * n ) * ((2 * n - 1 ))

где n -номер члена последовательности...

сбросьте само условие последовательности... что бы увидеть ошибку...

Исправление: напишите условие ряда для n - ого члена...
пишу код не только за печеньки

Последний раз редактировалось VIK_aka_TOR; 27.09.2012 в 22:37.
VIK_aka_TOR вне форума Ответить с цитированием
Старый 27.09.2012, 22:28   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Мой препод говорит что в этой части ошибка
Код правильный (синтаксически), но он прав. Вы ситаете другой ряд, а не
Цитата:
//Условие задачи:
//1. Вычислить сумму N слагаемых ряда 1+x*x/2!+x*x*x*x/4+...
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 27.09.2012, 22:40   #4
Начинающий програм
Форумчанин
 
Аватар для Начинающий програм
 
Регистрация: 22.11.2011
Сообщений: 201
По умолчанию

Спасибо! Я попробую исправить
Начинающий програм вне форума Ответить с цитированием
Старый 27.09.2012, 22:57   #5
Начинающий програм
Форумчанин
 
Аватар для Начинающий програм
 
Регистрация: 22.11.2011
Сообщений: 201
По умолчанию

Иак тоже не верно?
Код:
 //Вычисление суммы последовательности
 S:=0;
 a:=1;
 for i:=1 to N do
 begin
  S:=S+a;
  a:=a*(x*x)/(2*i);
 end;
 writeln('Сумма=',S:10:8);
 writeln;
Начинающий програм вне форума Ответить с цитированием
Старый 27.09.2012, 23:04   #6
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

Цитата:
Сообщение от Начинающий програм Посмотреть сообщение
Иак тоже не верно?
Код:
 //Вычисление суммы последовательности
 S:=0;
 a:=1;
 for i:=1 to N do
 begin
  S:=S+a;
  a:=a*(x*x)/(2*i);
 end;
 writeln('Сумма=',S:10:8);
 writeln;
напишите для n-го члена формулу... или же продолжите ряд... тогда отвечу точно... но
Код:
  a:=a*(x*x)/(2*i);
точно не верно...
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 27.09.2012, 23:32   #7
Leshii
Форумчанин
 
Регистрация: 26.07.2011
Сообщений: 376
По умолчанию

скорее всего так

Код:
a:=0;S:=0;
fact:=1;
low:=2;
while low <= high do begin
    ....
   for i:=2 to low do begin
     fact:=fact*i;
   end;
     a:=a+1+exp(low*ln(x))/fact;
     low:=low+2;
end;
Мне одному показалось, или там таки факториал возле двойки? Малость подправил, но точность в результате не гарантирую.
Люблю на ты.Я человек простой

Последний раз редактировалось Leshii; 27.09.2012 в 23:40.
Leshii вне форума Ответить с цитированием
Старый 27.09.2012, 23:37   #8
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

Цитата:
Сообщение от Leshii Посмотреть сообщение
скорее всего так

Код:
a:=1;
fact:=1;
low:=2;
while low <= high do begin
    ....
     fact:=fact*low;
     a:=a*exp(low*ln(x))/fact;
     low:=low+2;
end;
Мне одному показалось, или там таки факториал возле двойки?
1. возле двойки факториал... а возле четверки... его нету... вероятнее всего забыли дописать...
2. факториал вы считаете неправильно
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 27.09.2012, 23:44   #9
Leshii
Форумчанин
 
Регистрация: 26.07.2011
Сообщений: 376
По умолчанию

Цитата:
2. факториал вы считаете неправильно
Заметил уже когда напечатал. Потом посмотрел что при 4! будет не 24, а 8 и уже тогда понял фейл. Добавил там же вложенный цикл.
Люблю на ты.Я человек простой
Leshii вне форума Ответить с цитированием
Старый 28.09.2012, 00:54   #10
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

Цитата:
Сообщение от Начинающий програм Посмотреть сообщение
Всем доброго времени суток! Помогите пожалуйста найти ошибку в коде!

Мой препод говорит что в этой части ошибка
Код:
 //Вычисление суммы последовательности
 S:=0;
 a:=1;
 for i:=2 to N do
 begin
  S:=S+a;
  a:=a*(x*x)/((2*i)*(2*i-1));
 end;
 writeln('Сумма=',S:10:8);
 writeln;
что бы в ней все норм считалось... учитывая что после 2! будет 4! 6! 8! и т.д. то нужно всего лишь в цикле i начинать с 1 ... и все будет норм, с учетом того, что будет вычисляться і+1 член последовательности...
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сумма n слагаемых с заданной точностью (C++) addibos Помощь студентам 9 25.02.2014 20:16
Вычислить сумму слагаемых при некоторых х и у Julila Помощь студентам 8 06.01.2011 22:37
Delphi7. Сумма n слагаемых заданного вида, основные операторы цикла. arctica Помощь студентам 0 12.12.2010 21:13
Разбиение натурального числа на 3 слагаемых Neitrosha Помощь студентам 13 27.10.2010 18:45
вывод слагаемых совершенного числа fs444 Общие вопросы C/C++ 4 24.03.2010 23:04