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.
Нужно цикл, который будет заполнять все множества и цикл которы будет проверять различные элементы, тоесть цикл в цикле как я понимаю. Но не знаю как их записать...не получается что-то...
найти множество содержащей больше различных элементов
Больше, чем что? Вообще, задание непонятно. Множество в принципе не может содержать одинаковых элементов, то есть, они все будут различными. Итак, задача сводится к тому, чтобы найти множество, содержащее максимальное количество элементов?
> Да, Вы правы, нам преподаветель прочитал условие с 2 задач...
Не понял, он начал читать начало условия одной задачи, потом завтыкал, потом прочитал конец условия другой? Вас послушать, так одни маразматики в преподах.
> Да, Вы правы, нам преподаветель прочитал условие с 2 задач...
Не понял, он начал читать начало условия одной задачи, потом завтыкал, потом прочитал конец условия другой? Вас послушать, так одни маразматики в преподах.
Все вы поняли правельно, ну ошибся преподаватель...он у нас старенький и материал не особо выложить умеет...
Дано N множеств, найти множество содержащее максимальное количество элементов, все возможные елементы множества заданы в массиве С. Вот так она звучит.
Дано N множеств, найти множество содержащее максимальное количество элементов, все возможные елементы множества заданы в массиве С. Вот так она звучит.
Если она так звучит, то ты начал делать неправильно: у тебя массив C - это как раз массив множеств. Вот, как-то так, думаю, нужно..
Var s:array [1..n] of TypeSet; c: array [1..l] of byte; t: TypeSet; i,j,k,m,max: byte;
BEGIN {зададим массив c (в данном случае просто от d+1 до d+l} for i:=1 to l do c[i]:=i+d;
{заполняем вспомогательное множество t всеми элементами из c} t:= []; for i:=1 to l do Include(t,c[i]);
{заполняем множества случайным образом} For i:=1 to n Do for j:=1 to l do begin k:= Random(256); if k in t then Include(s[i],k) end;
{считаем мощность каждого множества и одновременно ищем максимум} 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.
--------------------
я - ветер, я северный холодный ветер я час расставанья, я год возвращенья домой
Переменная 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.
--------------------
я - ветер, я северный холодный ветер я час расставанья, я год возвращенья домой
Var s:array [1..n] of TypeSet; c: array [1..l] of byte; i,j,k,m,max: byte;
BEGIN Randomize; {зададим массив 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)]);
{считаем мощность каждого множества и одновременно ищем максимум} 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.
Тип переменных i и j поменяй с Byte на что-нибудь более ёмкое, на Word например. У тебя банальный выход за пределы значений, тип Byte может хранить 0 .. 255, а ты хочешь затолкать в него в цикле 256... Не получится.