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