Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.10.2014, 14:04   #1
XCh
Новичок
Джуниор
 
Регистрация: 25.09.2013
Сообщений: 2
По умолчанию Си - Пример с факториалами №1

Даны натуральные числа N и M. Вычислить



Итак, после упрощений уравнение приходит к виду F=(M!/(M+N)!) + (N!/(M+N)!).

Упрощаем выражение A!/(A+B)!=1/(A+B)*(A+B-1)*...*(A+1).

В итоге, у меня получился такой

Код:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

int main()
{
    setlocale (LC_CTYPE,"RUSSIAN");
    printf("\n Введите натуральное N: ");
    int N,M;
    double F;
    scanf ("%d",&N);
    printf("\n Введите натуральное M: ");
    scanf ("%d",&M);

    int schet(int A,int B)
    {
        float S;
        S=1;
        while (B != 0)
        {
            S=1.0/(B+A);
            B=B-1;
        }
        return S;
    }

    F=schet(M,N)+schet(N,M);

    printf("\n F=%f",F);

    return 0;
}
Программа не работает и выводит F=0 при любых вводимых данных.
Думаю, что ошибка в строке S=1.0/(B+A), но не могу её исправить. Прошу помочь наладить программу.
XCh вне форума Ответить с цитированием
Старый 09.10.2014, 15:04   #2
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,609
По умолчанию

Преобразовывать типы нужно явно. schet возвращает int который явно нужно преобразовывать либо в float, либо в double.
Преобразование , например (float) 5
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 09.10.2014, 15:14   #3
Scorpius
Пользователь
 
Регистрация: 06.10.2014
Сообщений: 26
По умолчанию

Подправил должно заработать (комментариями описал ошибки).
Код:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

double schet(int A,int B)  // Неправильно было указано тип возврата функции
{
    double S;
    S=1;
    while (B != 0)
    {
        S=S*1.0/(B+A);  // Забыл домножить на S
        B=B-1;
    }
    return S;
}

int main()
{
    int N = 0, M = 0;
    double F;
    setlocale (LC_CTYPE,"RUSSIAN");
    printf("\n Введите натуральное N: ");
    scanf ("%d",&N);
    printf("\n Введите натуральное M: ");
    scanf ("%d",&M);

    F=schet(M,N)+schet(N,M);

    printf("\n F=%f",F);

    return 0;
}
Не всегда говори то, что знаешь, но всегда знай, что говоришь.
Scorpius вне форума Ответить с цитированием
Старый 09.10.2014, 16:43   #4
XCh
Новичок
Джуниор
 
Регистрация: 25.09.2013
Сообщений: 2
По умолчанию

S я сам дописал, а вот за изменение типа возврата функции спасибо!
XCh вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача с факториалами Кукавская Татьяна Помощь студентам 1 15.04.2011 08:18
пример DeDoK Работа с сетью в Delphi 6 11.09.2010 19:32
Пример Claster Помощь студентам 0 22.12.2009 00:01
задача с факториалами Паскаль loki707i Помощь студентам 6 02.12.2009 16:24
П Р О С Т Е Й Ш И Й пример 3D aesoem Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 16.07.2008 16:54