Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с задачей 
:(
    Опции темы
otshelnik9
Дата 28.5.2010, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 11.4.2010

Репутация: нет
Всего: нет



ВОт задача: из группы студентов n нужно получить шруппу студентов m для уборки, сколькими способами это можно сделать (n>m).

PM MAIL   Вверх
ФедосеевПавел
Дата 29.5.2010, 07:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 7.2.2009

Репутация: 2
Всего: 10



Учебник математики - комбинаторика - сочетания. Вот статья в Wiki.
PM   Вверх
otshelnik9
Дата 29.5.2010, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 11.4.2010

Репутация: нет
Всего: нет



Ага спасибо, я уже нашол

Вот что-то наклепал, но какая-то ошибка в коде и не уверен что скобочки правильно раставил...
Код


program lab1;
uses crt;
var  n,m,f,g,otv:integer;
function fact(n:integer):longint;
begin
  if n=0 then fact:=1
         else fact:=n*fact(n-1);
end;
function factm(m:integer):longint;
begin
  if m=0 then factm:=1
  else factm:=m*factm(m-1);
end;
begin
clrscr;
writeln('vvedite kol-vo studentov v grupe');
readln(n);
writeln('kol-vo studentov dlya uborki');
readln(m);
otv:=fact(n)/(factm(m)*(fact(n)-factm(m))))
readln(otv);
write(otv);
end;
end.




M
THandle
Модератор: используйте подсветку кода!


Это сообщение отредактировал(а) THandle - 3.6.2010, 14:55
PM MAIL   Вверх
~FoX~
Дата 29.5.2010, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 1
Всего: 68



Otv не может быть integer

Код

fact(n)/(Factm(m)*(Fact(n)-Factm(m)))


Цитата(otshelnik9 @  29.5.2010,  09:52 Найти цитируемый пост)
readln(otv);

Вообще лишнее

Это сообщение отредактировал(а) ~FoX~ - 30.5.2010, 17:33


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
otshelnik9
Дата 29.5.2010, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 11.4.2010

Репутация: нет
Всего: нет



Всё равно ошибка type mismatch
PM MAIL   Вверх
~FoX~
Дата 29.5.2010, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 1
Всего: 68



Цитата(otshelnik9 @  29.5.2010,  11:09 Найти цитируемый пост)
Всё равно ошибка type mismatch 

Еще раз
Цитата(~FoX~ @  29.5.2010,  10:08 Найти цитируемый пост)
Otv не может быть integer


Код

program lab1;
uses crt;
var  n,m,f,g:integer;
    otv: real;
function fact(n:integer):longint;
begin
  if n=0 then fact:=1
         else fact:=n*fact(n-1);
end;
function factm(m:integer):longint;
begin
  if m=0 then factm:=1
  else factm:=m*factm(m-1);
end;
begin
  clrscr;
  writeln('vvedite kol-vo studentov v grupe');
  readln(n);
  writeln('kol-vo studentov dlya uborki');
  readln(m);
  otv := fact(n)/(Factm(m)*(Fact(n)-Factm(m)));
  write(otv);
end.



--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
otshelnik9
Дата 29.5.2010, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 11.4.2010

Репутация: нет
Всего: нет



Вроде всё работает но считает она не то что-то...
PM MAIL   Вверх
ФедосеевПавел
Дата 30.5.2010, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 7.2.2009

Репутация: 2
Всего: 10



Ну, наверное формула другая...
Цитата(~FoX~ @  29.5.2010,  11:05 Найти цитируемый пост)
otv := fact(n)/(Factm(m)*(Fact(n)-Factm(m)));

а нужно
Код

otv := fact(n)/(Factm(m)*Fact(n-m));

Но, думаю, что это чрезчур неверно. Количество сочетаний это исключительно целое число.

Если определить otv как целое, то
Код
otv := (fact(n) div Factm(m)) div Fact(n-m);


При достаточно больших m и n будет переполнение разрядной сетки при вычислении факториала.
Тут для вычисления лучше подойдёт формула
      (n-m+1)(m+2)...(n-1)n
C:=-----------------------------
      1*2*3*...(m-1)m
И деление организовать целочисленное (DIV).
Цикл будет примерно таким
Код
...................................
VAR
    i, c : LongInt;
...................................
begin
...................................
  c:=1;
  for i:=1 to m do begin
    c:=(c*(n-i+1)) div i;
  end;
  WriteLn(c);
...................................
end.


Это сообщение отредактировал(а) ФедосеевПавел - 30.5.2010, 12:03
PM   Вверх
LoveMeCozImBLONDE
Дата 30.5.2010, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 27.5.2009

Репутация: нет
Всего: нет



По идее студенты то какбы пронумерованы,
потому та формула для количества комбинаций не прокатит)
з.ы. ето вроде бы)
PM MAIL   Вверх
otshelnik9
Дата 31.5.2010, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 11.4.2010

Репутация: нет
Всего: нет



LoveMeCozImBLONDE прокатит так как грубо говоря  в програме есть просто 2 числа и оно должно вывести результат... 

Я предварительно расчитал вручную... Если n=4 а m=2 то результат должен выйти 6, о ткогда программа подсчитает правильно значит она работает...

Добавлено через 33 секунды
 ФедосеевПавел спасибо теперь всё работает...)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0707 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.