Определить номера станков, требующих одинакового времени наладки - 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д