Массивы в Паскале
А теперь посмотрим, как можно на Паскале запрограммировать алгоритм вычисления среднегодовой температуры.
Для этого сначала познакомимся с правилами описания массивов. Заметим, что в данном разделе учебника мы ограничиваемся только работой с одномерными массивами (линейными таблицами).
Описание и обработка массива на Паскале
Общая форма описания одномерного массива на Паскале такая:
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 предыдущего параграфа. Выполните эти программы на компьютере.