Массивы

Автор: Пользователь скрыл имя, 23 Декабря 2012 в 14:50, лекция

Описание работы

Массив – это упорядоченная совокупность однотипных переменных, обладающих одинаковыми свойствами.
Отношение порядка между элементами массива задается с помощью индексирования. Каждому элементу массива ставится в соответствие один или несколько индексов. Если каждому элементу ставится в соответствие один индекс, то это - одномерный массив (вектор). При наличии двух индексов – двумерный массив (матрица), причем, обычно первый индекс обозначает номер строки, а второй – номер столбца, где находится соответствующий элемент.

Работа содержит 1 файл

Лекция_3_Массивы_2012_матрицы.doc

— 75.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 столбцов, с элементами целого типа.

 

 

    1. VAR

               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

                                          sum := Sum + A[I,J];

                                          kolp := kolp + 1;

                                   End;

                    if kolp > 0

                    then  begin

                                      sa := sum / kolp;

                            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

                                                IMAX:=I;

                                                JMAX:=J;

                                            End

                                еlse   If A[IMIN, JMIN] > A[I,J]

                                            then   Begin

                                                               IMIN :=I;

                                                               JMIN:=J;

                                                         End;

                   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

                                                IMAX:=I;

                                                JMAX:=J;

                                            End

                                еlse   If A[IMIN,, JMIN] > A[I,J]

                                            then   Begin

                                                               IMIN :=I;

                                                               JMIN:=J;

                                                         End;

                          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.


Информация о работе Массивы