Егэ С4. Проверьте эффективность программы - PascalABC.NET

Узнай цену своей работы

Формулировка задачи:

На вход подаются сведения о клиентах фитнес-центра. В первой строке указывается целое число N, а каждая из последующих N строк имеет формат <Год> <Номер месяца> <Продолжительность занятий (в часах)> <Код клиента> Все данные целочисленные. Значение года лежит в диапазоне от 2000 до 2010, код клиента — в диапазоне 10-99, продолжительность занятий — в диапазоне 1-30. Для каждого клиента, присутствующего в исходных данных, определить суммарную продолжительность занятий в течение всех лет (вначале выводить суммарную продолжительность, затем код клиента). Сведения о каждом клиенте выводить на новой строке и упорядочивать по убыванию суммарной продолжительности, а при их равенстве — по возрастанию кода клиента.
Листинг программы
  1. Var Kod:Array[10..99] of Integer;{номер кодов клиентов в порядке возрастания}
  2. Var Skod:Array[10..99] of Integer;{сортированный код клиента в порядке убывания
  3. продолжительности занятий}
  4. var i,n,c,j:Integer;
  5. Var S:String;
  6. begin
  7. Readln(n);
  8. For i:=1 to N do begin
  9. Readln(s);
  10. Delete(s,1,posex(' ',s,pos(' ',s)+1));{год и номер месяца нас не интересуют}
  11. Kod[StrToint(RightStr(s,2))]:=Kod[StrToint(RightStr(s,2))]+StrToInt(copy(s,1,pos(' ',s)-1));
  12. SKod[StrToint(RightStr(s,2))]:=SKod[StrToint(RightStr(s,2))]+StrToInt(copy(s,1,pos(' ',s)-1));
  13. end;
  14. For i:=10 to 98 do {сортируем массив в порядке убывания продолжительности}
  15. For J:= 98 downto i do
  16. If Skod[j]<Skod[j+1] then begin
  17. c:=Skod[j];
  18. Skod[j]:=Skod[j+1];
  19. Skod[j+1]:=c;
  20. end;
  21. for j:=10 to 99 do {сравниваем макс. значение продолжит со значениями массива
  22. в котором нумерация идет в порядке возрастания }
  23. For i:=10 to 99 do
  24. If (Skod[j]>0)and (Skod[j]=Kod[i]) then begin {если продолж. занятий не отрицательна и
  25. равна значению массиву КОД то выводим продолжит. занятий и номер клиента}
  26. Writeln(Skod[j],' ',i);
  27. Kod[i]:=-1; {заменяем значение продолжительности занятий на отрицательное число, чтобы не было
  28. повторений, ведь заведомо известно что продолжит не может быть отрицательной}
  29. break;{выходим сразу из цикла и проверяем следующее значение, сортированное по убыванию}
  30. end;
  31. end.

Решение задачи: «Егэ С4. Проверьте эффективность программы»

textual
Листинг программы
  1. type
  2.   OneClient = record
  3.     sumperiod, code: integer;
  4.   end;
  5.  
  6. var
  7.   Skod: Array[10..99] of OneClient;
  8.  
  9. var
  10.   i, j, n, year, m, period, code_client: Integer;
  11.   c: OneClient;
  12.  
  13. begin
  14.   // AssignFile(input, 'd:\temp\fitness.txt');Reset(input);
  15.  
  16.   // чтение
  17.   for i := 10 to 99 do Skod[i].sumperiod := 0;
  18.   Readln(n);
  19.   for i := 1 to N do
  20.   begin
  21.     Readln(year, m, period, code_client);
  22.     with Skod[code_client] do
  23.     begin
  24.       sumperiod := sumperiod + period;
  25.       code := code_client
  26.     end;  
  27.   end;
  28.  
  29.   for i := 10 to 98 do {сортируем массив}
  30.     for j := i + 1 to 99 do
  31.       if (Skod[i].sumperiod < Skod[j].sumperiod)
  32.            or ((Skod[i].sumperiod = Skod[j].sumperiod) and (Skod[i].code > Skod[j].code)) then
  33.       begin
  34.         c := Skod[i];
  35.         Skod[i] := Skod[j];
  36.         Skod[j] := c;
  37.       end;
  38.  
  39.   for i := 10 to 99 do
  40.     if (Skod[i].sumperiod > 0) then
  41.       Writeln(Skod[i].sumperiod, ' ', Skod[i].code);
  42. end.

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

В данном коде используется язык программирования PascalABC.Net.

  1. Тип данных OneClient объявляет структуру с полями sumperiod и code типа integer.
  2. Переменная Skod объявляет массив из 100 элементов типа OneClient.
  3. Далее, вводятся переменные для цикла и переменная c типа OneClient.
  4. В блоке комментариев // чтение осуществляется попытка чтения из файла 'd:\temp\fitness.txt', но поскольку файл не открыт, этот блок кода просто игнорируется.
  5. Затем, в цикле for происходит заполнение массива Skod нулями.
  6. Цикл for считывает данные из файла, где каждая строка представляет собой 4 числа, разделенных пробелом. Переменные year, m, period и code_client принимают эти числа.
  7. Внутренний блок with обрабатывает данные для конкретного клиента, обновляя поля sumperiod и code в соответствующем элементе массива Skod.
  8. Затем, в цикле for, происходит сортировка массива Skod по убыванию суммы sumperiod и в случае равенства - по коду клиента.
  9. В конце, в цикле for выводятся на экран значения sumperiod и code для каждого элемента массива Skod, если sumperiod больше нуля.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

12   голосов , оценка 3.917 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы