Определить номера станков, требующих одинакового времени наладки - 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.

Объяснение кода листинга программы

  1. Создание объекта map типа tfpgmap<integer, lst>.
  2. Создание объекта lst типа tfpglist<integer>.
  3. Создание массива a типа array[index] of integer.
  4. Инициализация массива a значениями: (15, 5, 7, 10, 5, 15, 7, 5).
  5. Создание цикла по индексам массива a.
  6. Проверка наличия ключа a[i] в объекте map методом indexof().
  7. Если ключ не найден, то создание нового элемента в объекте map с ключом a[i] и значением lst.Create().
  8. Добавление значения i в список m[a[i]].
  9. Создание цикла по ключам объекта map.
  10. Вывод ключа m.Keys[i] и списка m.Data[i] в консоль.
  11. Освобождение памяти, выделенной под список m.Data[i].
  12. Освобождение памяти, выделенной под объект map.

Оцени полезность:

9   голосов , оценка 4 из 5
Похожие ответы