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

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

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

 
 Ответить  Открыть новую тему 
> Множество
сообщение
Сообщение #1


Новичок
*

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

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


Задача: Есть 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.


Нужно цикл, который будет заполнять все множества и цикл которы будет проверять различные элементы, тоесть цикл в цикле как я понимаю. Но не знаю как их записать...не получается что-то...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
найти множество содержащей больше различных элементов
Больше, чем что? Вообще, задание непонятно. Множество в принципе не может содержать одинаковых элементов, то есть, они все будут различными. Итак, задача сводится к тому, чтобы найти множество, содержащее максимальное количество элементов?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


Да, Вы правы, нам преподаветель прочитал условие с 2 задач...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






> Да, Вы правы, нам преподаветель прочитал условие с 2 задач...

Не понял, он начал читать начало условия одной задачи, потом завтыкал, потом прочитал конец условия другой? Вас послушать, так одни маразматики в преподах.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

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

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


Цитата(-TarasBer- @ 4.03.2011 20:37) *

> Да, Вы правы, нам преподаветель прочитал условие с 2 задач...

Не понял, он начал читать начало условия одной задачи, потом завтыкал, потом прочитал конец условия другой? Вас послушать, так одни маразматики в преподах.


Все вы поняли правельно, ну ошибся преподаватель...он у нас старенький и материал не особо выложить умеет... wink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






В таком случае о чем тема? О возрасте преподавателя? Может, все-таки будет приведено правильно звучащее задание?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

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

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


Дано N множеств, найти множество содержащее максимальное количество элементов, все возможные елементы множества заданы в массиве С.
Вот так она звучит.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


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

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

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


Цитата(Sav93 @ 4.03.2011 21:00) *
Дано N множеств, найти множество содержащее максимальное количество элементов, все возможные елементы множества заданы в массиве С.
Вот так она звучит.

Если она так звучит, то ты начал делать неправильно: у тебя массив C - это как раз массив множеств.
Вот, как-то так, думаю, нужно..
Program LabRob2;

const
n= 12; {кол-во множеств}
l= 50; {кол-во возможных элементов}
d= 10;

Type
TypeSet = set of byte;

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.



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


Новичок
*

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

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


Вроде все ясно, кроме 1-го... зачем нам d?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


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

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

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


Цитата(Sav93 @ 9.03.2011 19:14) *
Вроде все ясно, кроме 1-го... зачем нам d?

Переменная d не относится к решению, она относится только к первоначальному заданию условий, а именно - к заданию массива C. Сказано, что этот массив содержит все возможные элементы системы множеств. Но как он задается - не сказано. Вот я и задал его, как захотел - промежутком чисел, начинающимся с некоторого числа, которое я назвал d. Длина же этого промежутка равна длине массива C. Если хочешь, можешь задавать значения элементов C как-то иначе - вводом с клавы или случайно, или еще как-нить..

Пока я просматривал код, чтобы вспомнить, что такое d, я заметил, что генерация множеств s[i] у меня сделана не очень хорошо.. Ниже я даю вариант более эффективного заполнения множеств (к тому же, без использования дополнительного множества t).
Program LabRob2;

const
n= 12; {кол-во множеств}
l= 50; {кол-во возможных элементов}
d= 10;

Type
TypeSet = set of byte;

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.


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


Новичок
*

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

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


Ага...ясненько...2-й вариант для меня более понятный, спасибо.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Новичок
*

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

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


Еще 1 вопрос...
Так можно задать?
Program LabRob2;

const
n= 12; {кол-во множеств}
l= 255; {кол-во возможных элементов}
d= 10;

Type
TypeSet = set of byte;

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.

Не будет ли это ошибкой?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


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

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

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


Цитата(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 просто, чтоб размять пальцы? smile.gif


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


Новичок
*

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

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


А если +1 оставить, рандомайз может там присутствовать с l = 255?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


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

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

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


Цитата(Sav93 @ 10.03.2011 23:40) *
А если +1 оставить, рандомайз может там присутствовать с l = 255?
Что бы сие значило? при чем тут "рандомайз"?
Ты имей в виду только, что l и d нужно выбирать так, чтоб сумма l+d не превышала 255.


Добавлено через 4 мин.
если ты хочешь, чтобы в массиве C были ВСЕ возможные числа типа byte (от 0 до 255, всего 256 штук), то положи l=256, а d=-1


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


Новичок
*

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

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



Цитата
то положи l=256, а d=-1

Так не работает... ерор 76 выписывает...только если l= 255, все ок.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Гость






Тип переменных i и j поменяй с Byte на что-нибудь более ёмкое, на Word например. У тебя банальный выход за пределы значений, тип Byte может хранить 0 .. 255, а ты хочешь затолкать в него в цикле 256... Не получится.
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 20.04.2024 19:25
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name