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

На вход про­грам­ме по­да­ют­ся строч­ные ан­глий­ские буквы. Ввод этих сим­во­лов за­кан­чи­ва­ет­ся точ­кой (дру­гие сим­во­лы, от­лич­ные от «.» и букв «а»..«z», во вход­ных дан­ных от­сут­ству­ют; в про­грам­ме на языке Бей­сик сим­во­лы можно вво­дить по од­но­му в стро­ке, пока не будет вве­де­на точка). Тре­бу­ет­ся на­пи­сать как можно более эф­фек­тив­ную про­грам­му (ука­жи­те ис­поль­зу­е­мую вер­сию языка про­грам­ми­ро­ва­ния, на­при­мер, Borland Pascal 7.0), ко­то­рая будет пе­ча­тать буквы, встре­ча­ю­щи­е­ся во вход­ной по­сле­до­ва­тель­но­сти, в по­ряд­ке уве­ли­че­ния ча­сто­ты их встре­ча­е­мо­сти. Каж­дая буква долж­на быть рас­пе­ча­та­на один раз. Точка при этом не учи­ты­ва­ет­ся. Если какие-то буквы встре­ча­ют­ся оди­на­ко­вое число раз, то они вы­во­дят­ся в ал­фа­вит­ном по­ряд­ке.

На­при­мер, пусть на вход по­да­ют­ся сле­ду­ю­щие сим­во­лы:

baobaba.

В дан­ном слу­чае про­грам­ма долж­на вы­ве­сти

oab

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

Ре­ше­ние.

Про­грам­ма чи­та­ет все вход­ные сим­во­лы до точки один раз, под­счи­ты­вая в мас­си­ве, хра­ня­щем 26 целых чисел, ко­ли­че­ство каж­дой из букв.

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

Баллы на­чис­ля­ют­ся толь­ко за про­грам­му, ко­то­рая ре­ша­ет за­да­чу хотя бы для од­но­го част­но­го слу­чая (на­при­мер, для строк, со­сто­я­щих не более чем из 255 сим­во­лов).

 

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

var а:array[0..25] of integer;

m:array[0..25] of 'a'..'z';

с: char;

i, j, k: integer;

begin

for i:=0 to 25 do

begin

a[i]: =0;

m[i] :=chr(ord(' a ')+i)

end;

read(c);

while c<> ' . ' do

begin

a[ord(c)-ord('a')] := a[ord(c)-ord('a')] + 1;

read(c);

end;

for i:=1 to 25 do

for j := 0 to 24 do

if a[j1 > a[j +1] then

begin

k:=а[j]; с:=m[j];

а[j]:=а[j+1]; m[j]:=m[j+1];

a[j + 1] :=k; m[j+1] :=c

end;

i : =0;

while a[i]=0 do i:=i+1;

for j:=i to 25 do

write(m[j]);

writeln

end.

 

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

DIM i, j, k, а (26) AS INTEGER

DIM s (26) AS STRING * 1

FOR i = 1 TO 26

a (i) = 0

s(i) = CHR$(ASC("a") + i - 1)

NEXT i

INPUT c$

DO WHILE NOT (c$ = ".")

a(ASC (c$) - ASC("a") + 1) =

= a(ASC(c$) - ASC("a") + 1) + 1

INPUT c$

LOOP

FOR j = 1 TO 25

FOR i = 1 TO 25

IF a(i) > a(i + 1) THEN

k = a (i)

c$ = s(i)

a (i) = a (i + 1)

s(i) = s (i + 1)

a (i + 1) = k

s(i + 1) = c$

ENDIF

NEXT i

NEXT j i = 1

DO WHILE a(i) =0

i = i + 1 LOOP

FOR j = i TO 26

PRINT s(j ) ;

NEXT j

END

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

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

До­пус­ка­ет­ся на­ли­чие одной син­так­си­че­ской ошиб­ки.

4
Про­грам­ма со­став­ле­на верно, но со­дер­жит не­ра­ци­о­наль­но­сти: вход­ные дан­ные за­по­ми­на­ют­ся в мас­си­ве сим­во­лов или стро­ке или вход­ной поток про­смат­ри­ва­ет­ся не­сколь­ко раз, про­грам­ма может со­дер­жать вло­жен­ные циклы. До­пус­ка­ет­ся на­ли­чие не более трех син­так­си­че­ских оши­бок.3
Про­грам­ма со­став­ле­на в целом верно с вло­жен­ны­ми цик­ла­ми или без, или об­ра­ба­ты­ва­ет каж­дую букву явным об­ра­зом (26 или 52 опе­ра­то­ра IF или опе­ра­тор CASE, со­дер­жа­щий 26 или 52 ва­ри­ан­тов), но, воз­мож­но, вы­во­дит зна­че­ние не пер­вой по ал­фа­ви­ту из ис­ко­мых букв. Воз­мож­но в ре­а­ли­за­ции ал­го­рит­ма со­дер­жат­ся 1–2 ошиб­ки (ис­поль­зу­ет­ся знак «<»

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

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

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

1
За­да­ние не вы­пол­не­но или вы­пол­не­но не­вер­но0
Мак­си­маль­ный балл4