Помощь - Поиск - Пользователи - Календарь
Полная версия: Множества
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Athen
type food = ( broad,butter,milk,meat,fish,salt,cheese,saucers,sugar,tea,cafe);
assort = set of food;
shop = array[1..20] of assort;
Описать процедуру Nal(sh, A), которая по информации из массива Sh типа shop (Sh(i) – это множество продуктов, имеющихся в i-м магазине) присваивает параметру А типа assort множество всех продуктов, которые есть во всех магазинах.

начала делать так:

uses crt;
type food = ( broad,butter,milk,meat,fish,salt,cheese,saucers,sugar,tea,cafe);
assort = set of food;
shop = array[1..20] of assort;
procedure nal(sh:shop; a:assort);
var i,m,p,j:integer;
begin
writeln('vvedite kol-va magazinov');
readln(m);
for j:=1 to m do begin
writeln('vvedite kol-vo productov');
readln(p);
writeln('vvedite productu,imeushiesya v magazine: broad,butter,milk,meat,fish,salt,cheese,saucers,sugar,tea,cafe');
for i:=1 to p do readln(sh[i]);
for i:=1 to p do
if sh[i] in shop then


readln;
End.



че-то теперь ступор какой-то... наверн за лето забыла все wacko.gif
volvo
Вот пример решения подобной задачи:
Примеры решения задач с использованием множеств
Athen
сделала как в примере, но почему-то не пашет.... unsure.gif

uses crt;
const n=3;
type food = ( broad,butter,milk,meat,fish,salt,cheese,saucers,sugar,tea,cafe);
assort = set of food;
shop = array[1..3] of assort;
const
s:array[food] of string =('broad','butter','milk','meat','fish','salt','cheese','saucers','sugar','tea','cafe');
stores: shop = (
[broad,butter,milk,meat,fish], {1 magazin}
[broad,butter,fish,salt,cheese,saucers,sugar,tea], {2 magazin}
[fish,salt,cheese,saucers,sugar,cafe] {3 magazin}
);
procedure nal(sh:shop; a:assort);
var i:integer; j:food;
begin
a:=sh[1]; {vubiraem assortiment 1-go magazina}
for i:=1 to n do
a:=a*sh[i]; {peresechenie mnojestv dlya poiska "est vezde"}
end;
procedure write_set(x:assort); {procedura raspechatuvaniya znachenij mnojestva}
var j:food;
begin
{perebiraem vse vozmojnue znacheniya i vuvodim tolko nazvaniya tex iz nix, kotorue est v peredannom v proceduru mnojestve}
for j:=low(food) to high(food) do
if j in x then write(s[j],' ');
end;

var a:assort; j:food;
Begin
clrscr;
nal(stores,a);
write('productu vo vsex magazinax: ');
write_set(a);
readln;
End.

klem4

uses crt;
const n=3;
type food = ( broad,butter,milk,meat,fish,salt,cheese,saucers,sugar,tea,cafe);
assort = set of food;
shop = array[1..3] of assort;
const
s:array[food] of string =('broad','butter','milk','meat','fish','salt','cheese','saucers','sugar','tea','cafe');
stores: shop = (
[broad,butter,milk,meat,fish], {1 magazin}
[broad,butter,fish,salt,cheese,saucers,sugar,tea], {2 magazin}
[fish,salt,cheese,saucers,sugar,cafe] {3 magazin}
);
procedure nal(sh:shop; var a:assort); // <--------VAR
var i:integer; j:food;
begin
a := []; // <------------
for i:=1 to n do a := a + sh[i]; // <----------------
end;
procedure write_set(x:assort); {procedura raspechatuvaniya znachenij mnojestva}
var j:food;
begin
{perebiraem vse vozmojnue znacheniya i vuvodim tolko nazvaniya tex iz nix, kotorue est v peredannom v proceduru mnojestve}
for j:=low(food) to high(food) do
if j in x then write(s[j],' ');
end;

var a:assort; j:food;
Begin
clrscr;
nal(stores,a);
write('productu vo vsex magazinax: ');
write_set(a);
readln;
End.


на правильность особо не проверял ...
volvo
Цитата
на правильность особо не проверял ...
Вот и напрасно... Там вся игра как раз на "пересечении", а не на сложении множеств... Так что, Athen, VAR в заголовок добавь, а вот умножение сложением заменять ни в коем случае не надо... Иначе получишь совсем не то, что нужно...
klem4
Толи я задание не верно понял, толи тебя ... Вот програмама:

uses crt;

const
max_shops = 4;

type
TFoodKinds = (beer, milk, water, tea, coffe);
TFoodSet = set of TFoodKinds;
TShops = array [1..max_shops] of TFoodSet;

const
food_label: array [TFoodKinds] of string = (
'beer', 'milk', 'water', 'tea', 'coffe'
);

procedure print_set(const _set: TFoodSet);
var
i: TFoodKinds;
begin
for i := Low(TFoodKinds) to High(TFoodKinds) do
if i in _set then writeln(food_label[i]);
end;

procedure get_rslt_set(const shops: TShops; var _set: TFoodSet);
var
i: integer;
begin
_set := [];
for i := 1 to max_shops do
_set := _set + shops[i];
end;

var
shops: TShops = (
[tea, beer],
[milk],
[],
[beer]
);

in_all: TFoodSet;

begin
clrscr;
get_rslt_set(shops, in_all);
print_set(in_all);
readln;
end.


она не верна ?
Athen
о, спасибо! теперь идет! good.gif
volvo
Цитата
она не верна ?
Что она найдет, можно полюбопытствовать? Надо найти, напомню,
Цитата
множество всех продуктов, которые есть во всех магазинах.
мисс_граффити
Опять многозначность русского языка ))
"В первой коробке 2 кубика, во второй 3, в третьей 10, а в четвертой 6. Сколько кубиков во всех коробках?" - ищем именно сумму. А если "Какие кубики есть во всех коробках" - уже пересечение множеств.
Бред.
klem4
Понятно, я фразу эту неправильно понял, в моем случае находится общий ассортимент.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.