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

Цикл заканчивается не так, как задано в условии - C++

Восстановить пароль Регистрация
 
Александр_Алекс
4 / 1 / 1
Регистрация: 08.12.2013
Сообщений: 136
30.01.2014, 20:22     Цикл заканчивается не так, как задано в условии #1
Здравствуйте! Есть задача: вычислить бесконечную сумму выражения 1+http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{1}{1!}+http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{1}{2!}+...+http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{1}{n!} с точностью до http://www.cyberforum.ru/cgi-bin/latex.cgi?\varepsilon = 0.001.
Проблема в том, что цикл заканчивается досрочно. В результате программа выдает 2. Начальное значение переменной res=1, значение cur при первом проходе равно 1, res+cur=2, что и выдает программа.
Пишу в Visual Studio 2010
Заранее спасибо!


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
29
30
// Lab6.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include "iostream"
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    int n,fact;//factorial, schetchik
    float res,cur;//tekyschee znachenie, hranenie tekyschego re-ta vurazheniya
    float const eps = 0.001;
    cout<<"Programma vuchislyaet beskonechnyju symmy vurazhrniya 1+(1/1!)+(1/2!)+(1/n!) s tochnsostiu do e=0.001"<<endl;
    res=1;
    n=1;
    fact=1;
    do
    {
        cur=1/n;
        res=res+cur;
        fact++;
        n=n*fact;
    } while (cur >= eps);
    cout<<"Symma ravna: "<<res<<endl;;
    system("pause");
 
 
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.01.2014, 20:22     Цикл заканчивается не так, как задано в условии
Посмотрите здесь:

C++ Почему цикл не заканчивается???
C++ Цикл не работает так как надо
C++ Цикл почему-то не заканчивается.
есть указатель на конец файла и он самоинициализируется, но не в месте объявления, а когда учавствует в условии. Почему так? C++
C++ при работе рекурсивной функции заканчивается стек и программа соответственно; как сделать так, чтобы она писала "стек закончился"?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kventin_zhuk
БНТУ ФИТР
 Аватар для kventin_zhuk
214 / 154 / 15
Регистрация: 26.12.2012
Сообщений: 382
30.01.2014, 20:34     Цикл заканчивается не так, как задано в условии #2
Александр_Алекс,
C++
1
cur=1/n;
Результатом деления целого на целое является целое число, которое уже неявно приводится к типу float.

т.е cur = 1/2 будет равно 0 на второй итерации.

Выход:

C++
1
cur=1.0/n;
GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
30.01.2014, 20:38     Цикл заканчивается не так, как задано в условии #3
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"
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    int n,fact;//factorial, schetchik
    float res,cur;//tekyschee znachenie, hranenie tekyschego re-ta vurazheniya
    float const eps = 0.001;
    cout<<"Programma vuchislyaet beskonechnyju symmy vurazhrniya 1+(1/1!)+(1/2!)+(1/n!) s tochnsostiu do e=0.001"<<endl;
    res=1;
    n=1;
    fact=1;
    do
    {
        cur=1/n; // 1 / 1 = 1
        res=res+cur; // 1 + 1 = 2
        fact++; // 2
        n=n*fact; // 2
    } while (cur >= eps); // 1 > eps
    cout<<"Symma ravna: "<<res<<endl;; // res = 2
    system("pause");
 
 
    return 0;
}
Александр_Алекс
4 / 1 / 1
Регистрация: 08.12.2013
Сообщений: 136
30.01.2014, 21:04  [ТС]     Цикл заканчивается не так, как задано в условии #4
kventin_zhuk, большое вам спасибо! Я так понял, если я обозначил переменную float или double, то все числа числа которые участвуют в выражении должны быть с точкой, верно? Помню препод рассказывал про такую фишку в матлаб, он тогда объяснял но никто не понял почему)
Еще вопрос, в в Visual Studio 2010 есть что-то вроде дебаггера? Типо как в турбо паскале, вписываешь переменные и выполняешь программу пошагово, и при этом видно какие значение принимают переменные.
k1-801
 Аватар для k1-801
4 / 4 / 2
Регистрация: 07.01.2013
Сообщений: 135
30.01.2014, 23:14     Цикл заканчивается не так, как задано в условии #5
Цитата Сообщение от Александр_Алекс Посмотреть сообщение
Еще вопрос, в в Visual Studio 2010 есть что-то вроде дебаггера? Типо как в турбо паскале, вписываешь переменные и выполняешь программу пошагово, и при этом видно какие значение принимают переменные.
Точно не помню, либо F10 и F11, либо F9 и F10. Одно делает пошагово без захода в функции, другое пошагово с заходом в функции (с последним аккуратнее, например, с cout). Использование: нажимаем кнопку - запускается дебаггер. Далее любая из этих кнопок делает шаг соответствующего типа. Внизу окна есть странная штука где можно менять текущие значения переменных.
Yandex
Объявления
30.01.2014, 23:14     Цикл заканчивается не так, как задано в условии
Ответ Создать тему
Опции темы

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