Егэ С4. Проверьте эффективность программы - PascalABC.NET
Формулировка задачи:
На вход подаются сведения о клиентах фитнес-центра. В первой строке
указывается целое число N, а каждая из последующих N строк имеет формат
<Год> <Номер месяца> <Продолжительность занятий (в часах)> <Код клиента>
Все данные целочисленные. Значение года лежит в диапазоне от 2000 до 2010,
код клиента — в диапазоне 10-99, продолжительность занятий — в диапазоне 1-30.
Для каждого клиента, присутствующего в исходных данных, определить суммарную
продолжительность занятий в течение всех лет (вначале выводить суммарную
продолжительность, затем код клиента). Сведения о каждом клиенте выводить
на новой строке и упорядочивать по убыванию суммарной продолжительности,
а при их равенстве — по возрастанию кода клиента.
Листинг программы
- Var Kod:Array[10..99] of Integer;{номер кодов клиентов в порядке возрастания}
- Var Skod:Array[10..99] of Integer;{сортированный код клиента в порядке убывания
- продолжительности занятий}
- var i,n,c,j:Integer;
- Var S:String;
- begin
- Readln(n);
- For i:=1 to N do begin
- Readln(s);
- Delete(s,1,posex(' ',s,pos(' ',s)+1));{год и номер месяца нас не интересуют}
- Kod[StrToint(RightStr(s,2))]:=Kod[StrToint(RightStr(s,2))]+StrToInt(copy(s,1,pos(' ',s)-1));
- SKod[StrToint(RightStr(s,2))]:=SKod[StrToint(RightStr(s,2))]+StrToInt(copy(s,1,pos(' ',s)-1));
- end;
- For i:=10 to 98 do {сортируем массив в порядке убывания продолжительности}
- For J:= 98 downto i do
- If Skod[j]<Skod[j+1] then begin
- c:=Skod[j];
- Skod[j]:=Skod[j+1];
- Skod[j+1]:=c;
- end;
- for j:=10 to 99 do {сравниваем макс. значение продолжит со значениями массива
- в котором нумерация идет в порядке возрастания }
- For i:=10 to 99 do
- If (Skod[j]>0)and (Skod[j]=Kod[i]) then begin {если продолж. занятий не отрицательна и
- равна значению массиву КОД то выводим продолжит. занятий и номер клиента}
- Writeln(Skod[j],' ',i);
- Kod[i]:=-1; {заменяем значение продолжительности занятий на отрицательное число, чтобы не было
- повторений, ведь заведомо известно что продолжит не может быть отрицательной}
- break;{выходим сразу из цикла и проверяем следующее значение, сортированное по убыванию}
- end;
- end.
Решение задачи: «Егэ С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
больше нуля.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д