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

В еже­не­дель­ном вы­пус­ке по­пу­ляр­ной га­зе­ты было объ­яв­ле­но го­ло­со­ва­ние по вы­бо­ру актёра, ко­то­рый, по мне­нию чи­та­те­лей, дол­жен снять­ся в про­дол­же­нии филь­ма «Белое солн­це пу­сты­ни». На выбор был пред­ло­жен спи­сок из шести ак­те­ров. Вам пред­ла­га­ет­ся на­пи­сать эф­фек­тив­ную, в том числе по ис­поль­зу­е­мой па­мя­ти, про­грам­му, ко­то­рая будет об­ра­ба­ты­вать ре­зуль­та­ты sms-го­ло­со­ва­ния по дан­но­му во­про­су. Ре­зуль­та­ты го­ло­со­ва­ния по­лу­че­ны в виде спис­ка актёров (каж­дый эле­мент спис­ка со­от­вет­ству­ет од­но­му sms-со­об­ще­нию). Сле­ду­ет учи­ты­вать, что ко­ли­че­ство го­ло­сов в спис­ке может быть очень ве­ли­ко. Перед тек­стом про­грам­мы крат­ко опи­ши­те ис­поль­зу­е­мый Вами ал­го­ритм ре­ше­ния за­да­чи. На вход про­грам­ме в пер­вой стро­ке подаётся ко­ли­че­ство при­шед­ших sms-со­об­ще­ний N. В каж­дой из по­сле­ду­ю­щих N строк за­пи­са­ны фа­ми­лия и имя ак­те­ра (сна­ча­ла фа­ми­лия, а потом через про­бел имя). Длина стро­ки не пре­вос­хо­дит 50 сим­во­лов. При­мер вход­ных дан­ных:

 

5

Мень­ши­ков Олег

Ми­ро­нов Ев­ге­ний

Мень­ши­ков Олег

Маш­ков Вла­ди­мир

Мень­ши­ков Олег

 

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

 

Мень­ши­ков Олег 3

Ми­ро­нов Ев­ге­ний 1

Маш­ков Вла­ди­мир 1

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

Ре­ше­ние.

Про­грам­ма чи­та­ет все вход­ные дан­ные один раз, не за­по­ми­ная их в мас­си­ве, раз­мер ко­то­ро­го равен N, а со­став­ляя толь­ко спи­сок встре­тив­ших­ся актёров и ко­ли­че­ства го­ло­сов, от­дан­ных за каж­до­го из них. Во время чте­ния дан­ных об оче­ред­ном актёре про­смат­ри­ва­ет­ся спи­сок ранее со­хранённых ак­те­ров. Если он уже есть в спис­ке, то ко­ли­че­ство го­ло­сов, от­дан­ных за него, уве­ли­чи­ва­ет­ся на 1, иначе актёр до­бав­ля­ет­ся в мас­сив упо­мя­ну­тых в го­ло­со­ва­нии актёров (при кор­рект­ных дан­ных раз­мер мас­си­ва не может быть боль­ше 6). После окон­ча­ния ввода про­из­во­дит­ся сор­ти­ров­ка мас­си­вов актёров и ко­ли­че­ства го­ло­сов, от­дан­ных за них, в по­ряд­ке убы­ва­ния ко­ли­че­ства го­ло­сов; затем вы­во­дит­ся спи­сок актёров с ука­за­ни­ем ча­сто­ты встре­ча­е­мо­сти. Баллы на­чис­ля­ют­ся толь­ко за про­грам­му, ко­то­рая ре­ша­ет за­да­чу хотя бы для од­но­го част­но­го слу­чая. Ниже при­ве­де­ны при­ме­ры ре­ше­ния за­да­ния на язы­ках Пас­каль и Бей­сик. До­пус­ка­ют­ся ре­ше­ния, за­пи­сан­ные на дру­гих язы­ках про­грам­ми­ро­ва­ния. При оце­ни­ва­нии ре­ше­ний на дру­гих язы­ках про­грам­ми­ро­ва­ния не­об­хо­ди­мо учи­ты­вать осо­бен­но­сти этих язы­ков про­грам­ми­ро­ва­ния. Так, на языке C++ при счи­ты­ва­нии стро­ко­вой пе­ре­мен­ной будут счи­та­ны не фа­ми­лия и имя, а толь­ко фа­ми­лия, по­это­му сле­ду­ет ис­поль­зо­вать функ­цию getline(cin,s); ана­ло­гич­ная про­бле­ма воз­ни­ка­ет и в языке Си.

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

Var n, Num, i, j, t: integer;

Count: array[1..6] of integer;

s: string;

Names: array[1..6] of string;

Begin

Num:=0; {Число раз­лич­ных ак­те­ров в спис­ке го­ло­сов}

ReadLn(N); {Счи­ты­ва­ем ко­ли­че­ство го­ло­сов}

for i:=1 to N do

begin

ReadLn(S); {счи­та­ли оче­ред­но­го ак­те­ра}

{Осу­ществ­ля­ем его поиск в спис­ке уже встре­тив­ших­ся}

j:=1;

while (j<=Num) and (s<>Names[j]) do j:=j+1;

{Если он най­ден}

if j<=Num then {Уве­ли­чи­ва­ем счет­чик числа го­ло­сов, от­дан­ных за этого ак­те­ра}

Count[j]:=Count[j]+1

else begin {Иначе до­бав­ля­ем ак­те­ра в конец спис­ка}

Names[j]:=s;

Count[j]:=1;

Num:=Num+1;

end

end;

{Сор­ти­ру­ем мас­си­вы Names и Count в по­ряд­ке убы­ва­ния зна­че­ний мас­си­ва Count}

for i:=Num downto 2 do

for j:=2 to i do if Count[j-1] < Count[j] then

begin

t:=Count[j]; Count[j]:=Count[j-1]; Count[j-1]:=t;

s:=Names[j]; Names[j]:=Names[j-1]; Names[j-1]:=s;

end;

for i:=1 to Num do

WriteLn(Names[i], ' ', Count[i]);

end.

DIM N, Num, i, j, t AS INTEGER

DIM Count(6) AS INTEGER

DIM Names$(6)

Num = 0 'Число раз­лич­ных ак­те­ров в спис­ке го­ло­сов

INPUT N 'Счи­ты­ва­ем ко­ли­че­ство го­ло­сов

FOR i = 1 TO N

LINE INPUT s$ 'счи­та­ли ак­те­ра

'Осу­ществ­ля­ем поиск на­зва­ния в спис­ке уже встре­тив­ших­ся

j = 1

WHILE (j <= Num) AND (s$ <> Names$(j))

j = j + 1

WEND

'Если актер най­ден

IF j <= Num THEN 'Уве­ли­чи­ва­ем счет­чик числа го­ло­сов, от­дан­ных за

'этого ак­те­ра

Count(j) = Count(j) + 1

ELSE ' Иначе до­бав­ля­ем ак­те­ра в конец спис­ка

Names$(j) = s$

Count(j) = 1

Num = Num + 1

END IF

NEXT i

'Сор­ти­ру­ем мас­си­вы Names и Count в по­ряд­ке убы­ва­ния зна­че­ний

'мас­си­ва Count

FOR i = Num TO 2 STEP -1

FOR j = 2 TO i

IF Count(j - 1) < Count(j) THEN

t = Count(j): Count(j) = Count(j - 1): Count(j - 1) = t

s$ = Names$(j): Names$(j) = Names$(j - 1): Names$(j - 1) = s$

END IF

NEXT j

NEXT i

FOR i = 1 TO Num

PRINT Names$(i), Count(i)

NEXT i

END

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

Кри­те­рии оце­ни­ва­ния вы­пол­не­ния за­да­нияБаллы
Про­грам­ма ра­бо­та­ет для любых вход­ных дан­ных про­из­воль­но­го раз­ме­ра и на­хо­дит ответ, не со­хра­няя вход­ные дан­ные в мас­си­ве, раз­мер ко­то­ро­го со­от­вет­ству­ет числу N (ко­ли­че­ству за­про­сов), а под­счи­ты­вая в мас­си­ве раз­ме­ром 12, сколь­ко раз встре­ти­лась та или иная за­да­ча. До­пус­ка­ет­ся на­ли­чие в тек­сте про­грам­мы трёх син­так­си­че­ских оши­бок: про­пу­щен или не­вер­но ука­зан знак пунк­ту­а­ции; не­вер­но на­пи­са­но или про­пу­ще­но за­ре­зер­ви­ро­ван­ное слово языка про­грам­ми­ро­ва­ния; не опи­са­на или не­вер­но опи­са­на пе­ре­мен­ная; при­ме­ня­ет­ся опе­ра­ция, не­до­пу­сти­мая для со­от­вет­ству­ю­ще­го типа дан­ных (если одна и та же ошиб­ка встре­ча­ет­ся не­сколь­ко раз, то это счи­та­ет­ся за одну ошиб­ку) 4
Про­грам­ма ра­бо­та­ет верно, но вход­ные дан­ные со­хра­ня­ют­ся в мас­си­ве, раз­мер ко­то­ро­го со­от­вет­ству­ет числу N. Этот мас­сив, воз­мож­но, потом сор­ти­ру­ет­ся. Или для уве­ли­че­ния числа встре­ча­е­мо­сти оче­ред­ной пары ис­поль­зу­ет­ся цикл от 1 до 16, или опе­ра­тор case, или 16 опе­ра­то­ров if. До­пус­ка­ет­ся на­ли­чие до пяти син­так­си­че­ских оши­бок, опи­сан­ных выше. Воз­мож­но, в прин­ци­пи­аль­но верно ор­га­ни­зо­ван­ном вводе дан­ных есть одна ошиб­ка. 3 балла также вы­став­ля­ет­ся, если в эф­фек­тив­ной про­грам­ме, удо­вле­тво­ря­ю­щей кри­те­ри­ям вы­став­ле­ния 4 бал­лов, есть одна ошиб­ка, в ре­зуль­та­те ко­то­рой про­грам­ма ра­бо­та­ет не­вер­но на не­ко­то­рых на­бо­рах не­ти­пич­ных вход­ных дан­ных (на­при­мер, все по­да­ли го­ло­са за одну и ту же пару). Также 3 балла вы­став­ля­ет­ся, если про­грам­ма вы­во­дит на экран все пары с вер­ным ко­ли­че­ством по­дан­ных за них го­ло­сов, но среди них есть и те, за кого не было по­да­но ни од­но­го го­ло­са 3
Про­грам­ма ра­бо­та­ет в целом верно, эф­фек­тив­но или нет, но в ре­а­ли­за­ции ал­го­рит­ма со­дер­жит­ся до двух оши­бок (не­вер­ная ини­ци­а­ли­за­ция счет­чи­ков, хотя в пред­ло­жен­ных выше ре­ше­ни­ях об­ну­лять их не тре­бу­ет­ся; воз­мож­но, про­грам­ма ра­бо­та­ет не­вер­но, если в спис­ке упо­мя­ну­то мень­ше 6 актёров, выход за гра­ни­цу мас­си­ва, до­пу­ще­на ошиб­ка в прин­ци­пи­аль­но верно ор­га­ни­зо­ван­ной сор­ти­ров­ке, ис­поль­зу­ет­ся знак “<” вме­сто “<=”, “or” вме­сто “and” и т.п.). Воз­мож­но, не­кор­рект­но ор­га­ни­зо­ва­но счи­ты­ва­ние вход­ных дан­ных. До­пус­ка­ет­ся на­ли­чие до семи син­так­си­че­ских оши­бок, опи­сан­ных выше2
Про­грам­ма, воз­мож­но, ра­бо­та­ет не­вер­но при не­ко­то­рых вход­ных дан­ных, но по при­ведённому тек­сту ре­ше­ния ясно, что эк­за­ме­ну­е­мый по­ни­ма­ет, из каких эта­пов долж­но со­сто­ять ре­ше­ние за­да­чи. При ис­поль­зо­ва­нии сор­ти­ров­ки она может быть ре­а­ли­зо­ва­на прин­ци­пи­аль­но не­вер­но (на­при­мер, вме­сто двух цик­лов ис­поль­зу­ет­ся один). Всего до­пус­ка­ет­ся до четырёх раз­лич­ных оши­бок в ре­а­ли­за­ции ал­го­рит­ма, в том числе опи­сан­ных в кри­те­ри­ях при­сво­е­ния 2 бал­лов. До­пус­ка­ет­ся на­ли­чие лю­бо­го ко­ли­че­ства син­так­си­че­ских оши­бок, опи­сан­ных выше1
За­да­ние не вы­пол­не­но или вы­пол­не­но не­вер­но0
Мак­си­маль­ный балл4
Источник: ЕГЭ по ин­фор­ма­ти­ке 08.07.2013. Вто­рая волна. Ва­ри­ант 603