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

Подправьте немного... - C++

Восстановить пароль Регистрация
 
true_Den
2 / 2 / 0
Регистрация: 18.05.2011
Сообщений: 75
28.05.2011, 22:01     Подправьте немного... #1
Суть задачи:
найти сумму ряда с точностью 0.001 общий член n!/3^n^n
вот написал какой то бред
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include "stdafx.h"
#include <iostream>
#include <сmath>
#include <сstdio>                    
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
        
float n3, nn, a,s,zn,cn,eps,i,n;
 
cout <<"\n Vvedite n"; cin >>n;
eps=0.001;
s = 0; cn = n3 = 1;
i =1; 
while (cn/zn>eps)
{ 
  cn= cn*i;
  n3 =  n3*3;
  nn = pow(i,i);
  zn = n3*nn;
  s=s+cn/zn;
  ++i;
 
cout<<( "\n iskomoe tchislo  " , s);
}
system("pause");
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2011, 22:01     Подправьте немного...
Посмотрите здесь:

C++ Подправьте решение
Подправьте мой код) C++
Подправьте рандом в двумерном массиве (матрице) C++
C++ Массивы! Подправьте прогу!
C++ Подправьте прогу( сортировка массивов)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
S9
Волшебник
 Аватар для S9
643 / 246 / 38
Регистрация: 18.12.2010
Сообщений: 541
28.05.2011, 22:27     Подправьте немного... #2
Цитата Сообщение от true_Den Посмотреть сообщение
написал какой то бред
здесь я с вами полностью согласен
Ваша задача будет выглядеть как-то так, однако на правильность не проверял
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream.h>
#include <math.h>
                
int factorial(int x) 
{ 
  if( x == 0 ) return 1;
  return x * factorial (x - 1);
}
 
void main()
{
  int n,i = 2;
  cin >> n;
  float s = 0.0,eps = 0.001;
  while((factorial(i)/pow(3,pow(i,i))) - ( factorial(i - 1)/pow(3,pow(i - 1,i - 1))) > eps)
  {
    s = s + factorial(i)/pow(3,pow(i,i));
    if(i <= n) i++;
        else break;
  }
  cout << "Value " << s << endl;
}

Не по теме:

"Подправьте немного..." - надо было бы написать "сделайте все за меня"

Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.05.2011, 22:35     Подправьте немного... #3
Цитата Сообщение от S9 Посмотреть сообщение
while((factorial(i)/pow(3,pow(i,i))) - ( factorial(i - 1)/pow(3,pow(i - 1,i - 1))) > eps)
{
s = s + factorial(i)/pow(3,pow(i,i));
Очень эфективно, это как называется? тройной пересчет? подобный бред встечается только в очень глубокой теории численного решения ДУ с автоматическим выбором шага.
Обычно суммируют до тех пор, пока Н-й член ряда больше заданой точности.

Цитата Сообщение от S9 Посмотреть сообщение
void main()
правильно писать
C++
1
int main() //or int main(int argc, char * argv[])
true_Den
2 / 2 / 0
Регистрация: 18.05.2011
Сообщений: 75
28.05.2011, 22:52  [ТС]     Подправьте немного... #4
Цитата Сообщение от S9 Посмотреть сообщение
здесь я с вами полностью согласен
Ваша задача будет выглядеть как-то так, однако на правильность не проверял
C++
1
2
#include <iostream.h>
#include <math.h>

Не по теме:

"Подправьте немного..." - надо было бы написать "сделайте все за меня"

помоему вы написали еще больший бред чем я....
S9
Волшебник
 Аватар для S9
643 / 246 / 38
Регистрация: 18.12.2010
Сообщений: 541
28.05.2011, 22:58     Подправьте немного... #5
Maxwe11 в принципе пишу в С++ как могу (видимо могу не оч.).
Цитата Сообщение от Maxwe11 Посмотреть сообщение
Обычно суммируют до тех пор, пока Н-й член ряда больше заданой точности.
ну это на выбор, думаю здесь разницы особой нет
void main()
Это привычка. К тому же прогу компилил по DOS

Добавлено через 2 минуты
Цитата Сообщение от true_Den Посмотреть сообщение
#include <iostream.h>
#include <math.h>
Интересно, где вы здесь бред увидели?
true_Den
2 / 2 / 0
Регистрация: 18.05.2011
Сообщений: 75
28.05.2011, 23:02  [ТС]     Подправьте немного... #6
Цитата Сообщение от S9 Посмотреть сообщение
while((factorial(i)/pow(3,pow(i,i))) - ( factorial(i - 1)/pow(3,pow(i - 1,i - 1))) > eps)
{
вместо этого можно написать
C++
1
while((factorial(i)/pow(3,pow(i,i)))>=eps
??
S9
Волшебник
 Аватар для S9
643 / 246 / 38
Регистрация: 18.12.2010
Сообщений: 541
28.05.2011, 23:13     Подправьте немного... #7
Вроде нет. А может быть и можно

Добавлено через 59 секунд
Цитата Сообщение от S9 Посмотреть сообщение
while((factorial(i)/pow(3,pow(i,i))) - ( factorial(i - 1)/pow(3,pow(i - 1,i - 1))) > eps)
А так точно можно
true_Den
2 / 2 / 0
Регистрация: 18.05.2011
Сообщений: 75
28.05.2011, 23:14  [ТС]     Подправьте немного... #8
Все равно он в обоих случаях ругается ругается что функция pow перезагружена(
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
28.05.2011, 23:19     Подправьте немного... #9
while((factorial(i)/pow(3,pow(i,i))) - ( factorial(i - 1)/pow(3,pow(i - 1,i - 1))) > eps)
{
s = s + factorial(i)/pow(3,pow(i,i));
ВТФ

Используйте рекуррентную формулу.
S9
Волшебник
 Аватар для S9
643 / 246 / 38
Регистрация: 18.12.2010
Сообщений: 541
28.05.2011, 23:21     Подправьте немного... #10
Цитата Сообщение от true_Den Посмотреть сообщение
ругается что функция pow перезагружена
если попробовать написать новую функцию типа такой
C++
1
2
3
4
5
float func( float x)
{
  float st = pow(x,x);
  return(pow(3,st));
}
и условие цикла записать так
C++
1
while((factorial(i)/func(i)) - ( factorial(i - 1)/func(i - 1)) > eps)
Добавлено через 51 секунду
Цитата Сообщение от Chelioss Посмотреть сообщение
рекуррентную формулу
т.е. как? если не сложно, то можете код привести?
true_Den
2 / 2 / 0
Регистрация: 18.05.2011
Сообщений: 75
28.05.2011, 23:50  [ТС]     Подправьте немного... #11
Цитата Сообщение от S9 Посмотреть сообщение
и условие цикла записать так.....
Вот так работает. только всегда выводит 0.
а если написать так
C++
1
 while((factorial(i)/func(i)) >= eps)
то всегда выводит 0.0246

Добавлено через 9 минут
все таки что то не так в этом коде...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;               
int factorial(int x) 
{ 
  if( x == 0 ) return 1;
  return x * factorial (x - 1);
}
 double func( double x)
{
  double st = pow(x,x);
  return(pow(3,st));
}
int main()
{
  int n,i = 2;
  cin >> n;
  double s = 0.0, eps = 0.001;
 while((factorial(i)/func(i)) >= eps)
  {
 
    s = s + factorial(i)/(func(i));
        if(i <= n) i++;
                else break;
  }
  cout << "Value " << s << endl;
}
Добавлено через 10 минут
Все ушли футбол смотреть чтоли?)
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
28.05.2011, 23:51     Подправьте немного... #12
Пример для факториала:
fact*=i;
S9
Волшебник
 Аватар для S9
643 / 246 / 38
Регистрация: 18.12.2010
Сообщений: 541
28.05.2011, 23:55     Подправьте немного... #13
Цитата Сообщение от true_Den Посмотреть сообщение
то всегда выводит 0.0246
это потому, что цикл выполняется один раз

Chelioss, а как записать реккурентно условие цикла?

Добавлено через 1 минуту
Цитата Сообщение от true_Den Посмотреть сообщение
Все ушли футбол смотреть чтоли?)

пусть выиграет кто угодно (например MU) только не барса
true_Den
2 / 2 / 0
Регистрация: 18.05.2011
Сообщений: 75
29.05.2011, 00:04  [ТС]     Подправьте немного... #14
это потому, что цикл выполняется один раз
а как это исправить?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2011, 00:04     Подправьте немного...
Еще ссылки по теме:

Подправьте код C++
C++ Подправьте код кому не сложно
Нашла на форуме код программы, а он не работает. Подправьте его, пожалуйста C++

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

Или воспользуйтесь поиском по форуму:
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
29.05.2011, 00:04     Подправьте немного... #15
Chelioss, а как записать реккурентно условие цикла?
Текущий член > 0.001

Текущий чел = n! / 3^n^n
Факториал надо вычислять рекуррентно.
Если 3^n^n можно так же, то надо тоже вычислять рекуррентно.
Yandex
Объявления
29.05.2011, 00:04     Подправьте немного...
Ответ Создать тему
Опции темы

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