Массивы в Паскале
А теперь посмотрим, как можно на Паскале запрограммировать алгоритм вычисления среднегодовой температуры. 
Для этого сначала познакомимся с правилами описания массивов. Заметим, что в данном разделе учебника мы ограничиваемся только работой с одномерными массивами (линейными таблицами). 
Описание и обработка массива на Паскале
Общая форма описания одномерного массива на Паскале такая: 
var <имя массива>:  array  [<нижняя граница индекса ..   верхняя  граница  индекса>]   of <тип массива>  
Слово "array" буквально переводится как "массив". Границы индекса могут быть любыми целыми числами. Важно, чтобы нижняя граница была меньше верхней границы. Описание массива температур будет следующим:  
var  T:   array   [1..12]   of  real; 
Цикл с параметром на Паскале
Рассмотрим полный текст программы на Паскале. 
Program Temperature; 
var T: array[1..12] of real; 
I: integer;  Tsred: real; 
begin 
        {Цикл  ввода} 
     for  I:=l   to   12  do 
     begin 
          write ( 'T[ ',1:2, '] = ') ;  
          readln(T[I])  
     end; 
        {Цикл   суммирования}  
     Tsred:=0;  
     for  I:=l   to   12   do 
          Tsred:=Tsred+T[I] ;  
        {Вычисление   среднего}  
     Tsred:=Tsred/12; 
     writeln( 'Среднегодовая  температура  =   ', Tsred:6:2,    '   градусов')  
end.
 
В этой программе дважды использован оператор цикла с параметром. Он имеет следующий формат: 
for <параметр цикла> := <начальное значение параметра> to <конечное значение параметра> do <тело цикла>; 
Если параметр цикла - целая переменная, то ее значение будет возрастать через единицу. Существует другой вариант этого оператора, в котором вместо слова to записывается downto. В этом случае значение параметра цикла убывает через единицу. Следовательно, начальное значение в этом случае должно быть больше конечного. 
Так же как и для оператора цикла while, здесь тело цикла может быть либо простым оператором, либо составным. В первом случае тело цикла заканчивается на ближайшей точке с запятой. В нашем примере - это цикл суммирования. Во втором случае тело цикла заключается между словами begin и end (цикл ввода). 
Форматы вывода
В программе присутствует еще один новый для вас элемент Паскаля: формат вывода. Это числа с двоеточиями, стоящие после переменных в операторе вывода write: 
write( 'Т [',I:2,']='); 
В этой записи I:2 обозначает, что значение переменной I выводится как целое число в две символьные позиции на экране. Для однозначного числа в первой позиции будет помещен пробел, например: _5. 
В операторе вывода результата также используется формат: Tsred: 6:2. Значение переменной Tsred выводится как смешанное число в 6 позиций, две последние из которых занимает дробная часть. В третьей справа позиции - точка. Лишние позиции для целой части занимаются пробелами. Например:    _34.25. 
Результат выполнения программы Temperature будет выведен на экран в следующем виде: 
Среднегодовая температура =2.56 градусов 
Программа с двумя массивами
А теперь расширим условие задачи. Требуется для каждого месяца определить отклонение его средней температуры от среднегодовой величины. 
Вернемся к электронной таблице на рис. 3.13. Добавим к ней еще один столбец С, в котором будут вычисляться искомые отклонения. В ячейку С2 занесем формулу =В2-$В$14. По этой формуле вычислится отклонение январской температуры от среднегодовой. Скопировав эту формулу в ячейки СЗ:С13, получим все остальные величины. Смысл "замораживания" адреса В14 вам должен быть понятен. Результаты приведены в таблице на рис. 3.14. 
   |   | 
   A | 
   B | 
    | 
 
   | 1 | 
   Месяц | 
   Температура | 
   Отклонения | 
 
   | 2 | 
   1 | 
   -21 | 
   -23,56 | 
 
   | 3 | 
   2 | 
   -18 | 
   -20,56 | 
 
   | 4 | 
   3 | 
   -7,5 | 
   -10,06 | 
 
   | 5 | 
   4 | 
   5,6 | 
   3,04 | 
 
   | 6 | 
   5 | 
   10 | 
   7,44 | 
 
   | 7 | 
   6 | 
   18 | 
   15,44 | 
 
   | 8 | 
   7 | 
   22,2 | 
   19,64 | 
 
   | 9 | 
   8 | 
   24 | 
   21,44 | 
 
   | 10 | 
   9 | 
   17 | 
   14,44 | 
 
   | 11 | 
   10 | 
   5,4 | 
   2,84 | 
 
   | 12 | 
   11 | 
   -7 | 
   -9,56 | 
 
   | 13 | 
   12 | 
   -18 | 
   -20,56 | 
 
   | 14 | 
   Среднее: | 
   2,56 | 
     | 
 
 
  
Рис. 3.14. Температуры и отклонения от среднего 
Реализуем вычисление отклонений в программе на Паскале. Очевидно, в программе должен появиться еще один массив для размещения в нем таблицы отклонений. Дадим этому массиву имя Dt. Как и массив температур, он состоит из 12 чисел: Dt[l] , Dt[2] , Dt[3] , ..., Dt [12] . 
К предыдущей программе надо добавить описание массива Dt в следующем виде: 
var  Dt:   array[1..12]   of  real; 
Значение каждого элемента массива равно разности между температурой соответствующего месяца и среднегодовой температурой. Например, для января: Dt[l] = Т[1] - Tsred. Такие вычисления повторяются в цикле 12 раз. Значения массива Dt выводятся на экран. 
Запишем на Паскале фрагмент, который надо вставить в конец предыдущей программы, чтобы решить поставленную задачу. 
for   I:=l   to   12   do  
begin 
    Dt[I]:=  T[I]   -   Tsred;  
    writeln('Dt[',I:2,']=',   Dt[I]:б:2)  
end
 
Здесь вычисление значений массива Dt и вывод их на экран совмещены в одном цикле. Результат работы программы будет следующим: 
Dt[1]= -23,56  
Dt[2]= -20,56  
Dt[3]=   -10,06 
… 
Dt[12]=   -20,56 
Как и следовало ожидать, это те же самые числа, что получены в электронной таблице. 
Вопросы и задания 
1.	Как можно описать на Паскале массив, в котором будут храниться значения численности населения Москвы к концу каждого года XX века? 
2.	Вы приобрели котенка. Каждый вечер вы определяете его вес с помощью весов. Как можно описать на Паскале массив, в котором будут храниться значения веса котенка в течение месяца (например, мая)? 
3.	Напишите фрагмент программы на Паскале ввода исходных данных для массивов, определенных в заданиях 1 и 2. 
4.	Введите в компьютер программу Temperature, добавив к ней обработку массива Dt. Выполните программу, получите результаты. Сравните их с приведенными в параграфе. 
5.	Составьте программы на Паскале по алгоритмам из заданий 3, 4 предыдущего параграфа. Выполните эти программы на компьютере. 
  
       |