В первой строке задано текущее время: через двоеточие два целых числа
Условие
На вход программе подаются сведения о пассажирах, забронировавших по Интернету авиабилеты (только тех, у кого время бронирования ещё не истекло). В первой строке задано текущее время: через двоеточие два целых числа, соответствующие часам (от 00 до 23 — ровно 2 символа) и минутам (от 00 до 59 — ровно 2 символа). Во второй строке сообщается число пассажиров N, которое не меньше 3, но не превосходит 1000. Каждая из следующих N строк имеет следующий формат: <Фамилия> <время окончания брони>, где <Фамилия> — строка, состоящая не более чем из 20 непробельных символов; <время окончания брони> — через двоеточие два целых числа, соответствующие часам (от 00 до 23 — ровно 2 символа) и минутам (от 00 до 59 — ровно 2 символа). <Фамилия> и <время окончания брони> разделены одним пробелом. Сведения отсортированы в порядке времени, когда производилось бронирование. Все значения времени относятся к текущим суткам. Требуется написать эффективную программу (укажите используемую версию языка программирования, например Borland Pascal 7.0), которая в хронологическом порядке (т. е. в порядке возрастания значения времени окончания брони) выведет фамилии пассажиров, у которых в ближайшие 3 часа закончится бронь. Пример входных данных:10:003Иванов 13:00Петров 10:00Сидоров 13:12 Результат работы программы на этих входных данных:ПетровИванов 4 балла ставится за эффективную и правильно работающую программу, которая, возможно, содержит одну синтаксическую ошибку.3 балла ставится в случае, когда задача фактически решена, но программа содержит до трёх синтаксических ошибок, или если допущена одна содержательная ошибка, или если все входные данные сохраняются в массиве или иной структуре данных (программа неэффективна по памяти, но эффективна по времени работы).2 балла ставится, если программа неэффективна по времени работы (перебираются все возможные пары элементов), или в программе две содержательные ошибки, либо шесть-семь синтаксических ошибок.1 балл ставится, если программа написана неверно, но из описания алгоритма и общей структуры программы видно, что экзаменуемый в целом правильно представляет путь решения задачи.Далее уточняются перечисленные выше критерии.Критерии оценивания выполнения задания | Баллы | Программа работает верно и эффективно, т.е. корректно выделяет из входных данных время, запоминает фамилии только тех пассажиров, у которых бронь закончится в ближайшие 3 часа. Фамилии этих пассажиров верно сортируются согласно времени окончания, а затем печатаются. Допускается наличие в тексте программы одной синтаксической ошибки: пропущен или неверно указан знак пунктуации; неверно написано или пропущено зарезервированное слово языка программирования; не описана или неверно описана переменная; применяется операция, не допустимая для соответствующего типа данных. | 4 | Программа работает в целом верно, но содержит, по крайней мере, две из следующих нерациональностей: сохраняются фамилии и значения времени для всех пассажиров, сортируются все фамилии, а при печати анализируется, какие из них допустимые. Допускается наличие до трёх синтаксических ошибок, описанных выше. | 3 | Программа работает в целом верно, но не всегда верно определяет искомые значения времени или некорректно работает в случае отсутствия искомых времён. Возможно, в реализации алгоритма содержится одна-две ошибки (используется знак «<» вместо «>», «or» вместо «and» и т.п.). Возможно, некорректно организовано считывание входных данных. Допускается наличие до пяти синтаксических ошибок, описанных выше. | 2 | Программа неверно работает при некоторых входных данных и, возможно, содержит ошибку в сортировке, или времена сортируются верно, а соответствующие им фамилии нет. Допускается до четырёх различных ошибок в ходе решения задачи, в том числе описанных в критериях присвоения 2 баллов. Допускается наличие до семи синтаксических ошибок, описанных выше. | 1 | Не выполнены условия, позволяющие поставить 1, 2, 3 или 4 балла. | 0 | Максимальный балл | 4 |
Формат задания
Решение по шагам
Как рассуждать
Решение. Программа верно читает входные данные, сразу запоминая только фамилии и значения времени окончания брони в массиве тех, у которых она должна закончиться в ближайшие 3 часа. Время при считывании удобно перевести в минуты и в этом виде хранить и сравнивать. Затем полученный массив значений времени сортируется по неубыванию любым алгоритмом сортировки, параллельно переставляются и элементы массива с фамилиями (возможно использование одного массива записей, состоящих из двух полей). Печатаются элементы массива фамилий в полученном в результате сортировки порядке. Пример правильной и эффективной программы на языке Паскаль: type pp=recordname:string[20];time:integer;end;varp:array[1..1000]of pp;q:pp;c,c1:char;i,j,N,time1:integer;beginread(c,c1); {считаны часы текущего времени}time1:=60*((ord(c)-ord('0'))*10+ ord(c1)-ord('0'));readln(c,c,c1); {пропущено двоеточие, и считаны минуты}time1:=time1+(ord(c)-ord('0'))10+ord(c1)-ord('0');readln(N);j:=1;for i:=1 to N dobeginp[j].name:='';repeatread(c);p[j].name:=p[j].name+cuntil c=' '; {считана фамилия}read(c,c1); {считаны часы}p[j].time:=60((ord(c)-ord('0'))*10+ ord(c1)-ord('0'));readln(c,c,c1); {пропущено двоеточие, и считаны минуты}p[j].time:=p[j].time+(ord(c)-ord('0'))*10+ord(c1)-ord('0');if (p[j].time>=time1)and(p[j].time<=time1+180)thenj:=j+1; {данные занесены в массив}end;N:=j-1;for i:=1 to N-1 do {сортируем данные}for j:=1 to N-i doif p[j].time>p[j+1].time thenbeginq:=p[j];p[j]:=p[j+1];p[j+1]:=q;end;for i:=1 to n dowriteln(p[i].name);end. Пример правильной и эффективной программы на языке Бейсик: DIM t(1000) AS INTEGER DIM m(1000) AS STRING * 20 DIM s AS STRING DIM nm AS STRING LINE INPUT s time1 = (ASC(MID(s, 2, 1)) - ASC("0")) * 60 time1 = time1 + (ASC(MID(s, 5, 1)) - ASC("0")) INPUT N k = 0 FOR j = 1 TO N LINE INPUT s c(s, 1,
Осталось ещё 4 шага
Шаг 2
Шаг 3
Шаг 4
Шаг 5
Бесплатно · займёт минуту