15
1 Двумерные массивы Учитель информатики высшей категории ГБОУСОШ №398 г. Москвы Темишева людмила степановна A( I,J ) СТРОКИ СТОЛБЦЫ

Двумерные массивы

  • Upload
    nico

  • View
    52

  • Download
    0

Embed Size (px)

DESCRIPTION

Двумерные массивы. Учитель информатики высшей категории ГБОУСОШ №398 г. Москвы Темишева людмила степановна Типовые алгоритмы. Ввод двумерного массива. При вводе двумерного массива необходимо организовать двойной цикл : - PowerPoint PPT Presentation

Citation preview

Page 1: Двумерные массивы

1

Двумерные массивы

Учитель информатики высшей категории ГБОУСОШ №398 г. МосквыТемишева людмила степановна

Типовые алгоритмы

A( I,J )

СТРОКИ СТОЛБЦЫ

Page 2: Двумерные массивы

2

Ввод двумерного массиваПри вводе двумерного массива необходимо организовать двойной цикл : - внешний цикл ( по строкам) - внутренний цикл (по столбцам)Порядок ввода элементов определяется порядком изменения индексов в программе

и для приведенной программы является следующим:

А(1,1) А(1,2)…..А(1,м) А(2,1) А(2,2)…. А(2,м) …………А(n,1) А(n.2) ….А(n,m)

CLS1 INPUN “введите количество строк”; NIF N<2 OR FIX(N)<>N THEN PRINT “ошибка ввода”: GOTO 12 INPUN “введите количество столбцов”; MIF 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

Page 3: Двумерные массивы

3

В случае необходимости можно организовать заполнение массива по столбцам. Для этого внешний цикл должен быть организован по номеру столбца (J), а внутренний по номеру строки (I) с соответствующими границами изменения индексов.

REM Ввод массива по столбцам FOR J=1 TO MFOR I=1 TO NPRINT “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)Ввод нескольких массивов одного размера можно осуществить в одном цикле.

Page 4: Двумерные массивы

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.

Page 5: Двумерные массивы

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

Page 6: Двумерные массивы

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

44434241

34333231

24232221

14131211

aaaa

aaaa

aaaa

aaaa

Page 7: Двумерные массивы

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

Page 8: Двумерные массивы

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

Page 9: Двумерные массивы

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

15105

33333

22222

11111

Page 10: Двумерные массивы

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)

333231

232221

131211

bbb

bbb

bbb

Page 11: Двумерные массивы

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

123

123

123

123

123

Page 12: Двумерные массивы

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)

NibaCM

jjijIJ ,...1,

1

1

Page 13: Двумерные массивы

13

Умножение матрицы на матрицу

Для умножения А(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

mjnibljailCijk

l...1,...1,*

1

Page 14: Двумерные массивы

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 Удаление столбца аналогично (задание на дом)

a11 a12 a13 a14 a15 a16

a21 a22 a23 a24 a25 a26

a31 a32 a33 a34 a35 a36

a41 a42 a43 a44 a45 a46

a51 a52 a53 a54 a55 a56

Page 15: Двумерные массивы

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

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