Егэ С4. Проверьте эффективность программы - PascalABC.NET
Формулировка задачи:
На вход подаются сведения о клиентах фитнес-центра. В первой строке
указывается целое число N, а каждая из последующих N строк имеет формат
<Год> <Номер месяца> <Продолжительность занятий (в часах)> <Код клиента>
Все данные целочисленные. Значение года лежит в диапазоне от 2000 до 2010,
код клиента — в диапазоне 10-99, продолжительность занятий — в диапазоне 1-30.
Для каждого клиента, присутствующего в исходных данных, определить суммарную
продолжительность занятий в течение всех лет (вначале выводить суммарную
продолжительность, затем код клиента). Сведения о каждом клиенте выводить
на новой строке и упорядочивать по убыванию суммарной продолжительности,
а при их равенстве — по возрастанию кода клиента.
Решение задачи: «Егэ С4. Проверьте эффективность программы»
textual
Листинг программы
type
OneClient = record
sumperiod, code: integer;
end;
var
Skod: Array[10..99] of OneClient;
var
i, j, n, year, m, period, code_client: Integer;
c: OneClient;
begin
// AssignFile(input, 'd:\temp\fitness.txt');Reset(input);
// чтение
for i := 10 to 99 do Skod[i].sumperiod := 0;
Readln(n);
for i := 1 to N do
begin
Readln(year, m, period, code_client);
with Skod[code_client] do
begin
sumperiod := sumperiod + period;
code := code_client
end;
end;
for i := 10 to 98 do {сортируем массив}
for j := i + 1 to 99 do
if (Skod[i].sumperiod < Skod[j].sumperiod)
or ((Skod[i].sumperiod = Skod[j].sumperiod) and (Skod[i].code > Skod[j].code)) then
begin
c := Skod[i];
Skod[i] := Skod[j];
Skod[j] := c;
end;
for i := 10 to 99 do
if (Skod[i].sumperiod > 0) then
Writeln(Skod[i].sumperiod, ' ', Skod[i].code);
end.
Объяснение кода листинга программы
В данном коде используется язык программирования PascalABC.Net.
- Тип данных
OneClientобъявляет структуру с полямиsumperiodиcodeтипаinteger. - Переменная
Skodобъявляет массив из 100 элементов типаOneClient. - Далее, вводятся переменные для цикла и переменная
cтипаOneClient. - В блоке комментариев // чтение осуществляется попытка чтения из файла 'd:\temp\fitness.txt', но поскольку файл не открыт, этот блок кода просто игнорируется.
- Затем, в цикле
forпроисходит заполнение массиваSkodнулями. - Цикл
forсчитывает данные из файла, где каждая строка представляет собой 4 числа, разделенных пробелом. Переменныеyear,m,periodиcode_clientпринимают эти числа. - Внутренний блок
withобрабатывает данные для конкретного клиента, обновляя поляsumperiodиcodeв соответствующем элементе массиваSkod. - Затем, в цикле
for, происходит сортировка массиваSkodпо убыванию суммыsumperiodи в случае равенства - по коду клиента. - В конце, в цикле
forвыводятся на экран значенияsumperiodиcodeдля каждого элемента массиваSkod, еслиsumperiodбольше нуля.