{Имеется список класса(все имена различны).Определить,есть ли в классе человек,
который побывал в гостях у всех.Для каждого ученика составить множество
побывавших у него в гостях друзей, сам ученик в это множество не входит.}
program 3;
var spisok,xsp,ysp:set of 1..255;
sad:array[1..10] of set of 1..255;
toys:array[1..100] of string;
i,n,ks,j,l,t,x:integer;
toy:string;
begin write('Введите количество учеников в классе:');
readln(n);spisok:=[];
writeln('Введите имена учеников:');
for i:=1 to n do
begin readln(toys[i]);
spisok:=spisok+[i]
end;
for i:=1 to n do
begin write('Введите кол-во учеников,побывавших у ',toys[i],':');
readln(l);sad[i]:=[i];
for j:=1 to l do
begin readln(toy);x:=0;
for t:=1 to n do
if toy=toys[t] then x:=t;
if x<>0 then sad[i]:=sad[i]+[x]
end;
end;
xsp:=sad[1];
for i:=2 to n do xsp:=xsp*sad[i];ks:=0;
if ks=0 then writeln('Ученик, который побывал в гостях у всех:');
for i:=1 to n do
if i in xsp
then begin writeln(toys[i]);
ks:=ks+1
end;
if ks=1 then writeln('Ни один из учеников не побывал у всех в гостях ')
end.
Вариант № 2
{Имеется список класса(все имена различны). Определить,есть ли в классе человек,
который побывал в гостях у всех. Для каждого ученика составить множество
побывавших у него в гостях друзей, сам ученик в это множество не входит.}
program pr18;
const kol=50;
var spisok,xsp,ysp:set of 1..255;
uchenik:array[1..kol] of set of 1..255;
uch:array[1..kol] of string;
i,n,ks,j,l,t,x:integer;
toy:string;
begin repeat
write('Введите количество учеников в классе:');
readln(n);
spisok:=[]
until ((n<=kol) and (n>0));
writeln('Введите имена учеников:');
for i:=1 to n do
begin readln(uch[i]);
spisok:=spisok+[i]
end;
for i:=1 to n do
begin write('Введите кол-во учеников,побывавших у ',uch[i],':');
readln(l);
uchenik[i]:=[i];
for j:=1 to l do
begin readln(toy);
x:=0;
for t:=1 to n do
if toy=uch[t] then x:=t;
if ((x=0) or (x=i))
then begin writeln('Этого не может быть!');
j:=j-1
end
else uchenik[i]:=uchenik[i]+[x]
end;
end;
xsp:=uchenik[1];
for i:=2 to n do xsp:=xsp*uchenik[i];ks:=0;
for i:=1 to n do
if i in xsp
then ks:=ks+1;
if ks=0 then writeln('Ни один из учеников не побывал у всех в гостях ')
else begin writeln('Ученик, который побывал в гостях у всех:');
for i:=1 to n do
if i in xsp
then writeln(uch[i])
end
end.