Форум » Обработка числовых последовательностей » [C4] Задача 1 » Ответить

[C4] Задача 1

firedigger: В данной задаче отклонение среднемесячной температуры от среднегодичной считается с использованием функции abs(). Это понятно, но почему в выводе информации о месяцах там, где надо написать отклонение, в ответах функция abs() не используется?

Ответов - 3

Поляков: firedigger пишет: почему в выводе информации о месяцах там, где надо написать отклонение, в ответах функция abs() не используется? Нужно вывести отклонение (а не его модуль), которое может быть и отрицательным.

Бибиков: Оцените, пожалуйста, мое решение(знаю, что очень много переменных, но не уверен, что это влияет на балл): program Bibba; var str,mes,znak,dot,pot,nol:string; year,min:real; position,mes2,dot2,pot2,i:integer; A,otkl: array[1..12] of real; B: array[1..12] of integer; begin min:=1000; for i:=1 to 366 do begin{считываем 366 строк} readln(str); pot:='0'; position:=0; delete(str,1,3);{удаляем из строки день} mes:=copy(str,1,2);{копируем месяц в отдельную переменную} znak:=copy(str,4,1);{копируем знак(плюс или минус) в отдельную переменную} position:=pos('.',str);{определяем позицию точки в дробной температуре} if position<>0 then begin dot:=copy(str,5,position-5);{если температура дробная, то разделяем целую часть и дробную} pot:=copy(str,position+1,1);{на две переменные} end else dot:=copy(str,5,2);{если температура целая, то копируем ее в одну перемнную} nol:=copy(mes,1,1); if nol='0' then{проверяем начинается ли месяц с нуля} delete(mes,1,1);{если начинается - удаляем ноль} mes2:=strtoint(mes); dot2:=strtoint(dot);{переводим все необходимые строковые переменные в целочисленные} pot2:=strtoint(pot); if znak='+' then A[mes2]:=A[mes2]+dot2+pot2/10{если знак плюсовой - выполняем сложение} else A[mes2]:=A[mes2]-dot2-pot2/10;{если же минусовой - вычитание} B[mes2]:=B[mes2]+1;{считаем количество} end; for i:=1 to 12 do begin A:=A/B;{находим среднемесячную температуру каждого месяца} year:=year+A;{находим сумму среднемесячных} end; year:=year/12;{находим среднегодовую} if year>0 then writeln('Среднегодовая температура: +',year:2:2, ' градусов'){выводим среднегодовую температуру} else writeln('Среднегодовая температура: ',year:2:2, ' градусов');{добавляем знак при необходимости} for i:=1 to 12 do begin otkl:=abs(A-year);{находим отклонение среднемесячной от среднегодовой по модулю} if otkl<min then min:=otkl;{находим минимальное отклонение} end; for i:=1 to 12 do begin if otkl=min then write('В ',i,' месяце было наименьшее отклонение среднемесячной темперетуры от среднегодовой и равнялось ',otkl:2:2,' градусам'); end;{выводим ответ на экран} end.

Бибиков: Еще здесь бесполезная проверка до точки и после, просто не знал тогда еще, что 0.1 это и сеть 0,1




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