Автор: Пользователь скрыл имя, 23 Декабря 2012 в 14:50, лекция
Массив – это упорядоченная совокупность однотипных переменных, обладающих одинаковыми свойствами.
Отношение порядка между элементами массива задается с помощью индексирования. Каждому элементу массива ставится в соответствие один или несколько индексов. Если каждому элементу ставится в соответствие один индекс, то это - одномерный массив (вектор). При наличии двух индексов – двумерный массив (матрица), причем, обычно первый индекс обозначает номер строки, а второй – номер столбца, где находится соответствующий элемент.
МАССИВЫ
Массив – это упорядоченная совокупность однотипных переменных, обладающих одинаковыми свойствами.
Отношение порядка между элементами массива задается с помощью индексирования. Каждому элементу массива ставится в соответствие один или несколько индексов. Если каждому элементу ставится в соответствие один индекс, то это - одномерный массив (вектор). При наличии двух индексов – двумерный массив (матрица), причем, обычно первый индекс обозначает номер строки, а второй – номер столбца, где находится соответствующий элемент.
TYPE
Идентификатор_типа = ARRAY [ЛГ .. ПГ] OF тип;
Пара ЛГ .. ПГ (граничная пара) определяет , во-первых, размерность массива: одна пара – одномерный массив, вектор; две пары через запятую – двумерный массив, матрица, таблица; три пары через запятую – трёхмерный массив.
Кроме того, пара ЛГ .. ПГ (граничная пара) определяет, допустимые границы изменения номеров элементов массива (индексов) по данному измерению; ещё она
показывает, сколько элементов имеет массив по данному измерению.
В качестве типа индекса может быть любой простой тип, кроме вещественных. Чаще всего используется индекс целого типа.
Например,
TYPE
T1 = ARRAY [ -10 .. 20 , 1..30 ] OF REAL;
T2 = ARRAY [ 0..50 ] OF BOOLEAN;
T3 = ARRAY [ 1..25 ] OF INTEGER;
VAR
A, B: T1;
C: T2;
MAS: T3;
Z: ARRAY[ 1..100 ] OF REAL;
Здесь в разделе описания типов приводятся три различных типа массивов. T1 – это тип двумерного массива, в котором номера строк могут принимать значения от –10 до 20, а номера столбцов – от 1 до 30. Элементами массива типа T1 должны быть вещественные числа. Тип T2 определяет одномерный массив с элементами логического типа, номера элементов могут быть от 0 до 50. Тип T3 определяет одномерный массив с элементами целого типа со знаком, при этом диапазон изменения индексов массива от 0 до 255. В разделе описания переменных определяются переменные А и В типа T1, С – типа Т2 и MAS – типа Т3. Помимо предварительного описания типа возможно определять массивы непосредственно в разделе описания переменных, как это сделано для переменной Z.
Обращение к элементам массивов осуществляется с помощью переменных с индексами. Число индексов в переменной с индексами равно числу измерений массива. Индексы могут задаваться целыми числами, простыми переменными, арифметическими выражениями.
Обращение к элементу массива выглядит как;
A [ 3 ] – элемент массива А номер 3.
A [ I ] – любой, каждый, текущий элемент массива А, его номер зависит от значения переменной I
A [ N – I + 1 ] – номер элемента определяется значением индексного выражения.
Аналогичные формы имеют обращения к элементам двумерных и трёхмерных массивов.
S := S + Z [ I ] ;
P := P * A [ I, J ] ;
P := P * A[ I , J ] ;
R := B [ I + 5, J ] ;
MAS [ I ] := MAS [ I -1 ] * MAS [ I ] ;
…
Если массивы имеют одинаковое описание, их можно копировать В:= А.
ДВУМЕРНЫЕ МАССИВЫ (матрицы)
TYPE
Идентификатор_типа = ARRAY [ЛГ1 .. ПГ1, ЛГ2 .. ПГ2] OF тип;
VAR
ИМЯ_МАССИВА : Идентификатор_типа;
либо
VAR
ИМЯ_МАССИВА= ARRAY [ ЛГ1 .. ПГ1, ЛГ2 .. ПГ2 ] OF тип;
Пара ЛГ .. ПГ (граничная пара) определяет , во-первых, размерность массива: одна пара – одномерный массив, вектор; две граничных пары через запятую – двумерный массив, матрица, таблица; три пары через запятую – трёхмерный массив.
Кроме того, пара ЛГ .. ПГ (граничная пара) определяет, допустимые границы изменения номеров элементов массива (индексов) по данному измерению; ещё она
показывает, сколько элементов имеет массив по данному измерению.
В качестве типа индекса может быть любой простой тип, кроме вещественных. Чаще всего используется индекс целого типа.
РИСУНОК МАТРИЦЫ
Рассмотрим различные способы описания массивов.
Пусть требуется описать матрицу A, содержащую 10 строк и 50 столбцов, с элементами целого типа.
A : ARRAY[ 1..10, 1..50 ] OF INTEGER;
2) TYPE
TMATR = ARRAY [1..10, 1..50 ] OF INTEGER;
VAR
A : TMATR;
Второй вариант описания массива обязателен, если массив предполагается использовать в качестве параметра при работе с подпрограммами.
ОБРАЩЕНИЕ К ЛЮБОМУ (очередному, текущему) элементу матрицы
. . . A[ I, J ] . . .
Обратить внимание :
A[ № строки , № столбца]
Program IN_OUT_MATR;
Var
A: array[ 1..30 , 1..30 ] of integer;
I,J : integer;
Begin
{ стандартная форма ввода матрицы }
Writeln (' ВВЕДИТЕ ЧИСЛО СТРОК МАТРИЦЫ, <= 30 ');
Readln(M);
Writeln (' ВВЕДИТЕ ЧИСЛО СТОЛБЦОВ МАТРИЦЫ, , <= 30 ');
Readln(N);
For I:=1 to M do
For J:=1 to N do
BEGIN
Writeln (' A [' , i, ', ' , j, ' ] = ' );
Readln( A[I,J]);
end;
{ стандартная форма вывода матрицы }
{ ПЕЧАТЬ МАТРИЦЫ В МАТРИЧНОЙ ФОРМЕ }
For I:=1 to M do
Begin
{ ПЕЧАТЬ ОЧЕРЕДНОЙ СТРОКИ }
For J:=1 to N do
Write (' A [' , i, ', ' , j, ' ] = ', A[ I,J ]:6);
{ ПЕРЕХОД НА НОВУЮ СТРОКУ }
Writeln ;
End;
end.
Получить
в матрице среднее
Program MEAN_POS_MTR;
Var
A: array[1..30,1..30] of integer;
m, n, I,J, sum : integer;
sa : real;
Begin
{ стандартная форма ввода матрицы }
Writeln (' ВВЕДИТЕ ЧИСЛО СТРОК МАТРИЦЫ, <= 30 ');
Readln(M);
Writeln (‘ВВЕДИТЕ ЧИСЛО СТОЛБЦОВ МАТРИЦЫ, <= 30 ');
Readln(N);
For I:=1 to M do
For J:=1 to N do
BEGIN
Writeln (' A [' , i, ', ' , j, ' ] = ');
Readln( A[I,J] );
end;
{ ПЕЧАТЬ МАТРИЦЫ В МАТРИЧНОЙ ФОРМЕ }
For I:=1 to M do
Begin
{ ПЕЧАТЬ ОЧЕРЕДНОЙ СТРОКИ }
For J:=1 to N do
Write (' A [' , i, ', ' , j, ' ] = ', A[ I,J ] :6);
{ ПЕРЕХОД НА НОВУЮ СТРОКУ }
Writeln ;
End;
sum := 0;
kolp :=0;
FOR I:=1 TO M DO
For J:=1 to N do
If A[I,J] > 0
then Begin
if kolp > 0
then begin
WRITELN(' сред. арифм. полож-х эл-в = ', sA:8:2 );
end
else WRITELN(' в матрице полож-х эл-в нет ' );
readln;
End.
Поиск максимума в двумерном массиве (в матрице)
Program MAX_MIN;
Var
A: array[1..30,1..30] of integer;
I,J : integer;
IMAX,JMAX,IMIN,JMIN : integer;
Begin
Writeln (' ВВЕДИТЕ ЧИСЛО СТРОК МАТРИЦЫ, <= 30 ');
Readln(M);
Writeln (' ВВЕДИТЕ ЧИСЛО СТОЛБЦОВ МАТРИЦЫ, <= 30 ');
Readln(N);
For I:=1 to M do
For J:=1 to N do
BEGIN
Writeln (' A [' , i, ', ' , j, ' ] = ');
Readln( A[I,J]);
end;
{ ПЕЧАТЬ МАТРИЦЫ В МАТРИЧНОЙ ФОРМЕ }
For I:=1 to M do
Begin
{ ПЕЧАТЬ ОЧЕРЕДНОЙ СТРОКИ }
For J:=1 to N do
Write (' A [' , i, ', ' , j, ' ] = ', A[ I,J ] :6);
{ ПЕРЕХОД НА НОВУЮ СТРОКУ }
Writeln ;
End;
IMAX:=1; JMAX:=1; {координаты максимального элемента}
IMIN :=1; JMIN:=1; {координаты минимального элемента}
FOR I:=1 TO M DO
Begin
For J:=1 to N do
If A[ IMAX, JMAX ]< A[I,J]
then Begin
then Begin
End;
WRITELN(' МАКСИМУМ = ', A[ IMAX, JMAX ],
' СТРОКА= ', IMAX, ' СТОЛБЕЦ = ', JMAX );
WRITELN(' МИНИМУМ = ', A[IMIN, JMIN],
' СТРОКА= ', IMIN, ' СТОЛБЕЦ = ', JMIN );
readln;
End.
Поменять местами максимальный и минимальный элементы, найденные среди элементов четных строк матрицы А(M,N).
Здесь используется цикл WHILE для индексации строк, т.к. нас интересуют только четные строки, следовательно, шаг для строк должен быть равен 2. В цикле FOR этого сделать нельзя.
Program Obmen;
Var
A: array[1..30,1..30] of integer;
I,J : integer;
IMAX,JMAX,IMIN,JMIN : integer;
T,M,N: integer;
Begin
Writeln (' ВВЕДИТЕ ЧИСЛО СТРОК МАТРИЦЫ, <= 30 ');
Readln(M);
Writeln (' ВВЕДИТЕ ЧИСЛО СТОЛБЦОВ МАТРИЦЫ, <= 30 ');
Readln(N);
For I:=1 to M do
For J:=1 to N do
BEGIN
Writeln (' A [' , i, ', ' , j, ' ] = ');
Readln( A[I,J]);
end;
IMAX:=1; JMAX:=1; {координаты максимального элемента}
IMIN :=1; JMIN:=1; {координаты минимального элемента}
I:=2;
While (I<=M) do
Begin
For J:=1 to N do
If A[ IMAX, JMAX ]< A[I,J]
then Begin
JMAX:=J;
I:=I+2;
End;
T:= A[IMAX, JMAX];
A[IMAX, JMAX]:= A[IMIN, JMIN];
A[IMIN, JMIN] :=T;
For I:=1 to M do
Begin
For J:=1 to N do
Write (' A [' , i, ', ' , j, ' ] = ', A[ I,J ] :6);
Writeln ;
End;
readln;
End.