Тема. Побудова алгоритмів з використанням множин
Мета: навчитися створювати програми з використанням множин для розв’язання
задач
Завдання
Дано множину продуктів, які можна купити в різних магазинах (хліб, сир,
ковбаса, свинина, телятина, яблуки, картопля тощо). Є два магазини, у яких
розміщені певні товари з даного переліку. Написати програму, яка визначить:
1. Які товари є в кожному
магазині.
2. Які товари є в першому
магазині, але немає в другому.
3. Які товари є в другому
магазині, але немає в першому.
4. Якого з товарів з
даного переліку немає в жодному з магазинів.
Розв’язання
var t,t1,t2,t3:set of byte;
n1,n2,n3:integer;
procedure Vivid_t3;
//Дана процедура виводить елементи множини t3 до Label4
var i:integer;
begin
Form1.Label4.Caption :='';
for i:=0 to n1 - 1 do begin
if i in t3 then
Form1.Label4.Caption :=
Form1.Label4.Caption +' '+Form1.Memo1.Lines[i];
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
FormCreate(Self);
//Об'єднання множин t1 та t2
t3:=t1+t2;
Vivid_t3;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
FormCreate(Self);
//Різниця множин t1 та t2
t3:=t1-t2;
Vivid_t3;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
FormCreate(Self);
//Різниця множин t2 та t1
t3:=t2-t1;
Vivid_t3;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
FormCreate(Self);
//Від елементів множини t
віднімаємо елементи множин t2 та t1
t3:=t-t2-t1;
Vivid_t3;
end;
procedure TForm1.FormCreate(Sender: TObject);
var i,j:integer;
begin
//Визначаємо кількість товарів:
загальну, у 1 магазині, у 2 магазині
n1:= Memo1.Lines.Count;
n2:= Memo2.Lines.Count;
n3:= Memo3.Lines.Count;
//Очищуємо множини t, t1, t2
t:=[]; t1:=[]; t2:=[];
//До множини t додаємо номери
елементів з Memo1
for i := 0 to n1 - 1 do begin
t:=t+[i];
end;
//До множини t1 додаємо ті номери
тих елементів з Memo1, які містяться в Memo2
for i := 0 to n1 - 1 do begin
for j := 0 to n2 - 1 do begin
if
Memo1.Lines[i]=Memo2.Lines[j] then t1:=t1+[i];
end;
end;
//До множини t2 додаємо ті номери
тих елементів з Memo1, які містяться в Memo3
for i := 0 to n1 - 1 do begin
for j := 0 to n3 - 1 do begin
if
Memo1.Lines[i]=Memo3.Lines[j] then t2:=t2+[i];
end;
end;
end;
Додаткове завдання
Додати кнопку, яка дозволить вивести лише ті товари, які є і в першому і в
другому магазинах одночасно.
Немає коментарів:
Дописати коментар