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

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

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

Ре­ше­ние.

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

 

Бей­сикПас­каль

DATA 31,29,31,30,31,30,31,31,30,31,30,31

DIM i, m, d(12) AS INTEGER

DIM tm(12)

DIM dat AS STRING *5

FOR i = 1 TO 12

tm(i) = 0

READ d(i)

NEXTi

ty = 0

'ty – сред­не­го­до­вая тем­пе­ра­ту­ра

FOR i = 1 TO 366

INPUT dat, t

'Вы­чис­ля­ем номер ме­ся­ца

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

ASC(MID$(dat,5,1))-ASC("0")

tm(m) = tm(m) + t

ty = ty + t

NEXT i

FOR i = 1 TO 12

tm(i) = tm(i) / d(i)

NEXT i

ty = ty / 366

min = 100

FOR i = 1 TO 12

IF ABS(tm(i) - ty) < min THEN min = ABS(tm(i) - ty)

NEXT i

PRINT "Сред­не­го­до­вая тем­пе­ра­ту­ра = ";

PRINT USING "##.##"; ty

FOR i = 1 TO 12

IF ABS(ABS(tm(i) - ty) - min) < .0001 THEN

PRINT i;

PRINT USING "##.## "; tm(i); ABS(tm(i) - ty)

END IF

NEXT i

END

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

(31,29,31,30,31,30,31,31,30,31,30,31);

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

m:1..12;

data:string[5];

min,ty,t:real;

i:integer;

begin

for i:=1 to 12 do

tm[i]:=0;

ty:=0;{сред­не­го­до­вая тем­пе­ра­ту­ра}

for i:=1 to 366 do

begin

readln(data,t);

{вы­чис­ля­ем номер ме­ся­ца}

m:=(ord(data[4])-ord('0'))*10

+ord(data[5])-ord('0');

tm[m]:=tm[m]+t;

ty:=ty+t;

end;

for i:=1 to 12 do

tm[i]:=tm[i]/d[i];

ty:=ty/366;

min:=100;

for i:=1 to 12 do

if abs(tm[i]-ty) < min then

min:=abs(tm[i]-ty);

writeln('Сред­не­го­до­вая тем­пе­ра­ту­ра = ',ty:0:2);

for i:=1 to 12 do

if abs(abs(tm[i]-ty)-min)<0.0001 then

writeln(i,' ',tm[i]:0:2,' ',abs(tm[i]-ty):0:2);

readln

end.

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

Ука­за­ния по оце­ни­ва­нию.

 

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

 

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