Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
VanDro
0 / 0 / 0
Регистрация: 15.09.2011
Сообщений: 14
#1

Ошибка в програмке - C++

25.09.2011, 22:06. Просмотров 368. Ответов 7
Метки нет (Все метки)

Доброго времени суток уважаемые форумчане. Помогите, не могу найти причину неправильной работы програмки:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<iostream.h>
#include<math.h>
#include<conio.h>
main()
{float sum=0,e,t;
int i=0,fact=1;
cin>>e;
do {
fact=fact*i;
t=(pow(-2,i))/fact;
i++;
sum=sum+t;}
while (fabs(t)>e && fabs(sum)>e);  
cout<<sum<<"   "<<fact;
getch();
return 0;}
Вот условие задачи:
Вычислить бесконечную сумму с заданной точ¬ностью е (е > 0). Считать, что требуемая точность достиг¬нута, если вычислена сумма нескольких первых слагаемых и очередное слагаемое оказалось по модулю меньше, чем е,— это и все последующие слагаемые можно уже не учитывать. Вычислить:
"бесконечная сума" ((-2)в степени i) / i!
i = 0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.09.2011, 22:06     Ошибка в програмке
Посмотрите здесь:

C++ fputc не работает, укажите где в програмке ошибка

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Thinker
Эксперт C++
4219 / 2193 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.09.2011, 22:10     Ошибка в програмке #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
#include<math.h>
 
const double eps = 0.001;
 
int main()
{
   double sum, p;
   int i = 0;
   p = sum = 1;
   while (fabs(p) >= eps)
   {
      i++;
      p *= -2.0/i;
      sum += p;
   }
   std::cout << sum;
   std::cin.get();
   return 0;
}
easybudda
Эксперт С++
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
25.09.2011, 22:12     Ошибка в програмке #3
Цитата Сообщение от VanDro Посмотреть сообщение
fact=fact*i;
первое, что заметил - fact при первом же проходе обнулится, и так нулём и останется...
VanDro
0 / 0 / 0
Регистрация: 15.09.2011
Сообщений: 14
25.09.2011, 22:25  [ТС]     Ошибка в програмке #4
Цитата Сообщение от Thinker Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
#include<math.h>
 
const double eps = 0.001;
 
int main()
{
   double sum, p;
   int i = 0;
   p = sum = 1;
   while (fabs(p) >= eps)
   {
      i++;
      p *= -2.0/i;
      sum += p;
   }
   std::cout << sum;
   std::cin.get();
   return 0;
}
Спс! Кст. наверное, епс не константа- мы ее вводим, а в while не два условия?, да и суме вы присвоили 1... Вы не подумайте, я не наежаю, я в этом деле (С++) не очень, просто уточняю... сорри за кривое условие. -2 в степени і, разделить на і факториал.

Добавлено через 4 минуты
Блин, это я выложил код старее, і=1, но! Факториал не увел., походу цикл прекращается рано... Это к моему коду...
RaiaNKnight
96 / 70 / 7
Регистрация: 29.06.2011
Сообщений: 464
Записей в блоге: 1
25.09.2011, 22:28     Ошибка в програмке #5
Можно вот так сделать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<iostream.h>
#include<math.h>
#include<conio.h>
main()
{
  float sum=0,e,t;
  int i=0,fact=1,p=1;
  cin>>e;
  do
  {
    t=p/fact;
    i++;
    p=-(p<<1);
    fact=fact*i;
    sum=sum+t;
  }
  while(fabs(t)>e && fabs(sum)>e);
  cout<<sum<<"   "<<fact;
  getch();
  return 0;
}
Thinker
Эксперт C++
4219 / 2193 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.09.2011, 22:33     Ошибка в програмке #6
Цитата Сообщение от VanDro Посмотреть сообщение
Спс! Кст. наверное, епс не константа- мы ее вводим, а в while не два условия?, да и суме вы присвоили 1... Вы не подумайте, я не наежаю, я в этом деле (С++) не очень, просто уточняю... сорри за кривое условие. -2 в степени і, разделить на і факториал.
eps как пример, можете вводить ее с клавиатуры, только ее переменной объявить. В while одно условие. Так как первое слагаемое суммы 1, вот и присвоил.
VanDro
0 / 0 / 0
Регистрация: 15.09.2011
Сообщений: 14
25.09.2011, 23:27  [ТС]     Ошибка в програмке #7
не пашет...
easybudda
Эксперт С++
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
26.09.2011, 00:21     Ошибка в програмке #8
Цитата Сообщение от VanDro Посмотреть сообщение
не пашет...
А должна бы? Программа всё-таки, не лошадь...
Код
andrew@debnout:~/cpp/numbers$ g++ -o thinker_sum thinker_sum.c 
andrew@debnout:~/cpp/numbers$ ./thinker_sum 
0.135379
andrew@debnout:~/cpp/numbers$ cat thinker_sum.c 
#include<iostream>
#include<math.h>
 
const double eps = 0.001;
 
int main()
{
   double sum, p;
   int i = 0;
   p = sum = 1;
   while (fabs(p) >= eps)
   {
      i++;
      p *= -2.0/i;
      sum += p;
   }
   std::cout << sum;
   std::cin.get();
   return 0;
}

andrew@debnout:~/cpp/numbers$
Yandex
Объявления
26.09.2011, 00:21     Ошибка в програмке
Ответ Создать тему
Опции темы

Текущее время: 02:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru