Форум » Символьные строки и последовательности » есть ли разница в эффективности? » Ответить

есть ли разница в эффективности?

pascal_oleg: Доброго времени дня. Если допустить, что в моем решении нет ошибок, то от описанного в документе answ27 оно отличается только методом чтения и обработки чисел и наличием массива из 12 целых (ему можно противопоставить массив из констант в решении из документа). есть ли разница в эффективности между этими программами? задача 1) На вход программы подается 366 строк, которые содержат информацию о среднесуточной температуре всех дней 2008 года. Формат каждой из строк следующий: сначала записана дата в виде dd.mm (на запись номера дня и номера месяца в числовом формате отводится строго два символа, день от месяца отделен точкой), затем через пробел записано значение температуры — число со знаком плюс или минус, с точностью до 1 цифры после десятичной точки. Данная информация отсортирована по значению температуры, то есть хронологический порядок нарушен. Требуется написать программу на языке Паскаль или Бейсик, которая будет выводить на экран информацию о месяце (месяцах), среднемесячная температура у которого (которых) наименее отклоняется от среднегодовой. В первой строке вывести среднегодовую температуру. Найденные значения для каждого из месяцев следует выводить в отдельной строке в виде: номер месяца, значение среднемесячной температуры, отклонение от среднегодовой температуры. решение из документа все квадратные скобки заменю на фигурные ибо иного обхода тэгов не знаю [pre2]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.[/pre2] моё [pre2] 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. [/pre2]

Ответов - 2

Поляков: pascal_oleg пишет: есть ли разница в эффективности между этими программами? Существенной разницы в эффективности нет.

pascal_oleg: спасибо



полная версия страницы