150 likes | 353 Views
Двумерные массивы. Учитель информатики высшей категории ГБОУСОШ №398 г. Москвы Темишева людмила степановна Типовые алгоритмы. Ввод двумерного массива. При вводе двумерного массива необходимо организовать двойной цикл :
E N D
Двумерные массивы Учитель информатики высшей категории ГБОУСОШ №398 г. Москвы Темишева людмила степановна Типовые алгоритмы
Ввод двумерного массива При вводе двумерного массива необходимо организовать двойной цикл : - внешний цикл ( по строкам) - внутренний цикл (по столбцам) Порядок ввода элементов определяется порядком изменения индексов в программе и для приведенной программы является следующим: А(1,1) А(1,2)…..А(1,м) А(2,1) А(2,2)…. А(2,м) …………А(n,1) А(n.2) ….А(n,m) CLS 1 INPUN “введите количество строк”; N IF N<2 OR FIX(N)<>N THEN PRINT “ошибка ввода”: GOTO 1 2 INPUN “введите количество столбцов”; M IF M<2 OR FIX(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
В случае необходимости можно организовать заполнение массива по столбцам. Для этого внешний цикл должен быть организован по номеру столбца (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) Ввод нескольких массивов одного размера можно осуществить в одном цикле.
ВЫВОД ДВУМЕРНОГО МАССИВА • Двумерные массивы необходимо выводить в привычном виде (по строкам), начиная вывод новой строки массива в новую строку экрана. • 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.
Суммирование элементов двумерного массива • Для двумерного массива необходимо вычислить : • 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
Суммирование диагональных элементов массива (вычисление следа массива) • Для массива А(n,n) необходимо вычислить • n • S=Аii • i=1 • REM вычисление суммы следа массива • S=0 • FOR I=1 TO N • S=S+A(I,J) • NEXT I • PRINT “След массива=“;S
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
Суммирование элементов заданной строки матрицы • Для массива А(I,J) необходимо вычислить • m • S=Aij • J=1 • REM Вычисление суммы I–ой строки • S-0 • FOR J=1 TO M • S=S+A(I,J) • PRINT “Сумма”;I;” –ой строки=“;S
Суммирование элементов строк матрицы • Необходимо вычислить сумму элементов каждой строки массива А(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
Урок 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)
ПРОГРАММЫ ТРАНСПОНИРОВАНИЯ • 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
УМНОЖЕНИЕ МАТРИЦЫ НА ВЕКТОР • Для вычисления произведения матрицы А(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)
Умножение матрицы на матрицу • Для умножения А(N,K) на В(K,M) необходимо выполнить вычисления: • Получим массив С(N,M) • A K M M N 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
Удаление строки из матрицы • Требуется удалить строку с заданным номером К. Все строки,начиная с (К+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 • Удаление столбца аналогично (задание на дом)
Включение строки в матрицу. • Включаемая строка задана как вектор С(М). Включение строки в матрицу аналогично включению элемента в одномерный массив. • 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 • Операторы в скобках перемещают строки, начиная с К-й, вниз (в обратном порядке) .Перемещение одной строки связано с перемещением всех элементов этой строки , что требует организации цикла по номеру столбца. Включение строки в качестве К-й строки осуществляют операторы в фигурных скобках,