Доброго времени дня. Если допустить, что в моем решении нет ошибок, то от описанного в документе answ27 оно отличается только методом чтения и обработки чисел и наличием массива из 12 целых (ему можно противопоставить массив из констант в решении из документа). есть ли разница в эффективности между этими программами?
задача 1) На вход программы подается 366 строк, которые содержат информацию о среднесуточной
температуре всех дней 2008 года. Формат каждой из строк следующий: сначала записана дата в
виде dd.mm (на запись номера дня и номера месяца в числовом формате отводится строго два
символа, день от месяца отделен точкой), затем через пробел записано значение температуры —
число со знаком плюс или минус, с точностью до 1 цифры после десятичной точки. Данная
информация отсортирована по значению температуры, то есть хронологический порядок
нарушен. Требуется написать программу на языке Паскаль или Бейсик, которая будет выводить на
экран информацию о месяце (месяцах), среднемесячная температура у которого (которых)
наименее отклоняется от среднегодовой. В первой строке вывести среднегодовую температуру.
Найденные значения для каждого из месяцев следует выводить в отдельной строке в виде: номер
месяца, значение среднемесячной температуры, отклонение от среднегодовой температуры.
решение из документа все квадратные скобки заменю на фигурные ибо иного обхода тэгов не знаю
const DAYS = 366;
var tMonth: array[1..12] of real;
i, month: integer;
t, tYear, min: real;
c: char;
begin
for i:=1 to 12 do tMonth{i}:= 0;
tYear := 0;
for i:=1 to DAYS do begin
repeat read(c); until c = '.';
read (month);
readln (t);
tMonth[month] := tMonth[month] + t;
tYear := tYear + t;
end;
for i:=1 to 12 do
case i of
2: tMonth{i} := tMonth{i} / 29;
4,6,9,11: tMonth{i} := tMonth{i} / 30;
else tMonth{i} := tMonth{i} / 31;
end;
tYear := tYear / DAYS;
min := abs(tMonth[1] - tYear);
for i:=2 to 12 do
if abs(tMonth{i} - tYear) < min then
min := abs(tMonth{i} - tYear);
writeln(tYear:0:2);
for i:=1 to 12 do
if abs(tMonth{i} - tYear) = min then
writeln(i,' ',tMonth{i}:0:2,' ',tMonth{i}-tYear:0:2);
end.
моё
const
M = 12;
DAYS = 366;
var
a: array [1..M] of real; {массив для среднемесячных температур}
c: array [1..M] of integer; {количество дней в каждом месяце}
i, k: integer;
x, t, all, min: real;
Begin
for i := 1 to M do
begin
a{i} := 0;
c{i} := 0;
end;
all := 0; min := 100;
for k := 1 to DAYS do
begin
readln(x, t);
i := (round(x * 100)) mod 100;
a{i} := a{i} + t;
c{i} := c{i} + 1;
all := all + t;
end;
all := all / 366;
for i := 1 to M do begin
a{i} := a{i} / c{i};
if abs(all - a{i}) < min then
min := abs(all - a{i});
end;
writeln(all);
for i := 1 to M do
if abs(all - a{i}) = min then
writeln(i, ' ', a{i}, ' ', min);
end.