Одномерные и многомерные массивы
Все переменные делятся на простые и индексированные. Простые записываются своими идентификаторами (именами) и могут быть различных типов (integer, real,…), например, PI, Xmin, DELTA, omega и др. Индексированные переменные являются элементами массива, который состоит из набора данных одного типа. Массив элементов имеет общий идентификатор - имя, а каждый его элемент определяется по индексу имени, например, V[i] – i-тый элемент массива с именем V. Массив объединяет фиксированное количество элементов одного типа данных. Более формально массив можно определить как последовательную упорядоченную совокупность элементов некоторого типа, которые адресуются с помощью некоторого индекса (номера элемента в массиве).
Наряду с термином «массив» часто используются термины «матрица», «таблица», «вектор».
Поскольку все элементы массива должны быть одного типа, определение типа массива имеет следующий вид:
type
Tarr = array [T1] of T2,
где 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).
Контрольные вопросы
1 Что такое массив данных ?
2 Как описываются одномерные и многомерные массивы?
3 Как описывается тип элемента массива?
4 Объясните организацию циклов, содержащих индексированные
переменные.
5 Как задать обработку элементов только 2-го столбца?
6 Как задать обработку элементов, расположенных ниже главной диагонали?
7 Как определить максимальный элемент массива?
8 Как определить нечётные элементы массива?
Задания
4.1. Рассчитать значения функции согласно своему варианту (№ компьютера в аудитории). Предусмотреть сохранение в памяти вычисленных значений функции.
№ вар | Функция, массив | Задание | ||
y =(1+| x | ); x {7; 1; 2; -3; -1; 5; -18} | Найти максимум и сумму положительных элементов массива | |||
Найти минимум и сумму отрицательных элементов массива А | ||||
S =lg (3│sin(x)│+x x {-5; 4; 0; 1; 3.5;-10; 14} | Количество и сумму элементов, меньших 2 | |||
u =ln │3sin x +1│; x {-1; 2; 4.1; -5; -22; 17} | Наибольшее и наименьшее значения функции | |||
Найти сумму и количество элементов A[I,J] > 1 | ||||
r =3.4sin(5+3.1t ); t {-1.1; -0.8; 4; -1; -3; 5} | Произведение элементов t с нечет ными номерами и их количество | |||
q =3.3sin x - 1+sin x ; x {1; 4; 3; 7; -51; 32; -2} | Номер первого отрицательного элемента массива q | |||
Найти минимум и сумму положительных элементов массива | |||
Количество и сумму элементов, больших 2 | |||
d =ln │x +sin х4│; x {0.75; -3.1; 21; -1.7; 3} | Количество и произведение элементов, больших -2 | ||
Произведение элементов с чет ными номерами и их количество | |||
Сумму элементов над главной диагональю и максимальный из них | |||
m =7.3cos x6 – sin3 x ; x {1; 4; 3; 7; -51; 32; -2} | Номер первого положительного элемента массива m | ||
Произведение отрицательных элементов над главной диагональю и минимальный из них | |||
G =(sin3 x – tg2 x ; x {1; 4; 3; 7; -51; 32; -2} | Номер первого отрицательного элемента массива G | ||
Сумму положительных элементов под главной диагональю и максимальный из них | |||
Произведение элементов с нечет ными номерами и их количество | |||
a =e2х x {1.3; 0.2; -4; 3.2; 5; -1} | Сумму элементов с чет ными номерами и их количество | ||
Произведение элементов с нечет- ными номерами, большими -2, и их количество | |||
C =arctg(a -3a +2); a {2.7; 3.1; 4.5; -6; 14} | Произведение элементов с чет ными номерами и их количество |
Содержание отчета
1 Название, цель, содержание работы
2 Задание для своего варианта.
3 Программа расчёта
4 Результаты расчётов в среде QB.
5 Письменные ответы на контрольные вопросы.
6 Выводы по работе
Лабораторная работа №7
Дата добавления: 2016-02-02; просмотров: 1736;