Одномерные и многомерные массивы
Все переменные делятся на простые и индексированные. Простые записываются своими идентификаторами (именами) и могут быть различных типов (integer, real,…), напр, PI, Xmin, DELTA, omega и др. Индексированные переменные являются элементами массива, который состоит из набора данных одного типа Массив элементов имеет общий идентификатор-имя, а каждый его элемент определяется по индексу имени, например, V[i] – i-тый элемент массива с именем V. Массив объединяет фиксированное количество элементов одного типа данных. Более формально массив можно определить как последовательную упорядоченную совокупность элементов некоторого типа, которые адресуются с помощью некоторого индекса (номера элемента в массиве). Наряду с термином «массив» часто используются термины «матрица», «таблица», «вектор». Поскольку все элементы массива должны быть одного типа, определение типа массива имеет следующий вид: type где Tarr – имя массива., array,of – служебные слова, Т1 – означает тип индекса массива, Т2 – тип элементов массива. В качестве типа индекса может быть использованы все порядковые типы, за исключением длинного целого (longint) и поддиапазонов длинного целого. Массивы могут быть одномерными и многомерными, например, X[I], A[I,J], D[I,J,K] и др. Число индексов в определении (то есть размерность массива) не ограничивается. Элемент массива также может быть массивом, тогда количество ячеек памяти, отводимое под массив программой, равно общему количеству элементов в массиве. Если тип элемента в типе массив также является массивом, то результат можно рассматривать как массив массивов или как один многомерный массив.
Например, array[1..5] of array[1..10] of Real интерпретируется компилятором точно так же, как массив: array[1..5,1..10] of Real. Таким образом, допускается запись типов индексов, разделенных запятыми, в одних скобках..
Примеры описания массивов: Тип массива (его элементов) должен быть описан до объявления самого массива (его имени): type V1 = array[1..100] of real; V2 = array[char] of boolean; M1 = array[1..10] of array [1..15] of integer; Var Vector: V1; Symb_Table: V2; Matrix1, Matrix2: M1; Однако допускается объявление массива непосредственно в разделе описания переменных: var B: array[1..5] of byte; S: array[(Red, Yellow, Green)] of Boolean; M: array[1..5,1..7] of integer; Иногда требуется задать массив с помощью типизированной константы. Пример: const Marks: array[1..4] of integer = (2,3,4,5); Tmatr: array[1..2,1..3] of byte = ((3,1,5),(7,2,4)); Pascal допускает единственное возможное действие над массивом в целом: использование его в операторе присваивания, например Vect1:=Vect2 причем типы обоих массивов в данном случае должны быть эквивалентны. Доступ к элементам массива строится традиционно: после идентификатора массива в квадратных скобках указывается индекс нужного элемента или список индексов, определяющий элемент многомерного массива. В качестве индексов могут выступать произвольные выражения, тип которых должен соответствовать типу индексов в описании массива.
Примеры: Vector[1] Vector[(i+1)*2] M[i,j] M[3][1] M[3,1] Элемент массива считается переменной; он может получать значения (например, в операторе присваивания), а также участвовать в выражениях. Примеры: M[i,j]:=M[i,j-1]*2 Symb_Table[‘a’]:=true; Vector[i]:=M[i,1] mod 2;
Обработка массивов Задача 2.1 Найти сумму элементов массива const N = 5; var A: array[1..N] of Integer; I, Sum: Integer; begin {ввод элементов} for I:=1 to N do begin Write(‘Введите ’,I,’-й элемент массива: ’); ReadLn(A[I]); end; Sum:=0; for I:=1 to N do Sum:=Sum+A[I]; Writeln(‘Сумма равна ’,Sum); end. В программе определяется константа N=5 – наибольший индекс (номер) элемента в массиве А, затем задаётся тип (целый) для массива А размерностью от 1 до N, номера элемента I, и суммы Sum. В основном блоке с помощью оператора for перебираются и вводятся все элементы (оператором read), затем задаётся начальное значение суммы Sum:=0, затем в цикле for от 1 до N все элементы массива прибавляются к начальной сумме Sum:=Sum +A[I]. После вывода суммы на экран программа завершается.
Задача 2.2 Вывести номера строк матрицы А, которые содержат нулевой элемент и произведение элементов 4-го столбца, больших 2.. Const P:=1 var A: array[1..5,1..7] of Byte; I, J: Byte; begin {инициализация генератора случайных чисел} Randomize; {заполнение и печать матрицы} for I:=1 to 5 do begin for J:=1 to 7 do begin A[I,J]:=Random(15); Write(A[I,J]:4); end; WriteLn; end; WriteLn; for I:=1 to 5 do for J:=1 to 7 do if A[I,J]=0 then begin Write('I=',I); Break; end; if A[I,4]>2 then begin P:=P*A[I,4]; end; Write('P[I,4] =',P); WriteLn; end.
Описание программы Генератор случайных чисел использован в программе для заполнения элементов двумерного массива A[I,J] случайными числами. Для этого организованы циклы по I и J для перебора всех элементов
массива и каждому функция Random(15) присваивает случайное число в диапазоне 0 …15, которое распечатывается на экране четырьмя знаками. Оператор WriteLn выводит пустую строку. Во вложенном цикле for перебираются все сочетания номеров строк I и столбцов J матрицы, а проверка if A[I,J]=0 определяет и выводит через Write('I=',I)номер строки (I) матрицы, в которой имеется нулевой элемент. Во вложенном цикле for перебираются все сочетания номеров строк I и столбцов J матрицы, а проверка if A[I,4]>2 определяет элемент 4-го столбца, больший 2, он умножается на Р и по завершении цикла итоговое произведение таких элементов выводится через Write('P[I,4] =',P). 3 Контрольные вопросы 1 Что такое массив данных? 2 Как описываются одномерные и многомерные массивы? 3 Как описывается тип элемента массива? 4 Объясните организацию циклов, содержащих индексированные переменные. 5 Как задать обработку элементов только 2-го столбца? 6 Как задать обработку элементов, расположенных ниже главной диагонали? 7 Как определить максимальный элемент массива? 8 Как определить нечётные элементы массива? Задания 4.1. Рассчитать значения функции согласно своему варианту (№ компьютера в аудитории). Предусмотреть сохранение в памяти вычисленных значений функции.
Содержание отчета 1 Название, цель, содержание работы 2 Задание для своего варианта. 3 Программа расчёта 4 Результаты расчётов в среде QB. 5 Письменные ответы на контрольные вопросы. 6 Выводы по работе
Лабораторная работа №7
Читайте также: Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|