На вход программе подаются сведения о телефонах всех сотрудников некоторого учреждения - PascalABC.NET
Формулировка задачи:
На вход программе подаются сведения о телефонах всех сотрудников некоторого учреждения. В первой строке сообщается количество сотрудников N, каждая из следующих N строк имеет следующий формат: <Фамилия> <Инициалы> <телефон>, где <Фамилия> - строка, состоящая не более чем из 20 символов, <Инициалы> - строка, состоящая не более чем из 4-х символов (буква, точка, буква, точка), <телефон> - семизначный номер, 3-я и 4, я, а также 5-я и 6-я цифры которого разделены символом «-». <Фамилия> и <Инициалы>, а также <Инициалы> и <телефон> разделены одним пробелом. Пример входной строки:
Иванов П.С. 555-66-77
Сотрудники одного подразделения имеют один и тот же номер телефона. Номера телефонов в учреждении отличаются только двумя последними цифрами.
Требуется написать как можно более эффективную программу, которая будет выводить на экран информацию, сколько в среднем сотрудников работает в одном подразделении данного учреждения.
Если можно преобразовать программу ниже под Pascal ABC.Net:
Листинг программы
- var
- c: set of byte;
- n, i, k, j, l: byte;
- b: char;
- begin
- assign (input, 'input.txt'); reset (input);
- assign (output, 'output.txt'); rewrite (output);
- readln (n); {количество сотрудников}
- k:=0; {счетчик подразделений}
- c:=[ ]; {множество для хранения номеров подразделений}
- for i:=1 to n do
- begin
- j:=0;
- while j<>2 do
- begin
- read (b);
- if b='-' then j:=j+1;
- end;
- readln (l); {считываем номер подразделения}
- if not (l in c) {если он еще не встречался}
- then
- begin
- k:=k+1; {прибавляем единицу к счетчику}
- c:=c+[l]; {помещаем номер подразделения во множество}
- end;
- end;
- writeln (n/k:5:3); {находим среднее количество сотрудников в подразделении}
- close (input);
- close (output);
- end.
Решение задачи: «На вход программе подаются сведения о телефонах всех сотрудников некоторого учреждения»
textual
Листинг программы
- var
- c: set of byte;
- n, i, k, j, l: byte;
- b: char;
- input, output: text;
- begin
- assign (input, 'input.txt'); reset (input);
- assign (output, 'output.txt'); rewrite (output);
- readln (input,n); {количество сотрудников}
- k:=0; {счетчик подразделений}
- c:=[ ]; {множество для хранения номеров подразделений}
- for i:=1 to n do
- begin
- j:=0;
- while j<>2 do
- begin
- read (input,b);
- if b='-' then j:=j+1;
- end;
- readln (input,l); {считываем номер подразделения}
- if not (l in c) {если он еще не встречался}
- then
- begin
- k:=k+1; {прибавляем единицу к счетчику}
- c:=c+[l]; {помещаем номер подразделения во множество}
- end;
- end;
- writeln (n/k:5:3); {находим среднее количество сотрудников в подразделении}
- close (input);
- close (output);
- end.
Объяснение кода листинга программы
- Ввод данных с помощью файла input.txt, вывод результатов в файл output.txt.
- Считывание количества сотрудников (n).
- Инициализация счетчика подразделений (k) и множества для хранения номеров подразделений (c).
- Обход сотрудников (для каждого сотрудника):
а) Счетчик подразделения (j) инициализируется нулем.
б) Пока не встретится символ
-
, считывается символ (b) и увеличивается счетчик подразделения (j). в) Считывается номер подразделения (l). г) Если номер подразделения еще не встречался (l не принадлежит множеству c), то:- Увеличивается счетчик подразделения (k).
- Номер подразделения добавляется в множество (c).
- Выводится среднее количество сотрудников в подразделении (n/k) с шагом 5 знаков после запятой.
- Файлы закрываются.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д