Лабораторная работа № 6П Массивы в ТурбоПаскале. Задание к лабораторной работе № 6П 1. Составить и отладить программу для вычисления среднегодовой температуры и ежемесячных отклонений от этого значения для заданного в табл. 1 массива среднемесячных температур Т[1…12]. Месяц года Температура, С 1 2 3 4 5 6 7 8 9 10 Таблица 1. 11 12 -21 -18 -7,5 5,6 10 18 22,2 24 17 5,4 -7 -18 2. Составить и отладить программу для выбора максимального элемента из рассмотренного ранее массива температур, т.е. отбора самой высокой температуры и номера месяца, соответствующего ей. Краткие теоретические сведения Множество значений, содержащихся в таблице, обозначается следующим образом: {Ti }, i 1, ..., 12. Порядковые номера элементов (1, 12, i и др.) называются индексами. Индексированные величины удобнее использовать при записи их для математической обработки. Например, для вычисления среднегодовой температуры используется следующая формула: Tср 1 12 Ti . 12 i 1 В Паскале аналогом таблиц является структурированный тип данных, который называется регулярным типом, или массивом. Как и таблица, массив представляет собой совокупность пронумерованных однотипных значений, имеющих общее имя. Элементы массива обозначаются как переменные с индексами. Индексы записываются в квадратных скобках после имени массива. Например: Т[1], Т[5], Т[i]. Массив, хранящий линейную таблицу, называется одномерным, а прямоугольную — двухмерным. В программах могут использоваться массивы и большей размерности. Описание массивов. Переменная регулярного типа описывается в разделе описания переменных в следующей форме: Var <идентификатор> : Array [<тип индекса>] Of <тип компонент> Чаще всего в качестве типа индекса употребляется интервальный тип. Например, указанный в задании одномерный массив среднемесячных температур можно описать следующим образом: 1 Лаб. 6П Var Т : Array [1..12] Of Real; Объем памяти, выделяемый под массивы, в ТурбоПаскале составляет 64 Кбайт. По аналогии с математикой одномерные числовые массивы часто называют векторами, а двухмерные — матрицами. В Паскале не допускается употребление динамических массивов, т.е. массивов, размер которых определяется в процессе выполнения программы. Изменение размеров массива происходит через изменение в тексте программы и повторную компиляцию. Для упрощения таких изменений индексные параметры определяют в разделе констант: Const Imax = 10; Jmax = 20; Var Mas : Array[1..Imax, l..Jmax] Of Integer; В этом случае для изменения размеров массива Mas и всех операторов программы, связанных с этими размерами, достаточно отредактировать только одну строку в программе — раздел констант. Обработка массивов в программах производится поэлементно. Например, ввод значений элементов массива может производиться в цикле следующим образом: в одномерный массив For I : = 1 То 1 2 Do ReadLn(Т[I]); в двумерный массив For I := 1 To IMax Do For J := 1 To JMax Do ReadLn(Mas[I, J]); Здесь каждое следующее значение будет вводиться с новой строки. Для построчного ввода вместо оператора ReadLn используется оператор Read. Аналогично в цикле по индексной переменной организуется вывод значений массива. Например: For I := 1 То 12 Do Write(T[I] : 8 : 4 ) ; Рассмотрим задачу выбора максимального элемента из рассмотренного ранее массива температур, т.е. отбора самой высокой температуры и номера месяца, соответствующего ей. Идея алгоритма решения этой задачи следующая: чтобы получить максимальную температуру в вещественной переменной ТМах, сначала в нее заносится первое значение массива Т[1]. Затем поочередно значение ТМах сравнивается с остальными элементами массива температур, и каждое значение, большее ТМах, присваивается этой переменной. Для получения номера самого теплого месяца в целую переменную NumMax следует засылать номер элемента массива температур каждый раз одновременно с занесением в ТМах его значения. 2 Лаб. 6П Программа решения такой задачи следующая: TMax := T[1]; NumMax := 1; For I := 2 To 12 Do If T[I] > Tmax Then Begin TMax := T[I]; NumMax := I End; Порядок выполнения задания к лабораторной работе № 6П 1. На основании теоретических сведений составьте и отладьте программу в соответствии с п. 1 задания к лабораторной работе № 6П. 2. После составления и отладки своей программы для проверки правильности сравните ее с одним из возможных вариантов программы, приведенным ниже. Program Example_1; Const N = 12; Type Vec = Array [1..N] Of Real; Var T, Dt : Vec; St : Real; I : Integer; Begin { ---Ввод исходных данных---} WriteLn('Введите таблицу температур'); For I := 1 То N Do Begin Write(I : 2,':'); ReadLn(T[I]) End; {---Вычисление средней температуры---} St:=0; For I:=1 To N Do St:=St+T[I]; 3 Лаб. 6П St:=St/N; {---Вычисление таблицы отклонений от среднего---} For I:=1 То N Do Dt[I]:=St—T[I]; {---Вывод результатов---} WriteLn('Средняя температура равна ', St:6:2); WriteLn; WriteLn('Отклонения от средней температуры:'); For I := 1 То N Do WriteLn(I:1,':',Dt[I]:6:2) End. По такой программе можно рассчитать среднее значение и вектор отклонений от среднего значения для любого одномерного вещественного массива. Настройка размера массива осуществляется только редактированием раздела констант. 3. Составьте и отладьте программу в соответствии с п. 2 задания к лабораторной работе № 6П. При составлении программы используйте фрагмент программы, приведенный в разделе «Краткие теоретические сведения». 4. Предъявите обе программы преподавателю, выполните индивидуальное задание и ответьте на контрольные вопросы по теме лабораторной работы. 4 Лаб. 6П