неділя, 14 травня 2017 р.

Практична робота № 11.2

Тема. Побудова алгоритмів з використанням множин
Мета: навчитися створювати програми з використанням множин для розв’язання задач

Завдання
Дано множину продуктів, які можна купити в різних магазинах (хліб, сир, ковбаса, свинина, телятина, яблуки, картопля тощо). Є два магазини, у яких розміщені певні товари з даного переліку. Написати програму, яка визначить:
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;


Додаткове завдання

Додати кнопку, яка дозволить вивести лише ті товари, які є і в першому і в другому магазинах одночасно.

Немає коментарів:

Дописати коментар