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

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

 

<Фа­ми­лия> <Имя> <класс>,

где <Фа­ми­лия>  — стро­ка, со­сто­я­щая не более чем из 20 сим­во­лов,

<Имя>  — стро­ка, со­сто­я­щая не более чем из 15 сим­во­лов,

<класс>  — год обу­че­ния (от 1 до 12) и за­глав­ная буква (от «А» до «Я») без про­бе­ла. <Фа­ми­лия> и <Имя>, а также <Имя> <класс> раз­де­ле­ны одним про­бе­лом.

При­мер вход­ной стро­ки:

Ива­нов Петр 10Б

 

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

На­при­мер:

100

1 7 11

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

Ре­ше­ние.

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

 

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

 

var рс:array[1..12] of integer;

р : 1. .12;

class:string[3];

с:char;

max, i, N:integer;

begin readln(N) ;

for i:=1 to 12 do

pc[i]:=0;

for i:=l to N do

begin

repeat

read(c)

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

repeat

read(c)

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

readln(class);

{опре­де­ля­ем номер па­рал­ле­ли}

if length(class)=2 then

p:=ord(class[1])-ord(10') else

p:=(ord(class[1])-ord('0'))*10+

ord(class[2])-ord('0');

pc[p]:=pc[p]+1;{учи­ты­ва­ем уче­ни­ка этой па­рал­ле­ли}

end;

max:=0;

for i:=1 to 12 do

if pc[i]>max then max:=pc[i];

writeln('Мак­си­мум уче­ни­ков в па­рал­ле­ли:',max);

for i:=1 to 12 do

if pc[i]=max then

write(i,' ');

readln

end.

 

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

 

DIM i, j, р, n, max, pc(12) AS INTEGER

DIM m(12)

DIM s AS STRING

FOR i = 1 TO 12

pc(i) = 0

NEXT i

INPUT n

FOR j = 1 TO n

LINE INPUT s

c$ = MI D$ (s, 1, 1)

i = 1

WHILE NOT (с $ = " ")

i = i - 1

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

WEND i = i + 1

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

WHILE NOT (с $ = " ")

i = i + 1

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

WEND

s = MID$ (s, i + 1, 3)

IF MID$(s, 2, 1) >= "0" AND MID$(s, 2, 1) < =

"2" THEN

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

ASC(MID$(s, 2, 1)) - ASC("0")

ELSE

p = ASC(MID$(s, 1, 1)) - ASC("0")

ENDIF

pc(p) = pc(p) + 1

NEXT j

max = 0

FOR i = 1 TO 12

IF pc (i) > max THEN max = pc(i)

NEXT i

PRINT "Max = "; max

FOR i = 1 TO 12

IF pc(i) = max THEN PRINT i; " ";

NEXT i

END

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

Кри­те­рии оце­ни­ва­ния вы­пол­не­ния за­да­нияБаллы
Про­грам­ма ра­бо­та­ет для любых вход­ных дан­ных про­из­воль­но­го раз­ме­ра и на­хо­дит ответ, не со­хра­няя вход­ные дан­ные в мас­си­ве, раз­мер ко­то­ро­го со­от­вет­ству­ет числу N (ко­ли­че­ству за­про­сов). Про­грам­ма про­смат­ри­ва­ет вход­ные дан­ные один раз. До­пус­ка­ет­ся на­ли­чие в тек­сте про­грам­мы одной син­так­си­че­ской ошиб­ки: про­пу­щен или не­вер­но ука­зан знак пунк­ту­а­ции, не­вер­но на­пи­са­но или про­пу­ще­но за­ре­зер­ви­ро­ван­ное слово языка про­грам­ми­ро­ва­ния, не опи­са­на или не­вер­но опи­са­на пе­ре­мен­ная, при­ме­ня­ет­ся опе­ра­ция, не­до­пу­сти­мая для со­от­вет­ству­ю­ще­го типа дан­ных (если одна и та же ошиб­ка встре­ча­ет­ся не­сколь­ко раз, то это счи­та­ет­ся за одну ошиб­ку).4
Про­грам­ма ра­бо­та­ет верно, но вход­ные дан­ные за­по­ми­на­ют­ся в мас­си­ве, раз­мер ко­то­ро­го со­от­вет­ству­ет числу N. Этот мас­сив, воз­мож­но, потом сор­ти­ру­ет­ся. До­пус­ка­ет­ся на­ли­чие от одной до трех син­так­си­че­ских оши­бок. Воз­мож­но, в прин­ци­пи­аль­но верно ор­га­ни­зо­ван­ном вводе дан­ных есть одна ошиб­ка (на­при­мер, ис­поль­зо­ва­ние read вме­сто readln в Пас­ка­ле или не­вер­ное счи­ты­ва­ние стро­ки в C++). Три балла также вы­став­ля­ет­ся, если в эф­фек­тив­ной про­грам­ме, удо­вле­тво­ря­ю­щей кри­те­ри­ям вы­став­ле­ния 4 бал­лов, есть одна ошиб­ка, в ре­зуль­та­те ко­то­рой про­грам­ма ра­бо­та­ет не­вер­но на не­ко­то­рых на­бо­рах не­ти­пич­ных вход­ных дан­ных.3
Про­грам­ма ра­бо­та­ет в целом верно, эф­фек­тив­но или нет, но в ре­а­ли­за­ции ал­го­рит­ма со­дер­жит­ся до двух оши­бок (не­вер­ная ини­ци­а­ли­за­ция счётчи­ков, до­пу­ще­на ошиб­ка в прин­ци­пи­аль­но верно ор­га­ни­зо­ван­ной сор­ти­ров­ке или ал­го­рит­ме по­ис­ка ми­ни­маль­ных эле­мен­тов, ис­поль­зу­ет­ся знак “<” вме­сто “<=”, “or” вме­сто “and” и тому по­доб­ное).

Воз­мож­но, не­кор­рект­но ор­га­ни­зо­ва­но счи­ты­ва­ние вход­ных дан­ных. До­пус­ка­ет­ся на­ли­чие от одной до пяти син­так­си­че­ских оши­бок, опи­сан­ных выше

2
Про­грам­ма, воз­мож­но, не­вер­но ра­бо­та­ет при не­ко­то­рых вход­ных дан­ных, но по при­ведённому тек­сту ре­ше­ния ясно, что эк­за­ме­ну­е­мый по­ни­ма­ет, из каких эта­пов долж­но со­сто­ять ре­ше­ние за­да­чи. При ис­поль­зо­ва­нии сор­ти­ров­ки она может быть ре­а­ли­зо­ва­на прин­ци­пи­аль­но не­вер­но (на­при­мер, вме­сто двух цик­лов ис­поль­зу­ет­ся один), или до­пу­ще­на прин­ци­пи­аль­ная ошиб­ка в по­ис­ке нуж­ных эле­мен­тов. Всего до­пус­ка­ет­ся до 4 раз­лич­ных оши­бок в ре­а­ли­за­ции ал­го­рит­ма, в том числе опи­сан­ных в кри­те­ри­ях при­сво­е­ния двух бал­лов. До­пус­ка­ет­ся на­ли­чие от одной до семи син­так­си­че­ских оши­бок, опи­сан­ных выше.1
За­да­ние не вы­пол­не­но или вы­пол­не­но не­вер­но.0
Мак­си­маль­ный балл4