IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> ПОМОГИТЕ ДОПОЛНИТЬ АЛГОРИТМ, ДОПОЛНИТЬ АЛГОРИТМ ПОДСЧЁТА СОЧЕТАНИЙ
KOMBIDEN
сообщение 8.02.2010 20:20
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 10
Пол: Мужской

Репутация: -  0  +


ПОМОГИТЕ КТО МОЖЕТ.
Я ФИЗИК В ПОСКАЛЕ СИКУ СЛОБО, НО НАШЁЛ НА ВАШЕМ САЙТЕ ПОЧТИ ТО ЧТО МНЕ НУЖНО.
ВОТ СХОЖАЯ С МОЕЙ ЗАДАЧА НА СОЧЕТАНИЯ КОТОРУЮ Я НАШЁЛ.
Сочетания
Задачи о сочетаниях решают вопрос о том, сколькими способами можно выбрать M элементов из заданного N элементного множества и генерации всех возможных выборок. Число выборок вычисляется следующей формулой С=n!/(m!(n - m)!).

Рассмотрим задачу о генерации сочетаний в лексикографическом порядке.
ПРИМЕР 1.
Для примера рассмотрим начальные данные N=6 и M=4. Тогда число сочетаний равно 15. Начальное сочетание образует последовательность 1, 2, .. m, а последнее n-m+1, … , n.

Цитата
1234 1256 2345
1235 1345 2346
1236 1346 2356
1245 1356 2456
1246 1456 3456

Переход к следующему сочетанию осуществляется по следующему правилу: требуется просмотреть текущее сочетание с конца и найти элемент, который можно увеличить. То есть такой элемент что a[i] <> n-k+i. Далее увеличиваем этот элемент на 1, а оставшуюся часть сочетания заполняем числами натурального ряда большими измененного элемента в порядке их следования.


program sochets; 
var
i, j, n, m: integer;
a: array[0 .. 100] of integer;

{ процедура вывода текущего сочетания }
procedure use;
var i: integer;
begin
writeln;
for i:=1 to m do write(a[i]:3)
end;

begin
write('ввод N и M: '); read(n, m);
{ формирование первого сочетания }

for i:=0 to m do a[i]:=i;
repeat
use;
i:=m;
while a[i]=n-m+i do dec(i); { поиск элемента для изменения }
inc(a[i]);
for j:=i+1 to m do a[j]:=a[j-1]+1; { изменение правой части сочетания }
until i=0;
end.


МОЯ ЗАДАЧА ОТЛИЧАЕТСЯ ОТ ПРЕДСТАВЛЕННОЙ ЗАДАЧИ(ПРИМЕР 1) ТЕМ ЧТО:

1) N=8 А НЕ 6 А СЛЕДОВАТЕЛЬНО И КОЛЛИЧЕСТВО СОЧЕТАНИЙ УВЕЛИЧИТСЯ С 15 ДО 70.
2) НЕОБХОДИМО ЧТОБЫ АЛГОРИТМ НЕ ТОЛЬКО ПОДСЧИТЫВАЛ И ВЫВОДИЛ НА ЭКРАН КОЛ-ВО СОЧЕТАНИЙ НО И ПОДСЧИТЫВАЛ И ВЫВОДИЛ КОЛ-ВО СОЧЕТАНИЙ В КОТОРЫХ ВСТРЕЧАЮТСЯ ОПРЕДЕЛЁННЫЕ ЦЫФРЫ, А КОНТРЕТНЕЕ НУЖНО ПОДСЧИТАТЬ И ВЫВЕСТИ ВСЕ СОЧЕТАНИЯ В КОТОРЫХ ВСТРЕЧАЮТСЯ СЛЕДУЮЩИЕ ЦЫФРЫ:

1 И 3 ЛИБО
2 И 4 ЛИБО
3 И 5 ЛИБО
4 И 6 ЛИБО
5 И 7 ЛИБО
6 И 8 ЛИБО
1 И 7 ЛИБО
2 И 8.

С ПОМОЩЬЮ ТЕОРИИ ВЕРОЯТНОСТИ Я ЭТУ ЗАДАЧУ РЕШИЛ НО МНЕ НУЖЕН ИМЕННО АЛГОРИТМ НА ПАСКАЛЕ.

И ПОДСКАЖИТЕ ПАЖАЛУЙСТО СКОЛЬКО ПРИМЕРНО ВРЕМЕНИ АЛГОРИТМ БУДЕТ СЧИТАТЬ НА ПОСКАЛЕ ЭТУ ЗАДАЧУ ЕСЛИ ЗНАЧЕНИЯ "M" И "N" БУДУТ БОЛЬШИМИ, А КОНКРЕТНЕЕ M=50, N=10

ОГРОМНОЕ СПОСИБО ПРОГРАМИСТАМ ОТ ФИЗИКОВ.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
KOMBIDEN
сообщение 27.02.2010 22:02
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 10
Пол: Мужской

Репутация: -  0  +


Добрый день LAPP. Извини что опять тебя беспокою. Ещё раз спосибо за алгоритм, работает .Если можешь помоги мне его ещё дополнить(усложнить). Мне это нужно для окончательной задчи с большими значениями N и M.Необходимо что бы алгоритм выводил на экран не сами сочетания в которых встречаются определённые комбинации цифр, а в реальном времени на экране было выдно как изменяется, точнее увеличивается колличество токих комбинаций и в конце алгоритм выводил на экран не только количество таких сочетаний(в которых есть определенное кобинация цифр), но и полное колличество всех возможных сочетаний( на языке комбинаторики: всех возможных выборок М элементов из задонного N элементного множества). Мне это нужно для вычесления вероятности генерации определённых комбинаций цифр. Спосибо!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 28.02.2010 6:56
Сообщение #3


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


KOMBIDEN, извини, но опять тебя приходится учить элементарным правилам общения.. На форуме, пожалуйста, обращайся ко всем (по крайней мере, если это не ответ на вопрос конкретного человека. И еще: алгоритм этот - не мой, а volvo!

Цитата(KOMBIDEN @ 27.02.2010 22:02) *
в реальном времени на экране было выдно как изменяется, точнее увеличивается колличество токих комбинаций и в конце алгоритм выводил на экран не только количество таких сочетаний(в которых есть определенное кобинация цифр), но и полное колличество всех возможных сочетаний

Так?
program sochets_m;
var
i, j, n, m, l: integer;
k1,k2: LongInt;
a: array[0 .. 100] of integer;
s,t: string;
d: set of byte;

begin
write('ввод N и M: ');
read(n, m);
if n<10 then l:=2 else if n<100 then l:=3 else l:=4;
{ формирование первого сочетания }
for i:=0 to m do a[i]:=i;
k1:=0;
k2:=0;
repeat
s:='';
d:=[];
for i:=1 to m do begin
d:=d+[a[i]];
Str(a[i]:l,t);
s:=s+t
end;
if
(1 in d) and (3 in d) or
(2 in d) and (4 in d) or
(3 in d) and (5 in d) or
(4 in d) and (6 in d) or
(5 in d) and (7 in d) or
(6 in d) and (8 in d) or
(1 in d) and (7 in d) or
(2 in d) and (8 in d)
then begin
Inc(k2);
WriteLn(k2:10,' ',s)
end;
i:=m;
while a[i]=n-m+i do dec(i); { поиск элемента для изменения }
inc(a[i]);
for j:=i+1 to m do a[j]:=a[j-1]+1; { изменение правой части сочетания }
Inc(k1);
until i=0;
WriteLn('Total combinations: ',k1);
end.

Если хочешь, убери вывод самих сочетаний и оставь только вывод их числа.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
KOMBIDEN   ПОМОГИТЕ ДОПОЛНИТЬ АЛГОРИТМ   8.02.2010 20:20
Lapp   KOMBIDEN, пожалуйста, прочти Правила Форума. Особ...   9.02.2010 4:40
KOMBIDEN   Большое спосибо Lapp   10.02.2010 22:35
Lapp   Большое спосибо LappНет проблем, заходи еще. Можн...   11.02.2010 7:37
KOMBIDEN   Добрый день LAPP. Извини что опять тебя беспокою....   27.02.2010 22:02
Lapp   KOMBIDEN, извини, но опять тебя приходится учить э...   28.02.2010 6:56
KOMBIDEN   Спосибо за токую оперативную помощ.   28.02.2010 17:37
KOMBIDEN   Здравсвуйте. В чём ошибка!? Формула подсчёта в...   20.03.2010 23:10
sheka   Здравсвуйте. В чём ошибка!? Формула подсчёта ...   20.03.2010 23:23
Lapp   при значениях n = 50 и m = 10 алгоритм выдал что (...   21.03.2010 1:46
volvo   Вот только про Comp не надо забывать... Хоть форма...   21.03.2010 2:12
KOMBIDEN   Подскажите, пожалуйсто, по подробнее как менять ти...   21.03.2010 10:52
Lapp   Подскажите, пожалуйсто, по подробнее как менять ти...   21.03.2010 18:05
KOMBIDEN   Спосибо. Работает, только ответ выдает в десятично...   23.03.2010 0:59
Lapp   ответ выдает в десятичном числе с плавоющей точкой...   23.03.2010 3:51
KOMBIDEN   Понял, спосибо, пользуюсь пока Турбо, а какие прии...   23.03.2010 9:01
Lapp   какие приимущества у FPC перед Турбо в моём случае...   24.03.2010 23:34
KOMBIDEN   Полял. Спосибо. Сейчас Скачаю FPC. Как я понимаю о...   26.03.2010 10:32
Lapp   Скачаю FPC. Как я понимаю он полностью совместим с...   26.03.2010 12:03
KOMBIDEN   Огромое спосибо, что посоветовали FPC. На FPC алго...   26.03.2010 15:24
Lapp   На FPC алгоритм с дерективами на тестовых задачах ...   26.03.2010 22:51
Гость   Доброго времени суток всем. Помогите дополнить алг...   11.03.2011 19:41


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 14:28
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"