Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вычисление суммы 
V
    Опции темы
AntonPavlov
Дата 13.11.2012, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 28.5.2010

Репутация: нет
Всего: нет



Необходимо вычислить сумму
http://s2.ipicture.ru/uploads/20121113/JbR3vyKw.png
Вот код. Что не так? 
Код

#include <stdio.H>
#include <math.h>
#include <conio.h>

int main()
{
double x, y, f, eps;
int j;
eps = 0.00001;
x = 2.15;
f = 1;
y = 1;
j=0;
while (abs(y)>eps)
    {
        f = f*j;
        y += (log(j*x)/f);
        j++;
    }    
printf("%.3lf", y);
getch();
return 0;
}


Это сообщение отредактировал(а) AntonPavlov - 13.11.2012, 01:31
PM MAIL   Вверх
Фантом
Дата 13.11.2012, 01:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: нет
Всего: 49



Цитата(AntonPavlov @  13.11.2012,  01:45 Найти цитируемый пост)
Что не так? 


Что Вы хотели выразить этой строкой:
Код

while (abs(y)>y)

?  smile 
PM   Вверх
AntonPavlov
Дата 13.11.2012, 01:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 28.5.2010

Репутация: нет
Всего: нет



ооопс, опечатка вышла)
исправил код.
но все равно не выходит. 
PM MAIL   Вверх
feodorv
Дата 13.11.2012, 01:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 11
Всего: 45



Цитата(AntonPavlov @  13.11.2012,  01:45 Найти цитируемый пост)
Что не так? 

y - это сумма, а не очередной член ряда. Поэтому Вы вряд ли выполните условие abs(y)<=eps


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
AntonPavlov
Дата 13.11.2012, 01:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 28.5.2010

Репутация: нет
Всего: нет



а теперь:
Код

#include <stdio.H>
#include <math.h>
#include <conio.h>
#include <iostream>
using namespace std;

int main()
{
double x, y, sum, f, eps;
int j;
eps = 0.001;
x = 2.15;
f = 1;
y = 1;
sum = 0;
j=0;
while (abs(y)<=eps)
    {
        f = f*j;
        y = (log(j*x)/f);
        sum = y+sum;
        j++;
    }    
printf("%.3lf", sum);
getch();
return 0;
}

PM MAIL   Вверх
volatile
Дата 13.11.2012, 01:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Цитата(AntonPavlov @  13.11.2012,  01:45 Найти цитируемый пост)
j=0;

Цитата(AntonPavlov @  13.11.2012,  01:45 Найти цитируемый пост)
 f = f*j;

а теперь у вас факториал, много раз умножается на 0.

Цитата(AntonPavlov @  13.11.2012,  01:45 Найти цитируемый пост)
using namespace std;

интересно что вас заставило вставить данную инструкцию? 

PM MAIL   Вверх
AntonPavlov
Дата 13.11.2012, 02:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 28.5.2010

Репутация: нет
Всего: нет



исправил на j=1
PM MAIL   Вверх
volatile
Дата 13.11.2012, 02:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Цитата(AntonPavlov @  13.11.2012,  01:45 Найти цитируемый пост)
while (abs(y)<=eps)

Ну а это зачем вы сделали? Было же правильно

Цитата(AntonPavlov @  13.11.2012,  00:45 Найти цитируемый пост)
while (abs(y)>eps)

Кто вам это говорил делать?

За вами блин, не уследишь...
Шаловливые ручки...
спокойной ночи!



PM MAIL   Вверх
feodorv
Дата 13.11.2012, 08:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 11
Всего: 45



Итого:
Код

#include <stdio.H>
#include <math.h>
#include <conio.h>

int main()
{
  double x, y, sum, f, eps;
  int j;

  eps = 1.E-9;
  x = 2;
  f = 1;
  y = 1;
  sum = 0;

  for( j = 1; j < 3 || fabs(y) > eps; j++)
  {
    f *= j;
    y = log(x * j) / f;
    sum += y;
    printf( "j = %d, f = %f, y = %f\n", j, f, y);
  }

  printf( "sum = %.9f, value = %.9f\n", sum, 0.603782863 + 1.718281828 * log(x));
  getch();
  return 0;
}

 smile 

PS 0.603782863 - это значение суммы при x = 1; 1.718281828 - e-1 (основание натурального логарифма за минусом единицы).

Добавлено через 13 минут и 43 секунды
На самом деле, условие fabs(y) > eps - неверное. Потому что при x, равном 1./n (1, 1/2, 1/3, 1/4 etc), очередной логарифм обращается в 0, и раньше времени срабатывает это условие. При x, близком к 1./n, log(n*x) будет близок к 0, и условие тоже сработает раньше времени.



--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0474 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.