1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Задача: Есть N множеств, найти множество содержащей больше различных элементов, все возможные елементы множества заданы в массиве С.
Program LabRob2; Uses CRT; Type TypeSet = set of byte; Var C:array [1..12] of TypeSet; r,n,j,i,k:byte; BEGIN ClrScr; WriteLn('Vvedite elementi mnozhestva: '); Randomize; For i:=1 to 12 Do Begin r:=Random(9); Include(C[i],r); end; ReadKey; END.
Нужно цикл, который будет заполнять все множества и цикл которы будет проверять различные элементы, тоесть цикл в цикле как я понимаю. Но не знаю как их записать...не получается что-то...
Переменная d не относится к решению, она относится только к первоначальному заданию условий, а именно - к заданию массива C. Сказано, что этот массив содержит все возможные элементы системы множеств. Но как он задается - не сказано. Вот я и задал его, как захотел - промежутком чисел, начинающимся с некоторого числа, которое я назвал d. Длина же этого промежутка равна длине массива C. Если хочешь, можешь задавать значения элементов C как-то иначе - вводом с клавы или случайно, или еще как-нить..
Пока я просматривал код, чтобы вспомнить, что такое d, я заметил, что генерация множеств s[i] у меня сделана не очень хорошо.. Ниже я даю вариант более эффективного заполнения множеств (к тому же, без использования дополнительного множества t).
Var s:array [1..n] of TypeSet; c: array [1..l] of byte; i,j,k,m,max: byte;
BEGIN {зададим массив c (в данном случае просто от d+1 до d+l} for i:=1 to l do c[i]:=i+d;
{заполняем множества случайным образом} For i:=1 to n Do for j:=1 to l do Include(s[i],c[Random(l)+1]);
{считаем мощность каждого множества и одновременно ищем максимум} max:= 0; k:= 1; for i:=1 to n do begin m:=0; for j:=1 to l do if c[j] in s[i] then Inc(m); if m>max then begin max:= m; k:= i end end; writeln('множество номер ',k,' имеет максимальное количество элементов (',max,')'); readln END.
--------------------
я - ветер, я северный холодный ветер я час расставанья, я год возвращенья домой