Задача: Есть 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.
Нужно цикл, который будет заполнять все множества и цикл которы будет проверять различные элементы, тоесть цикл в цикле как я понимаю. Но не знаю как их записать...не получается что-то...
volvo
4.03.2011 20:21
Цитата
найти множество содержащей больше различных элементов
Больше, чем что? Вообще, задание непонятно. Множество в принципе не может содержать одинаковых элементов, то есть, они все будут различными. Итак, задача сводится к тому, чтобы найти множество, содержащее максимальное количество элементов?
Sav93
5.03.2011 0:15
Да, Вы правы, нам преподаветель прочитал условие с 2 задач...
-TarasBer-
5.03.2011 0:37
> Да, Вы правы, нам преподаветель прочитал условие с 2 задач...
Не понял, он начал читать начало условия одной задачи, потом завтыкал, потом прочитал конец условия другой? Вас послушать, так одни маразматики в преподах.
Sav93
5.03.2011 0:46
Цитата(-TarasBer- @ 4.03.2011 20:37)
> Да, Вы правы, нам преподаветель прочитал условие с 2 задач...
Не понял, он начал читать начало условия одной задачи, потом завтыкал, потом прочитал конец условия другой? Вас послушать, так одни маразматики в преподах.
Все вы поняли правельно, ну ошибся преподаватель...он у нас старенький и материал не особо выложить умеет...
volvo
5.03.2011 0:51
В таком случае о чем тема? О возрасте преподавателя? Может, все-таки будет приведено правильно звучащее задание?
Sav93
5.03.2011 1:00
Дано N множеств, найти множество содержащее максимальное количество элементов, все возможные елементы множества заданы в массиве С. Вот так она звучит.
Lapp
5.03.2011 11:23
Цитата(Sav93 @ 4.03.2011 21:00)
Дано 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.
Sav93
9.03.2011 23:14
Вроде все ясно, кроме 1-го... зачем нам d?
Lapp
10.03.2011 0:17
Цитата(Sav93 @ 9.03.2011 19:14)
Вроде все ясно, кроме 1-го... зачем нам d?
Переменная 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.
Sav93
10.03.2011 0:56
Ага...ясненько...2-й вариант для меня более понятный, спасибо.
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.
Не будет ли это ошибкой?
Lapp
10.03.2011 22:39
Цитата(Sav93 @ 10.03.2011 16:24)
Так можно задать?
for j:=1 to l do Include(s[i],c[Random(l)]);
Не будет ли это ошибкой?
Конечно, будет. Random(l) принимает значения от 0 до l-1, а диапазон индекса массива c - от 1 до l. Думаешь, я прибавил 1 просто, чтоб размять пальцы?
Sav93
11.03.2011 3:40
А если +1 оставить, рандомайз может там присутствовать с l = 255?
Lapp
11.03.2011 4:40
Цитата(Sav93 @ 10.03.2011 23:40)
А если +1 оставить, рандомайз может там присутствовать с l = 255?
Что бы сие значило? при чем тут "рандомайз"? Ты имей в виду только, что l и d нужно выбирать так, чтоб сумма l+d не превышала 255.
Добавлено через 4 мин. если ты хочешь, чтобы в массиве C были ВСЕ возможные числа типа byte (от 0 до 255, всего 256 штук), то положи l=256, а d=-1
Sav93
11.03.2011 5:25
Цитата
то положи l=256, а d=-1
Так не работает... ерор 76 выписывает...только если l= 255, все ок.
volvo
11.03.2011 5:36
Тип переменных i и j поменяй с Byte на что-нибудь более ёмкое, на Word например. У тебя банальный выход за пределы значений, тип Byte может хранить 0 .. 255, а ты хочешь затолкать в него в цикле 256... Не получится.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.