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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2012, 14:12   #1
бедный_студент
Форумчанин
 
Регистрация: 09.02.2009
Сообщений: 143
По умолчанию вычислить число сочетаний. код

3) Составить программу вычисления числа сочетаний используя для числовых данных только тип integer. Вычислить с помощью программы с11\18

Сочетаниями называют комбинации, составленные из n различных элементов по k, которые отличаются хотя бы одним элементом.
Количество комбинаций - это число сочетаний 5 из 3, т.е. C 3\5 =10.
Ck\n= n!\k!(n-k)!
C 3\5 = !5/[!(5-3)·!3].
(слееш в условии - показатель какой элемент сверху\снизу)

___________________________________ ______________
uses crt;
var m,n:integer;

function c(m,n:integer):longint;
begin
if m>n then c:=0;
if (m=0) or (m=n) then c:=1 else
if n-m<m then c:=c(n-m,m) else
c:=c(m-1,n-1)+c(m,n-1);
end;

begin
clrscr;
write('M N-> ');
readln(m,n);
writeln('C=',c(m,n));
readln;
end.

вот код. он работает но как то странно.
при наборе 11\18 результат обработки очень маленький или ошибкка
код правильный ? ошибки в вычислении быть не может ?
бедный_студент вне форума Ответить с цитированием
Старый 24.12.2012, 14:34   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Отладчик?..
C(11,18)=31824
Проверьте на меньших значениях.
Abstraction вне форума Ответить с цитированием
Старый 24.12.2012, 15:05   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

вот отсюда взял..

Код:
uses crt;
var m,n:integer;

function C(n,k:integer):longint;
begin
  if (k=1) or (k=n) 
    then C:=n-k+1
    else C:=C(n-1,k)+C(n-1,k-1);
end;


begin
  clrscr;
  write('M N-> ');
  readln(m,n);
  WriteLn('m = ',m, ' n= ',n);
  if m<=n then
    writeln('C=',c(n,m))
  else
    writeln(' no chance! ');
  readln;
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.12.2012, 16:41   #4
бедный_студент
Форумчанин
 
Регистрация: 09.02.2009
Сообщений: 143
По умолчанию

тут еще вариантов 7 есть кода, но они работают мене стабильно
бедный_студент вне форума Ответить с цитированием
Старый 24.12.2012, 16:44   #5
бедный_студент
Форумчанин
 
Регистрация: 09.02.2009
Сообщений: 143
По умолчанию

пардон
это из старого кода
все нормально
спасибо
юстас - витасу

Последний раз редактировалось бедный_студент; 24.12.2012 в 16:49.
бедный_студент вне форума Ответить с цитированием
Старый 17.06.2013, 21:44   #6
katyawapka
Пользователь
 
Регистрация: 16.10.2012
Сообщений: 13
По умолчанию

подскажите как к этой задаче переделать условие на цикл? вообще возможно ли такое?
katyawapka вне форума Ответить с цитированием
Старый 17.06.2013, 23:36   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

тут цикл (неявный) и так есть.
Рекурентная формула в данном случае считается через рекурсию (функция C вызывает сама себя)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.06.2013, 08:00   #8
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Код:
function Factorial (const n : Integer) : LongInt;
var
   i : Integer;
   r : LongInt;

begin
     r := 1;
     for i := 1 to n do
         r := r * i;

     Factorial := r;

end;

var
   n, k : Integer;

begin
     Read (n, k);

     WriteLn (Factorial (n) div (Factorial (k) * Factorial (n-k)))
end.
Когда-то решал так.. можно существенно упростить.. Просщитать (k+1)*(k+2)*..*n и уже потом делить на Factorial(n-k)..
Poma][a вне форума Ответить с цитированием
Старый 18.06.2013, 08:46   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Рома][а, можно и так.
НО! katyawapka пришёл(?пришла) из этой темы:
Для заданных чисел m и n вычислить число сочетаний
если я его правильно понял, то ему(?ей) нужно как раз через реккурентную формулу расчитать число сочетаний
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Даны вещественное число a и натуральное число n. Вычислить S Dimaska931 Паскаль, Turbo Pascal, PascalABC.NET 6 28.11.2012 12:09
Найти количество сочетаний из n по k и вывести все комбинации этих сочетаний на экран Рон99 Паскаль, Turbo Pascal, PascalABC.NET 2 14.12.2011 00:05
Посчитать число сочетаний (Cnk) pollypolly Visual C++ 0 07.11.2011 21:30
Дано натуральное число n. Вычислить: Petrovich83 Помощь студентам 2 08.04.2011 12:14
Дано действительное число х. Вычислить Incognitoal Помощь студентам 7 09.03.2009 12:27