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

почему выводит 0? - C++

Восстановить пароль Регистрация
 
kornelyk
 Аватар для kornelyk
1 / 1 / 0
Регистрация: 07.01.2012
Сообщений: 141
11.12.2013, 16:47     почему выводит 0? #1
Даны неотрицательные целые числа a, b. Найти F(a, b), где F=(M!+N!)/(M+N)!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
 int fact(int n);
int main() {
    cout << "Vvedite 2 chisla = " << endl;
    int n, m, f;
    cin >> n >> m;
    f=(fact(n) - fact(m)) / (fact(n + m));
    cout << f;
   return 0;
}
int fact(int n)
{
    int res = 1;
    for (int i = 1; i <= n; ++i)
    {
        res *= i;
    }
    return res;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.12.2013, 16:47     почему выводит 0?
Посмотрите здесь:

C++ Почему не выводит m?
C++ Почему выводит адреса?
C++ Почему не выводит?
Почему float выводит 0.0 ? C++
Почему выводит бред C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Peperovich
43 / 43 / 4
Регистрация: 17.05.2011
Сообщений: 162
11.12.2013, 17:01     почему выводит 0? #2
Потому что f типа int, а при делении скорее всего получается значение типа 0.023345, вот он и окргуляет до нуля. К тому в задании у тебя в числителе +, а в коде -.
kornelyk
 Аватар для kornelyk
1 / 1 / 0
Регистрация: 07.01.2012
Сообщений: 141
11.12.2013, 17:03  [ТС]     почему выводит 0? #3
Цитата Сообщение от Peperovich Посмотреть сообщение
Потому что f типа int, а при делении скорее всего получается значение типа 0.023345, вот он и окргуляет до нуля. К тому в задании у тебя в числителе +, а в коде -.
тогда получается надо заменить на double?
Peperovich
43 / 43 / 4
Регистрация: 17.05.2011
Сообщений: 162
11.12.2013, 17:03     почему выводит 0? #4
Да. И поменяй тип возвращаемого значения у fact на double.
kornelyk
 Аватар для kornelyk
1 / 1 / 0
Регистрация: 07.01.2012
Сообщений: 141
11.12.2013, 17:08  [ТС]     почему выводит 0? #5
а не подскажешь где именно?

Добавлено через 1 минуту
потому что заменяя тип ничего не меняется

Добавлено через 2 минуты
C++
1
2
3
4
5
cout << "Vvedite 2 chisla = " << endl;
    int n, m;
    double f;
    cin >> n >> m;
    f=(fact(n) - fact(m)) / (fact(n + m));
DmitryM5
Love~
 Аватар для DmitryM5
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 743
Записей в блоге: 1
11.12.2013, 17:11     почему выводит 0? #6
Цитата Сообщение от kornelyk Посмотреть сообщение
а не подскажешь где именно?

Добавлено через 1 минуту
потому что заменяя тип ничего не меняется

Добавлено через 2 минуты
C++
1
2
3
4
5
cout << "Vvedite 2 chisla = " << endl;
    int n, m;
    double f;
    cin >> n >> m;
    f=(fact(n) - fact(m)) / (fact(n + m));

C++
1
2
3
double f;
   
    f=(double)(fact(n) - fact(m)) / (fact(n + m));
Либо
C++
1
double fact(int n)
Peperovich
43 / 43 / 4
Регистрация: 17.05.2011
Сообщений: 162
11.12.2013, 17:11     почему выводит 0? #7
Выше написал, поменяй у функции которая вычисляет факториал на double.
kornelyk
 Аватар для kornelyk
1 / 1 / 0
Регистрация: 07.01.2012
Сообщений: 141
11.12.2013, 17:12  [ТС]     почему выводит 0? #8
вот про тип возвращаемого значения не понятно

Добавлено через 46 секунд
спасибо всем огромное!!
Peperovich
43 / 43 / 4
Регистрация: 17.05.2011
Сообщений: 162
11.12.2013, 17:14     почему выводит 0? #9
Да, что не понятно, тут либо как DmitryM5 написал сделать, т.е. преобразовать к double, либо сделать чтобы функция double возвращала. Иначе у тебя int / int, вот и приводится результат к int.
kornelyk
 Аватар для kornelyk
1 / 1 / 0
Регистрация: 07.01.2012
Сообщений: 141
11.12.2013, 17:17  [ТС]     почему выводит 0? #10
C++
1
double fact(int n)
так не работает
а с double перед самими примером все отлично)
Peperovich
43 / 43 / 4
Регистрация: 17.05.2011
Сообщений: 162
11.12.2013, 17:33     почему выводит 0? #11
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>
using namespace std;
 double fact(int n);
int main()
{
        cout << "Vvedite 2 chisla = " << endl;
        int n, m;
        double f;
        cin >> n >> m;
        f=(fact(n) + fact(m)) / (fact(n + m));
        cout << f;
        return 0;
}
double fact(int n)
{
        int res = 1;
        for (int i = 1; i <= n; ++i)
        {
                res *= i;
        }
        return res;
}
Выхлоп:почему выводит 0?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.12.2013, 17:43     почему выводит 0?
Еще ссылки по теме:

Почему выводит ноль? C++
C++ Выводит не правильно, почему?
C++ почему выводит 0?

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

Или воспользуйтесь поиском по форуму:
DmitryM5
Love~
 Аватар для DmitryM5
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 743
Записей в блоге: 1
11.12.2013, 17:43     почему выводит 0? #12
Цитата Сообщение от kornelyk Посмотреть сообщение
C++
1
double fact(int n)
так не работает
а с double перед самими примером все отлично)
Должно работать,что-то вы не так делаете.
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
#include <iostream>
 
using namespace std;
 
 double fact(int n);
 
int main() {
    cout << "Vvedite 2 chisla = " << endl;
    int n, m;
    double f;
    cin >> n >> m;
    f=(fact(n) - fact(m)) / (fact(n + m));
    cout << f<<endl;
    system("pause");
   return 0;
}
double fact(int n)
{
    double res = 1;
    for (int i = 1; i <= n; ++i)
    {
        res *= i;
    }
    return res;
}
Добавлено через 4 минуты
to Peperovich
Получается все равно что res типа int, а функция возвращает double...
Видно неявное приведение типа происходит,ну да ладно.
Yandex
Объявления
11.12.2013, 17:43     почему выводит 0?
Ответ Создать тему
Опции темы

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