Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
kornelyk
1 / 1 / 0
Регистрация: 07.01.2012
Сообщений: 145
#1

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

11.12.2013, 16:47. Просмотров 614. Ответов 11
Метки нет (Все метки)

Даны неотрицательные целые числа 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.12.2013, 16:47
Ответы с готовыми решениями:

почему выводит 0?
Даны неотрицательные целые числа a, b. Найти F(a, b), где F=(M!+N!)/(M+N)! ...

Почему не выводит?
В одномерном массиве все отрицательные элементы переместить в начало массива,...

Почему не выводит m?
С начала суток прошло N секунд (N — целое). Найти количество полных минут,...

Почему выводит нули? #c++
int i; int p = 1; for(i=1; i&lt;=n+1; i++){ x = (1/2)*(cos((2*i+5)/(18*(n+1)))...

почему float выводит 0 ?
машинный нуль или в чем проблема? for(i=0; i&lt;k; i++) { ...

11
Peperovich
43 / 43 / 13
Регистрация: 17.05.2011
Сообщений: 162
11.12.2013, 17:01 #2
Потому что f типа int, а при делении скорее всего получается значение типа 0.023345, вот он и окргуляет до нуля. К тому в задании у тебя в числителе +, а в коде -.
1
kornelyk
1 / 1 / 0
Регистрация: 07.01.2012
Сообщений: 145
11.12.2013, 17:03  [ТС] #3
Цитата Сообщение от Peperovich Посмотреть сообщение
Потому что f типа int, а при делении скорее всего получается значение типа 0.023345, вот он и окргуляет до нуля. К тому в задании у тебя в числителе +, а в коде -.
тогда получается надо заменить на double?
0
Peperovich
43 / 43 / 13
Регистрация: 17.05.2011
Сообщений: 162
11.12.2013, 17:03 #4
Да. И поменяй тип возвращаемого значения у fact на double.
1
kornelyk
1 / 1 / 0
Регистрация: 07.01.2012
Сообщений: 145
11.12.2013, 17:08  [ТС] #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));
0
DmitryM5
Love~
66 / 61 / 30
Регистрация: 27.08.2013
Сообщений: 986
Записей в блоге: 1
11.12.2013, 17:11 #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)
2
Peperovich
43 / 43 / 13
Регистрация: 17.05.2011
Сообщений: 162
11.12.2013, 17:11 #7
Выше написал, поменяй у функции которая вычисляет факториал на double.
2
kornelyk
1 / 1 / 0
Регистрация: 07.01.2012
Сообщений: 145
11.12.2013, 17:12  [ТС] #8
вот про тип возвращаемого значения не понятно

Добавлено через 46 секунд
спасибо всем огромное!!
0
Peperovich
43 / 43 / 13
Регистрация: 17.05.2011
Сообщений: 162
11.12.2013, 17:14 #9
Да, что не понятно, тут либо как DmitryM5 написал сделать, т.е. преобразовать к double, либо сделать чтобы функция double возвращала. Иначе у тебя int / int, вот и приводится результат к int.
1
kornelyk
1 / 1 / 0
Регистрация: 07.01.2012
Сообщений: 145
11.12.2013, 17:17  [ТС] #10
C++
1
double fact(int n)
так не работает
а с double перед самими примером все отлично)
0
Peperovich
43 / 43 / 13
Регистрация: 17.05.2011
Сообщений: 162
11.12.2013, 17:33 #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?
1
DmitryM5
Love~
66 / 61 / 30
Регистрация: 27.08.2013
Сообщений: 986
Записей в блоге: 1
11.12.2013, 17:43 #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...
Видно неявное приведение типа происходит,ну да ладно.
1
11.12.2013, 17:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.12.2013, 17:43

Почему выводит адреса?
Всем привет! Программа работает, но почему то выводит данные вместе с адресом...

Почему не выводит на экран
#include &lt;iostream&gt; #include&lt;math.h&gt; using namespace std; int main() { ...

Почему не выводит printf?
#include &quot;stdafx.h&quot; #include &quot;iostream&quot; #include &quot;math.h&quot; #include...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru