Определить номера станков, требующих одинакового времени наладки - Free Pascal
Формулировка задачи:
В некотором цехе имеется определенное количество станков, требующих наладки. Известно время наладки каждого станка. Определить номера станков, требующих одинакового времени наладки. Например, для заданной таблицы ответ можно получить в таком виде:
Номер
Станка 1 2 3 4 5 6 7 8
Время
наладки 15 5 7 10 5 15 7 5
15 – 1, 6
5 - 2, 5, 8
7 - 3, 7
10 - 4
Решение задачи: «Определить номера станков, требующих одинакового времени наладки»
textual
Листинг программы
{$mode objfpc}
uses fgl;
type
lst = specialize tfpglist<integer>;
map = specialize tfpgmap<integer, lst>;
index = 1 .. 8;
procedure printlist(L : lst);
var X : integer;
begin
for X in L do write(X:3);
writeln;
end;
var
m : map;
L : lst;
i : integer;
a : array[index] of integer =
(15, 5, 7, 10, 5, 15, 7, 5);
begin
m := map.Create;
for i in index do
begin
if m.indexof(a[i]) = -1 then m[a[i]] := lst.Create;
m[a[i]].Add(i);
end;
for i := 0 to m.count - 1 do
begin
write(m.Keys[i]:2, ' -> ') ; PrintList(m.Data[i]);
m.Data[i].Free;
end;
m.Free;
end.
Объяснение кода листинга программы
- Создание объекта
mapтипаtfpgmap<integer, lst>. - Создание объекта
lstтипаtfpglist<integer>. - Создание массива
aтипаarray[index] of integer. - Инициализация массива
aзначениями: (15, 5, 7, 10, 5, 15, 7, 5). - Создание цикла по индексам массива
a. - Проверка наличия ключа
a[i]в объектеmapметодомindexof(). - Если ключ не найден, то создание нового элемента в объекте
mapс ключомa[i]и значениемlst.Create(). - Добавление значения
iв списокm[a[i]]. - Создание цикла по ключам объекта
map. - Вывод ключа
m.Keys[i]и спискаm.Data[i]в консоль. - Освобождение памяти, выделенной под список
m.Data[i]. - Освобождение памяти, выделенной под объект
map.