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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.03.2013, 11:34   #1
Cyr
 
Регистрация: 03.03.2013
Сообщений: 7
Вопрос Ошибка в коде

Не могу найти ошибку в коде. Пробовал 3-мя разными циклами, но результат один и тот же(одинаково не правильной, при этом ошибка одна и та же). Проверку на n<=m добавлю потом, и прочие подобные украшательства, тут главное, чтобы ядро проги заработало

Написать программу вычисления числа сочетаний m по n С=m!/(n!(m-n)!) используя рекуррентную формулу С(m по n)=(m-n+1)/n*С(m по n-1), c(m по 0)=1

Код:
int main(int argc, char* argv[])
{
int m,n,c,n1;  /*н1-дополнительная переменная к циклу с-итог. м и н - вводим*/
  printf("\n Vvedy m ");
  scanf("%d",&m);
  printf("\n Vvedy n ");
  scanf("%d",&n); /*ввод событий м и н*/
/*
for (n=n; n>0; n--)  c=((m-n+1)/n)*c;
  printf ("\n %d",c);  /* вариант1*/
  */
 c=((m-n+1)/n);
  for (n1=1; n1<=n; n1++)  c=((m-n1+1)/n1)*c;
  printf ("\n %d",c);/* вариант2*/

 /* do
    {
  c=((m-n+1)/n)*c;
  n--;}
  while (n>0);
   printf ("%d",c); */ /* вариант3*/
  getch();                                                                              /*Задержка экрана*/
        return 0;
Cyr вне форума Ответить с цитированием
Старый 03.03.2013, 12:52   #2
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

Код:
double c = 1;
for(unsigned int i = 1; i <= n; ++i) c = (m-i+1) /i*c;
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 03.03.2013, 13:45   #3
Cyr
 
Регистрация: 03.03.2013
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Ezhik Kihze Посмотреть сообщение
Код:
double c = 1;
for(unsigned int i = 1; i <= n; ++i) c = (m-i+1) /i*c;
На ваш код компилятор ругнулся, сделал так:
В Вашем коде результат всегда такой же как и в моем коде, т.е. если считать из 10 по 5, то результат 80, а д.б. 252
Однако, если m<5, то и мой и Ваш код считают правильно. т.е. у моего и Вашего кода результат всегда одинаковый
Код:
int m,n;
double c;
unsigned int i;
c=1;
  printf("\n Vvedy m ");
  scanf("%d",&m);
  printf("\n Vvedy n ");
  scanf("%d",&n);
  for(i = 1; i <= n; i++) c = (m-i+1) /i*c;
  printf ("\n %.0lf",c);
  getch();                                                                              
        return 0;
}

Последний раз редактировалось Cyr; 03.03.2013 в 13:51.
Cyr вне форума Ответить с цитированием
Старый 03.03.2013, 14:59   #4
tools
Форумчанин
 
Регистрация: 07.10.2008
Сообщений: 213
По умолчанию

Код:
#include <stdio.h>

unsigned int combs(unsigned int n, unsigned int m)
{
	return ((m == 0) || (m==n) ) ? (1) : ( combs(n-1,m) + combs(n-1,m-1) );
}

int main()
{
	unsigned int n, m, res;
	printf("Type in N:");
	scanf("%u", &n);
	printf("Type in M:");
	scanf("%u", &m);
	res = (m>n) ? (0) : (combs(n,m));
	printf("Total combinations: %u", res);
	return 0;
}
tools вне форума Ответить с цитированием
Старый 03.03.2013, 15:21   #5
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

Код:
unsigned int n = 5, m = 10;
double c = 1;
for(unsigned int i = 1; i <= n; ++i) c = c * (m-i+1)/i;
std::cout << c << std::endl;
Все считает...

П.С. О! Заметил, я собезъяничал и скопировал формулу из вашего поста, а так низя... Приоритеты.

UPD:
Удивите препода:
Код:
template<unsigned int n, unsigned int m>
class MetaS{
public:
  static inline double metas()
  {
    return MetaS<n-1, m>::metas() * (m-n+1)/n;
  }
};

template<unsigned int m>
class MetaS<0, m>{
public:
  static inline double metas()
  {
    return 1;
  }
};
...
std::cout << MetaS<5,10>::metas() << std::endl;
ICQ: 677936656 Gmail: ekEmbed@gmail.com

Последний раз редактировалось Ezhik Kihze; 03.03.2013 в 15:59.
Ezhik Kihze вне форума Ответить с цитированием
Старый 03.03.2013, 16:01   #6
Cyr
 
Регистрация: 03.03.2013
Сообщений: 7
Радость

Цитата:
Сообщение от Ezhik Kihze Посмотреть сообщение
Код:
unsigned int n = 5, m = 10;
double c = 1;
for(unsigned int i = 1; i <= n; ++i) c = c * (m-i+1)/i;
std::cout << c << std::endl;
Все считает...

П.С. О! Заметил, я собезъяничал и скопировал формулу из вашего поста, а так низя... Приоритеты.
О, все заработало, благодарю.
Cyr вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Где ошибка в этом исходном коде на языке Си? Или ошибка в Excel? ArchiCurtis Помощь студентам 2 07.04.2012 14:16
ошибка в коде С Mr.Merso Помощь студентам 4 10.05.2011 00:52
ошибка в коде c# Roegis Помощь студентам 6 14.01.2011 13:00
Ошибка в коде, ошибка в css или это проблема с совместимостью с браузерами? ankris HTML и CSS 5 23.11.2010 16:58
Ошибка в коде Molochnik Общие вопросы C/C++ 0 20.06.2010 07:50