Задания
Версия для печати и копирования в MS Word
Тип Д19 C4 № 7424
i

На вход про­грам­ме по­да­ют­ся све­де­ния о пас­са­жи­рах, за­бро­ни­ро­вав­ших по Ин­тер­не­ту авиа­би­ле­ты (толь­ко тех, у кого время бро­ни­ро­ва­ния ещё не ис­тек­ло). В пер­вой стро­ке за­да­но те­ку­щее время: через двое­то­чие два целых числа, со­от­вет­ству­ю­щие часам (от 00 до 23  — ровно 2 сим­во­ла) и ми­ну­там (от 00 до 59  — ровно 2 сим­во­ла). Во вто­рой стро­ке со­об­ща­ет­ся число пас­са­жи­ров N, ко­то­рое не мень­ше 3, но не пре­вос­хо­дит 1000. Каж­дая из сле­ду­ю­щих N строк имеет сле­ду­ю­щий фор­мат:

 

<Фа­ми­лия> <время окон­ча­ния брони>,

 

где <Фа­ми­лия>  — стро­ка, со­сто­я­щая не более чем из 20 не­про­бель­ных сим­во­лов; <время окон­ча­ния брони>  — через двое­то­чие два целых числа, со­от­вет­ству­ю­щие часам (от 00 до 23  — ровно 2 сим­во­ла) и ми­ну­там (от 00 до 59  — ровно 2 сим­во­ла). <Фа­ми­лия> и <время окон­ча­ния брони> раз­де­ле­ны одним про­бе­лом. Све­де­ния от­сор­ти­ро­ва­ны в по­ряд­ке вре­ме­ни, когда про­из­во­ди­лось бро­ни­ро­ва­ние. Все зна­че­ния вре­ме­ни от­но­сят­ся к те­ку­щим сут­кам.

Тре­бу­ет­ся на­пи­сать эф­фек­тив­ную про­грам­му (ука­жи­те ис­поль­зу­е­мую вер­сию языка про­грам­ми­ро­ва­ния, на­при­мер Borland Pascal 7.0), ко­то­рая в хро­но­ло­ги­че­ском по­ряд­ке (т. е. в по­ряд­ке воз­рас­та­ния зна­че­ния вре­ме­ни окон­ча­ния брони) вы­ве­дет фа­ми­лии пас­са­жи­ров, у ко­то­рых в бли­жай­шие 3 часа за­кон­чит­ся бронь.

 

При­мер вход­ных дан­ных:

10:00

3

Ива­нов 13:00

Пет­ров 10:00

Си­до­ров 13:12

 

Ре­зуль­тат ра­бо­ты про­грам­мы на этих вход­ных дан­ных:

Пет­ров

Ива­нов

Спрятать решение

Ре­ше­ние.

Про­грам­ма верно чи­та­ет вход­ные дан­ные, сразу за­по­ми­ная толь­ко фа­ми­лии и зна­че­ния вре­ме­ни окон­ча­ния брони в мас­си­ве тех, у ко­то­рых она долж­на за­кон­чить­ся в бли­жай­шие 3 часа. Время при счи­ты­ва­нии удоб­но пе­ре­ве­сти в ми­ну­ты и в этом виде хра­нить и срав­ни­вать. Затем по­лу­чен­ный мас­сив зна­че­ний вре­ме­ни сор­ти­ру­ет­ся по не­убы­ва­нию любым ал­го­рит­мом сор­ти­ров­ки, па­рал­лель­но пе­ре­став­ля­ют­ся и эле­мен­ты мас­си­ва с фа­ми­ли­я­ми (воз­мож­но ис­поль­зо­ва­ние од­но­го мас­си­ва за­пи­сей, со­сто­я­щих из двух полей). Пе­ча­та­ют­ся эле­мен­ты мас­си­ва фа­ми­лий в по­лу­чен­ном в ре­зуль­та­те сор­ти­ров­ки по­ряд­ке.

 

При­мер пра­виль­ной и эф­фек­тив­ной про­грам­мы на языке Пас­каль:

 

type pp=record

name:string[20];

time:integer;

end;

var

p:array[1..1000]of pp;

q:pp;

c,c1:char;

i,j,N,time1:integer;

begin

read(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 do

begin

p[j].name:='';

repeat

read(c);

p[j].name:=p[j].name+c

until 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)then

j:=j+1; {дан­ные за­не­се­ны в мас­сив}

end;

N:=j-1;

for i:=1 to N-1 do {сор­ти­ру­ем дан­ные}

for j:=1 to N-i do

if p[j].time>p[j+1].time then

begin

q:=p[j];

p[j]:=p[j+1];

p[j+1]:=q;

end;

for i:=1 to n do

writeln(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, 1, 1)) - ASC("0")) * 60 * 10

time1 = time1 + (ASC(MID$(s, 2, 1)) - ASC("0")) * 60

time1 = time1 + (ASC(MID$(s, 4, 1)) - ASC("0")) * 10

time1 = time1 + (ASC(MID$(s, 5, 1)) - ASC("0"))

INPUT N

k = 0

FOR j = 1 TO N

LINE INPUT s

c$ = MID$(s, 1, 1)

i = 1

WHILE NOT (c$ = " ")

i = i + 1

c$ = MID$(s, i, 1)

WEND

nm = MID$(s, 1, i)

time2 = (ASC(MID$(s, i + 1, 1)) - ASC("0")) * 60 * 10

time2 = time2 + (ASC(MID$(s, i + 2, 1)) - ASC("0")) * 60

time2 = time2 + (ASC(MID$(s, i + 4, 1)) - ASC("0")) * 10

time2 = time2 + (ASC(MID$(s, i + 5, 1)) - ASC("0"))

IF time2 >= time1 AND time2 <= time1 + 180 THEN

k = k + 1

t(k) = time2

m(k) = nm

ENDIF

NEXT j

FOR i = 1 TO k - 1

FOR j = 1 TO k - i

IF t(j) > t(j + 1) THEN

time2 = t(j): nm = m(j)

t(j) = t(j + 1): m(j) = m(j + 1)

t(j + 1) = time2: m(j + 1) = nm

ENDIF

NEXT j

NEXT i

FOR i = 1 TO k

PRINT m(i)

NEXT i

END

Спрятать критерии
Критерии проверки:

4 балла ста­вит­ся за эф­фек­тив­ную и пра­виль­но ра­бо­та­ю­щую про­грам­му, ко­то­рая, воз­мож­но, со­дер­жит одну син­так­си­че­скую ошиб­ку.

3 балла ста­вит­ся в слу­чае, когда за­да­ча фак­ти­че­ски ре­ше­на, но про­грам­ма со­дер­жит до трёх син­так­си­че­ских оши­бок, или если до­пу­ще­на одна со­дер­жа­тель­ная ошиб­ка, или если все вход­ные дан­ные со­хра­ня­ют­ся в мас­си­ве или иной струк­ту­ре дан­ных (про­грам­ма не­эф­фек­тив­на по па­мя­ти, но эф­фек­тив­на по вре­ме­ни ра­бо­ты).

2 балла ста­вит­ся, если про­грам­ма не­эф­фек­тив­на по вре­ме­ни ра­бо­ты (пе­ре­би­ра­ют­ся все воз­мож­ные пары эле­мен­тов), или в про­грам­ме две со­дер­жа­тель­ные ошиб­ки, либо шесть-семь син­так­си­че­ских оши­бок.

1 балл ста­вит­ся, если про­грам­ма на­пи­са­на не­вер­но, но из опи­са­ния ал­го­рит­ма и общей струк­ту­ры про­грам­мы видно, что эк­за­ме­ну­е­мый в целом пра­виль­но пред­став­ля­ет путь ре­ше­ния за­да­чи.

Далее уточ­ня­ют­ся пе­ре­чис­лен­ные выше кри­те­рии.

Кри­те­рии оце­ни­ва­ния вы­пол­не­ния за­да­нияБаллы
Про­грам­ма ра­бо­та­ет верно и эф­фек­тив­но, т.е. кор­рект­но вы­де­ля­ет из вход­ных дан­ных время, за­по­ми­на­ет фа­ми­лии толь­ко тех пас­са­жи­ров, у ко­то­рых бронь за­кон­чит­ся в бли­жай­шие 3 часа. Фа­ми­лии этих пас­са­жи­ров верно сор­ти­ру­ют­ся со­глас­но вре­ме­ни окон­ча­ния, а затем пе­ча­та­ют­ся. До­пус­ка­ет­ся на­ли­чие в тек­сте про­грам­мы одной син­так­си­че­ской ошиб­ки: про­пу­щен или не­вер­но ука­зан знак пунк­ту­а­ции; не­вер­но на­пи­са­но или про­пу­ще­но за­ре­зер­ви­ро­ван­ное слово языка про­грам­ми­ро­ва­ния; не опи­са­на или не­вер­но опи­са­на пе­ре­мен­ная; при­ме­ня­ет­ся опе­ра­ция, не до­пу­сти­мая для со­от­вет­ству­ю­ще­го типа дан­ных.4
Про­грам­ма ра­бо­та­ет в целом верно, но со­дер­жит, по край­ней мере, две из сле­ду­ю­щих не­ра­ци­о­наль­но­стей: со­хра­ня­ют­ся фа­ми­лии и зна­че­ния вре­ме­ни для всех пас­са­жи­ров, сор­ти­ру­ют­ся все фа­ми­лии, а при пе­ча­ти ана­ли­зи­ру­ет­ся, какие из них до­пу­сти­мые. До­пус­ка­ет­ся на­ли­чие до трёх син­так­си­че­ских оши­бок, опи­сан­ных выше.3
Про­грам­ма ра­бо­та­ет в целом верно, но не все­гда верно опре­де­ля­ет ис­ко­мые зна­че­ния вре­ме­ни или не­кор­рект­но ра­бо­та­ет в слу­чае от­сут­ствия ис­ко­мых времён. Воз­мож­но, в ре­а­ли­за­ции ал­го­рит­ма со­дер­жит­ся одна-две ошиб­ки (ис­поль­зу­ет­ся знак «<» вме­сто «>», «or» вме­сто «and» и т.п.). Воз­мож­но, не­кор­рект­но ор­га­ни­зо­ва­но счи­ты­ва­ние вход­ных дан­ных. До­пус­ка­ет­ся на­ли­чие до пяти син­так­си­че­ских оши­бок, опи­сан­ных выше.2
Про­грам­ма не­вер­но ра­бо­та­ет при не­ко­то­рых вход­ных дан­ных и, воз­мож­но, со­дер­жит ошиб­ку в сор­ти­ров­ке, или вре­ме­на сор­ти­ру­ют­ся верно, а со­от­вет­ству­ю­щие им фа­ми­лии нет. До­пус­ка­ет­ся до четырёх раз­лич­ных оши­бок в ходе ре­ше­ния за­да­чи, в том числе опи­сан­ных в кри­те­ри­ях при­сво­е­ния 2 бал­лов. До­пус­ка­ет­ся на­ли­чие до семи син­так­си­че­ских оши­бок, опи­сан­ных выше.1
Не вы­пол­не­ны усло­вия, поз­во­ля­ю­щие по­ста­вить 1, 2, 3 или 4 балла.0
Мак­си­маль­ный балл4
Источник: ЕГЭ по ин­фор­ма­ти­ке 08.05.2014. До­сроч­ная волна, ре­зерв­ный день. Ва­ри­ант 202