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

На вход про­грам­ме по­да­ют­ся све­де­ния о пас­са­жи­рах, же­ла­ю­щих сдать свой багаж в ка­ме­ру хра­не­ния на за­ра­нее из­вест­ное время до по­лу­но­чи. В пер­вой стро­ке со­об­ща­ет­ся число пас­са­жи­ров N, ко­то­рое не мень­ше 3, но не пре­вос­хо­дит 1000; во вто­рой стро­ке – ко­ли­че­ство ячеек в ка­ме­ре хра­не­ния М, ко­то­рое не мень­ше 10, но не пре­вос­хо­дит 1000. Каж­дая из сле­ду­ю­щих N строк имеет сле­ду­ю­щий фор­мат:

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

<Фа­ми­лия> и <время сдачи ба­га­жа>, а также <время сдачи ба­га­жа> и <время осво­бож­де­ния ячей­ки> раз­де­ле­ны одним про­бе­лом. Время осво­бож­де­ния боль­ше вре­ме­ни сдачи.

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

 

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

3

10

Ива­нов 09:45 12:00

Пет­ров 10:00 11:00

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

 

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

Ива­нов 1

Пет­ров 2

Си­до­ров 1

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

Ре­ше­ние.

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

 

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

var p:array[1..1000] of integer;

c,c1:char;

i,j,N,K:integer;

name:string;

time1,time2:integer;

begin

readln(N,K);

for i:=1 to K do

p[i]:=0;

for i:=1 to N do

begin

name:='';

repeat

read(c);

name:=name+c

until c=' '; {счи­та­на фа­ми­лия}

read(c,c1); {счи­та­ны часы пер­во­го вре­ме­ни}

time1:=60*((ord(c)-ord('0'))*10+ ord(c1)-ord('0'));

read(c,c,c1); {про­пу­ще­но двое­то­чие, и счи­та­ны ми­ну­ты}

time1:=time1+(ord(c)-ord('0'))*10+ord(c1)-ord('0');

read(с,c,c1); {счи­та­ны часы вто­ро­го вре­ме­ни}

time2:=60*((ord(c)-ord('0'))*10+ ord(c1)-ord('0'));

readln(c,c,c1); {про­пу­ще­но двое­то­чие, и счи­та­ны ми­ну­ты}

time2:=time2+(ord(c)-ord('0'))*10+ord(c1)-ord('0');

for j:=1 to K do

if p[j]<=time1 then

begin

p[j]:=time2;

writeln(name,' ',j);

break;

end;

end;

end.

 

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

DIM p(1000) AS INTEGER

DIM s AS STRING

DIM nm AS STRING

INPUT n

INPUT k

FOR i = 1 TO k

p(i) = 0

NEXT i

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)

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

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

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

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

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

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

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

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

FOR i = 1 TO k

IF time1 >= p(i) THEN

p(i) = time2

PRINT nm, i

GOTO 10

ENDIF

NEXT i

10 NEXT j

END

 

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

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