1 Двумерные массивы Учитель информатики высшей категории ГБОУСОШ 398 г. Москвы Темишева людмила степановна Типовые алгоритмы A( I,J ) СТРОКИ СТОЛБЦЫ
2 Ввод двумерного массива При вводе двумерного массива необходимо организовать двойной цикл : - внешний цикл ( по строкам) - внутренний цикл (по столбцам) Порядок ввода элементов определяется порядком изменения индексов в программе и для приведенной программы является следующим: А(1,1) А(1,2)…..А(1,м) А(2,1) А(2,2)…. А(2,м) …………А(n,1) А(n.2) ….А(n,m) CLS 1 INPUN введите количество строк; N IF N N THEN PRINT ошибка ввода: GOTO 1 2 INPUN введите количество столбцов; M IF M M THEN PRINT ошибка ввода: GOTO 2 DIM A(N,M) FOR I=1 TO N цикл по строкам FOR J=1 TO M цикл по столбцам PRINT введите элемент ;I;-ой строки;J;-го столбца INPUT A(I,J) NEXT J,I
3 В случае необходимости можно организовать заполнение массива по столбцам. Для этого внешний цикл должен быть организован по номеру столбца (J), а внутренний по номеру строки (I) с соответствующими границами изменения индексов. REM Ввод массива по столбцам FOR J=1 TO M FOR I=1 TO N PRINT A(;I;,;J;); INPUT A(I,J) NEXT I,J Элементы массива вводятся в следующем порядке: А(1,1) А(2,1)…..А(n,1) А(1,2) А(2,2)…. А(n,2) …А(1,m).А(2,m.) ….А(n, m) Если число вводимых элементов невелико, можно не использовать циклы, а все элементы указать явно в списке ввода. Например, для ввода массива А(2,2) можно использовать операторы PRINT Введите массив А(2,2) по строкам INPUT A(1,1),A(1,2),A(2,1),A(2,2) Ввод нескольких массивов одного размера можно осуществить в одном цикле.
4 ВЫВОД ДВУМЕРНОГО МАССИВА Двумерные массивы необходимо выводить в привычном виде (по строкам), начиная вывод новой строки массива в новую строку экрана. PRINT распечатка исходного массива FOR I=1 TO N FOR J=1 TO M PRINT A(I,J); NEXT J PRINT Перевод курсора в начало следующей строки NEXT I Наглядность вывода может быть нарушена, если элементы массива А в памяти ЭВМ представляются различным числом значащих цифр. Тогда элементы одного столбца могут занимать различное число позиций и не будут располагаться строго друг под другом. Для улучшения наглядности в этом случае можно предложить 2 способа: 1. В операторе вместо ( ; ) поставить (, ). 2. вывод всех элементов массива по единому формату с использованием оператора PRINT USING.
5 Суммирование элементов двумерного массива Для двумерного массива необходимо вычислить : n m S= Аij i=1 j=1 REM вычисление сумма элементов массива S=0 FOR I=1 TO N FOR J=1 TO M S=S+A(I,J) NEXT J NEXT I PRINT сумма=;S
6 Суммирование диагональных элементов массива (вычисление следа массива) Для массива А(n,n) необходимо вычислить n S= Аii i=1 REM вычисление суммы следа массива S=0 FOR I=1 TO N S=S+A(I,J) NEXT I PRINT След массива=;S
7 Cуммирование двух массивов одинаковой размерности`` Для двумерных массивов А(n,m) и В(n,m) необходимо вычислить Сij=Аij+Вij, i=1…n,j=1…m REM FOR I=1 TO N FOR J=1 TO M C(I,J)=A(I,J)+B(I,J) NEXT J NEXT I
8 Суммирование элементов заданной строки матрицы Для массива А(I,J) необходимо вычислить m S= Aij J=1 REM Вычисление суммы I–ой строки S-0 FOR J=1 TO M S=S+A(I,J) PRINT Сумма;I; –ой строки=;S
9 Суммирование элементов строк матрицы Необходимо вычислить сумму элементов каждой строки массива А(n,m). Результат получить в векторе D(n), т.е. вычислить REM Суммирование массива по строкам FOR I=1 TO N S=0 FOR J=1 TO N S=S+A(I,J) NEXT J D(I)=S NEXT I Так как на поиск в массиве элемента с заданными значениями индексов затрачивается время (адрес i–го элемента определяется прибавлением к адресу начала массива значение 1) следовательно для повышения эффективности в программе используется при вычислении суммы простая переменная, что исключает многократное обращение к элементам массива D
10 Урок 2. Транспонирование матриц. Необходимо заменить строки матрицы её столбцами, а столбцы её строками, т.е. вычислить Вij=Аij, i=1…n j=1…m Транспонированную матрицу можно получить в исходном массиве А(n,m). Для квадратной матрицы размером N,N для этого необходимо поменять местами каждый элемент верхнего треугольника с соответствующим элементом нижнего (диагональные элементы остаются на месте). При этом для каждой строки нужно выполнить перестановку для элементов, расположенных правее главной диагонали, с элементами соответствующего столбца, расположенные ниже главной диагонали. При перестановке используем вспомогательную переменную Р, помещая в нее один из переставляемых элементов, чтобы не потерять его значение, т.е. Р=Aij, Aij=Aji Aji=P, i=1….n-1, j=j+1….n или оператор SWAP A(I,J),A(J,I)
11 П РОГРАММЫ ТРАНСПОНИРОВАНИЯ REM ТРАНСПОНИРОВАНИЕ ПРЯМОУГОЛЬНОЙ МАТРИЦЫ FOR I=1 TO N цикл по строкам FOR J=1 TO M цикл по столбцам B(I,J)=A(J,I) NEXN J NEXT I REM ТРАНСПОНИРОВАНИЕ КВАДРАТНОЙ МАТРИЦЫ FOR I=1 TO N-1 FOR J=I+1 TO N SWAP A(I,J),A(J,I) NEXT J,I
12 УМНОЖЕНИЕ МАТРИЦЫ НА ВЕКТОР Для вычисления произведения матрицы А(N,M) на вектор В(M) необходимо вычислить A m C REM Умножение матрицы на вектор FOR I=1 TO N S=0 FOR J=1 TO M n S=S+A(I,J)*B(J) n NEXT J B C(I)=S NEXT I n Использование вспомогательной переменной S позволяет уменьшить время выполнение программы за счет исключения обращения в цикле по j к элементам массива С(N) 1
13 Умножение матрицы на матрицу Для умножения А(N,K) на В(K,M) необходимо выполнить вычисления: Получим массив С(N,M) A K M M N K REM FOR I=1 TO N FOR J=1 TO M S=0 FOR L=1 TO K S=S+A(I,J)*B(L,J) NEXT L C(I,J)=S NEXT J,I
14 Удаление строки из матрицы Требуется удалить строку с заданным номером К. Все строки,начиная с (К+1)-й строки,нужно переместить вверх. Число строк уменьшается на 1. REM УДАЛЕНИЕ СТРОКИ N=N-1 K=3 FOR I=K TO N FOR J=1 TO M А(I,J)=А(I+1,J) NEXT J NEXT I Удаление столбца аналогично (задание на дом) a11a12a13a14a15a16 a21a22a23a24a25a26 a31a32a33a34a35a36 a41a42a43a44a45a46 a51a52a53a54a55a56
15 Включение строки в матрицу. Включаемая строка задана как вектор С(М). Включение строки в матрицу аналогично включению элемента в одномерный массив. REM Включение строки в матрицу FOR I=N TO K STEP -1 FOR J=1 TO M A(I+1,J)=A(I,J) NEXT J NEXT I FOR J=1 TO M A(K,J)=C(J) NEXT J N=N+1 Операторы в скобках перемещают строки, начиная с К-й, вниз (в обратном порядке).Перемещение одной строки связано с перемещением всех элементов этой строки, что требует организации цикла по номеру столбца. Включение строки в качестве К-й строки осуществляют операторы в фигурных скобках,