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

На вход про­грам­ме по­да­ют­ся 365 строк, ко­то­рые со­дер­жат ин­фор­ма­цию о сред­не­су­точ­ной тем­пе­ра­ту­ре всех дней 2007 года. Фор­мат каж­дой из строк сле­ду­ю­щий: сна­ча­ла за­пи­са­на дата в виде dd.mm (на за­пись но­ме­ра дня и но­ме­ра ме­ся­ца в чис­ло­вом фор­ма­те от­во­дит­ся стро­го два сим­во­ла, день от ме­ся­ца от­де­лен точ­кой), затем через про­бел (для Бей­си­ка  — через за­пя­тую) за­пи­са­но зна­че­ние тем­пе­ра­ту­ры  — число со зна­ком плюс или минус, с точ­но­стью до 1 цифры после де­ся­тич­ной точки. Дан­ная ин­фор­ма­ция от­сор­ти­ро­ва­на по зна­че­нию тем­пе­ра­ту­ры, т. е. хро­но­ло­ги­че­ский по­ря­док на­ру­шен. Тре­бу­ет­ся на­пи­сать эф­фек­тив­ную про­грам­му на языке Пас­каль или Бей­сик, ко­то­рая будет вы­во­дить на экран ин­фор­ма­цию о ме­ся­цах с мак­си­маль­ной сред­не­ме­сяч­ной тем­пе­ра­ту­рой. Най­ден­ные мак­си­маль­ные зна­че­ния сле­ду­ет вы­во­дить в от­дель­ной стро­ке для каж­до­го ме­ся­ца в виде: номер ме­ся­ца, зна­че­ние сред­не­ме­сяч­ной тем­пе­ра­ту­ры, округ­лен­ное до одной цифры после де­ся­тич­ной точки.

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

Ре­ше­ние.

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

 

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

 

const d:array[1..12] of integer =

(31,28,31,30,31,30,31,31,30,31,30,31);

var m:array[1..12] of real;

max, t:real;

i,j:integer;

cl,c2:char;

begin

for j:=1 to 12 do

m[j ] : =0;

for i:=l to 365 do

begin

readln(cl,cl,cl,cl,c2,t);

j:= (ord(cl)-ord('0') ) *10 +

ord(c2)-ord('01);

m [ j] :=m[j]+t

end;

max:=m[1]/d[1];

for j:=2 to 12 do

if m[j]/d[j] > max then

max:=m[j]/d[j];

for j:=1 to 12 do

if abs(m[j]/d[j]-max) < 0.0001

then writeln(j,1 ',m[j]/d[jj:0:1)

end.

 

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

 

DATA 31,28,31,30,31,30,31,31,30,31,30,31

DIM i, j, d (12) AS INTEGER

DIM m(12)

DIM dat AS STRING * 5

FOR i = 1 TO 12

m (i) = 0

READ d(i)

NEXT i

FOR i = 1 TO 3 65

INPUT dat, t

j = (ASC(MID$(dat, 4, 1)) - ASC("0")> * 10 +

ASC (MID5 (dat, 5, 1)) -ASCCO")

m(j) = m (j ) + t

NEXT i

max = m(l) / d(1)

FOR j = 2 TO 12

IF m(j ) / d(j) > max THEN max = m(j) / d(j)

NEXT j

FOR j = 1 TO 12 IF ABS(m(j) / d(j) - max) < .0001 THEN

PRINT j; " " ;

PRINT USING "##.#"; m(j) / d(j)

ENDIF

NEXT j

END

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

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

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

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