Помощь - Поиск - Пользователи - Календарь
Полная версия: Задачка на множества
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Msblast
В городе N, 100 кондитерских магазинов. Известно что в каждом из магазинов не более 20 видов сластей в ассортименте. Какие виды сластей есть во всех магазинах. Существует ли магазин торгующий уникальной продукцией. Перечислите 5 видов сластей которые есть в большинстве магазинов города N. (ассортимент кондитерских магазинов рассматривается как длинна перечисляемого типа)

я так понял тут нада записывать множества, точнее массив множеств, только толком ни че не получается.

вот что смог придумать:

program ex2;
type
asort=1..20;
asortim=set of asort;
var
MAg:array[1..100] of asortim;
i,j,ra,ra1:byte;
begin
for i:=1 to 100 do
begin
randomize;
ra:=round(random(20));
for j:=1 to ra do
begin
ra1:=round(random(20));
Include(Mag[i],ra1);
end;
end;


Помогите плиз, через 2 дня всю контрольную надо сдавать, а у меня одна эта задача висит( mega_chok.gif
Msblast
Блин, ниодного програмиста нет на форуме ? nea.gif
Lapp
Цитата(Msblast @ 26.05.2007 10:35) *

Блин, ниодного програмиста нет на форуме ?

Только не надо ругаться, ладно? mad.gif Это форум, а не твои личные консультанты..

Вот, глянь, была похожая тема..
Множества
Msblast

type
asort=1..20;
asortim=set of asort;
var
MAg:array[1..100] of asortim;
i,j,ra,ra1:byte;

begin
for i:=1 to 100 do {для каждого из 100 магазинов}
begin
randomize;
ra:=round(random(20)); {генерируем КОЛ-ВО сластей}
for j:=1 to ra do
begin
ra1:=round(random(20)); {генерируем ВИДЫ сластей}
Include(Mag[i],ra1); {записываем}
end;
end;
for i:=1 to 100 do writeln(Mag[i]); {вот здесь пишет ошибку}
readln;
end.


написал маленький кусочек.....хотел посмотреть как он заполнит, так он отказывается выводить массив
Ozzя
for i:=1 to 100 do 
if i in Mag[i] then
writeln(i);
Msblast
спасибо...

а как найти элементы присутсвующие во всех 100 множествах ???

через цикл типа:
for i:=1 to 100 do
m:=S[i]*m
неполучится...ибо он сравнивает только текущий с результатом предыдущего

а писать s[1]*s[2]*s[3]*s[4] и так далее помоему глупо....

как быть?
volvo
Цитата
через цикл типа:
<skipped>
неполучится...
Это смотря что в m положить в начале... Если засунуть туда все возможные значения для данного типа, то только так и надо делать...
Msblast
ну зададим в начале его как 1..20 , при первой проерке он заполнится тем что есть в первом множестве и в нем, т.е первым множеством полностью, а последущие будут опять же сравниваться с предыдущими
volvo
Цитата
последущие будут опять же сравниваться с предыдущими
неверно... Последующие будут сравниваться с "произведением" всех предыдущих... Смотри:

s[1] = [1 .. 5];
s[2] = [3 .. 5];
s[3] = [1 .. 4, 6 .. 10];

Изначально m = [1 .. 20]
После первой итерации: m = m * s[1] => [1 .. 20] * [1, 2, 3, 4, 5] = [1, 2, 3, 4, 5]
после второй: m := m * s[2] => [1, 2, 3, 4, 5] * [3, 4, 5] = [3, 4, 5];
после третьей: m = m * s[3] => [3, 4, 5] * [1, 2, 3, 4, 6, 7, 8, 9, 10] = [3, 4]

А теперь посмотри, какие элементы на самом деле встречаются везде?
Msblast
все..вкурил, просто я немного не о том думал
спасибо за помощь
вот тока задача так поставлена что все конечные множества пустыми получаются..( ну да ладно
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.