Двумерные массивы. Простейшие программы В этом разделе рассматриваются простейшие задачи с использованием двумерных массивов (матриц). Напомним кратко наиболее важные понятия, определения и свойства, связанные с двумерными массивами: - это совокупность однотипных переменных. Размерность двумерного массива равна 2, поэтому каждый элемент массива однозначно определяется с помощью двух индексов: I - номера сроки и J - номера столбца, где он расположен, например, А(2, 4), A(1, N). Строки нумеруются сверху вниз, а столбцы слева направо. называется прямоугольная таблица, состоящая из M строк и N столбцов. Элементами матрицы могут быть числа, функции и вообще любые элементы какого-нибудь заданного множества. В этом пособии рассматриваются только матрицы, элементами которых являются числа. азмер массива - количество элементов в нем. В QBASIC нумерация строк и столбцов начинается с 0, что не всегда удобно, поэтому нулевая строка и нулевой столбец в дальнейшем не будут использоваться в расчетах. Оператором OPTION BASE 1 можно установить минимальные значения I и J, равными 1. если размер массива будет меняться. помощью оператора INPUT и двух циклов, внешнего по I и внутреннего по J (ввод элементов матрицы по строкам) либо внешнего по J и внутреннего по I (ввод элементов матрицы по столбцам). Во втором способе ввод элементов может осуществляться с помощью оператора READ и блока данных. Ввод в память ЭВМ элементов двумерного массива не стоит совмещать с другими операторами. называется порядком матрицы. называется главной (AC), а другая (BD) побочной (антиглавной). B А I J С D У всех элементов, расположенных над главной диагональю, индекс J>I, под главной диагональю - I>J, а на главной диагонали - I=J. У всех элементов, расположенных над побочной диагональю, I+J<N+1, под побочной - I+J>N+1, а на побочной диагонали I+J=N+1. Это следует из того, что в системе координат IAJ уравнение прямой AC имеет вид I=J, а DB - I+J=N+1. или в столбце, произведения элементов в строке или в столбце, максимального или минимального значения среди элементов в строке или столбце и т. д. ) достаточно одного цикла. матрицы, содержащих более двух строк или столбцов, необходимо два цикла, один из которых вложенный. I, а для столбца - индекс J. В этом случае при вычислении различных характеристик в I-ой строке необходим цикл по J, а в J-ом столбце цикл по I. В этом разделе рассматриваются простейшие задачи с использованием двумерных массивов. Пример 1. Составить программу согласно следующему условию. Дана матрица А - заданные натуральные числа. Найти сумму элементов, расположенных в 1-ой строке матрицы. N Указание. В цикле по J от 1 до N при I=1 вычислить сумму S= A(1, J ) . j 1 DEFINT I, J, M, N INPUT “Введите количество строк M=“; M INPUT “Введите количество столбцов N=“; N DIM A(M, N) PRINT “Введите элементы матрицы A” FOR I=1 TO M FOR J=1 TO N PRINT “А(“; I; “,”; J; “)=“; INPUT A(I, J) NEXT J PRINT NEXT I S=0 FOR J=1 TO N S=S+A(1, J) NEXT J PRINT “S=“; S END На экране: Введите количество строк M=? 3 Введите количество столбцов N=? 3 Введите элементы матрицы A A( 1 , 1 )=? 1 A( 1 , 2 )=? 0 A( 1 , 3 )=? 2 A( 2 , 1 )=? 4 A( 2 , 2 )=? 5 A( 2 , 3 )=? 6 A( 3 , 1 )=? 7 A( 3 , 2 )=? 8 A( 3 , 3 )=? 5 S= 3 Пример 2. Составить программу согласно следующему условию. Дана матрица А - заданные натуральные числа. Найти сумму элементов, расположенных в N-ом столбце. M Указание. В цикле по I от 1 до M при J=N вычислить сумму S= A( I , N ) i 1 . DEFINT I, J, M, N INPUT “Введите количество строк M=“; M INPUT “Введите количество столбцов N=“; N DIM A(M,N) PRINT “Введите элементы матрицы A” FOR I=1 TO M FOR J=1 TO N PRINT “A(“; I; “,”; J; “)=“; INPUT A(I, J) NEXT J PRINT NEXT I S=0 FOR I=1 TO M S=S+A(I, N) NEXT I PRINT “S=“; S END На экране: Введите количество строк M=? 3 Введите количество столбцов N=? 3 Введите элементы матрицы A A( 1 , 1 )=? 0 A( 1 , 2 )=? 1 A( 1 , 3 )=? 2 A( 2 , 1 )=? 4 A( 2 , 2 )=? 5 A( 2 , 3 )=? 7 A( 3 , 1 )=? 2 A( 3 , 2 )=? 3 A( 3 , 3 )=? 4 S= 13 Пример 3. Составить программу согласно следующему условию. Дана матрица А - заданные натуральные числа. Найти среднее арифметическое значение элементов матрицы А. Указание. Составить два цикла, внешний по I от 1 до М и внутренний по J от 1 до N, M N и найти сумму элементов S= A( I , J ) , затем вычислить среднее арифметическое i 1 j 1 DEFINT I, J, K, N, M INPUT “ Введите количество строк M=“; M INPUT “Введите количество столбцов N=“; N DIM A(M, N) PRINT “Введите элементы матрицы A” FOR I=1 TO M FOR J=1 TO N PRINT “А (“; I; “,”; J; “)=“; INPUT A(I, J) NEXT J PRINT NEXT I S=0 FOR I=1 TO M FOR J=1 TO N S=S+A(I, J) NEXT J NEXT I T=S/(M*N) PRINT “T=”; T END На экране: Введите количество строк М=? 3 Введите количество столбцов N=? 3 Введите элементы матрицы A A( 1 , 1 )=? 1 A( 1 , 2 )=? 2 A( 1 , 3 )=? 3 A( 2 , 1 )=? 3 A( 2 , 2 )=? 2 A( 2 , 3 )=? 1 A( 3 , 1 )=? 2 A( 3 , 2 )=? 2 A( 3 , 3 )=? 2 Т= 2 Пример 4. Составить программу согласно следующему условию. Дана матрица А - заданные натуральные числа. Поменять местами элементы 1ого и N-ого столбцов. Указание. В цикле по I от 1 до M поменять местами значения элементов A(I, 1) и А(I, N). DEFINT I-N INPUT “ Введите количество строк M=“; M INPUT “Введите количество столбцов N=“; N DIM A(M, N) PRINT “Введите элементы матрицы A” FOR I=1 TO M FOR J=1 TO N PRINT “А(“; I; “,”; J; “)=“; INPUT A(I, J) NEXT J PRINT NEXT I FOR I=1 TO M SWAP A(I, 1), A(I, N) NEXT J PRINT “Результирующая матрица” FOR I=1 TO M FOR J=1 TO N PRINT A(I, J); NEXT J PRINT NEXT I END На экране: Введите количество строк М=? 3 Введите количество столбцов N=? 3 Введите элементы матрицы A A( 1 , 1 )=? 0 A( 1 , 2 )=? 2 A( 1 , 3 )=? 3 A( 2 , 1 )=? 1 A( 2 , 2 )=? 2 A( 2 , 3 )=? 3 A( 3 , 1 )=? 4 A( 3 , 2 )=? 5 A( 3 , 3 )=? 6 Результирующая матрица 3 2 0 3 2 1 6 5 4 Пример 5. Составить программу согласно следующему условию. Сформировать матрицу порядка N, где N - заданное натуральное число, следующим образом. Элементам, расположенным на главной диагонали, присвоить 1. Элементам, расположенным на следующих двух диагоналях, параллельных главной 2 и т. д. Указание. Индексы элементов, расположенных на диагоналях, параллельных главной, удовлетворяют следующим соотношениям: I-J=0 J-I=1 J-I=2 J-I=N-1 I-J=1 I-J=2 I-J=N-1 Во внешнем цикле по I от 1 до N и во внутреннем по J от 1 до N присвоить DEFINT I- N INPUT “Введите порядок матрицы N=“; N FOR I=1 TO N FOR J=1 TO N A(I, J)=ABS(I-J)+1 NEXT J NEXT I PRINT “Результирующая матрица” FOR I=1 TO N FOR J=1 TO N PRINT “A(”;I;”,”;J;”)=“;A(I, J); NEXT J PRINT NEXT I END Результат на экране дисплея Введите порядок матрицы N=? 3 Результирующая матрица 1 2 3 2 1 2 3 2 1 Пример 6. Составить программу согласно следующему матрицу: 2 3 4 5 6 7 8 1 11 12 13 14 15 16 17 18 A= ... ... ... ... ... ... ... ... 91 92 93 94 95 96 97 98 условию. Сгенерировать 9 19 ... 99 10 20 ... 100 Указание. Составить два цикла: внешний по I от 1 до 10 и внутренний по J от 1 до10 и счетчик К для подсчета элементов, A(I, J)=K. Можно обойтись и без счетчика К, положив A(I, J)=(ICLS DEFINT I, J, K K=0 FOR I=1 TO 10 FOR J=1 TO 10 K=K+1 A(I, J)=K NEXT J NEXT I PRINT “Результирующая матрица” FOR I=1 TO 10 FOR J=1 TO 10 LOCATE I+1, 4 J : PRINT A(I, J); NEXT J NEXT I END RUN (Результат на экране дисплея) Результирующая матрица 1 2 3 4 5 6 11 12 13 14 15 16 21 22 23 24 25 26 31 32 33 34 35 36 41 42 43 44 45 46 51 52 53 54 55 56 61 62 63 64 65 66 71 72 73 74 75 76 81 82 83 84 85 86 91 92 93 94 95 96 7 17 27 37 47 57 67 77 87 97 8 18 28 38 48 58 68 78 88 98 9 19 29 39 49 59 69 79 89 99 10 20 30 40 50 60 70 80 90 100 Пример 7. Составить программу согласно следующему условию. Дана квадратная вещественная матрица порядка N, где N - заданное натуральное число. Найти сумму элементов матрицы, расположенных на побочной диагонали. Указание. Индексы элементов, расположенных на побочной диагонали, удовлетворяют условию I+J=N+1. Отсюда J=N+1-I. В цикле по I от 1 до N вычислить N сумму S= A( I , N 1 I ) . i 1 DEFINT I-N INPUT “Введите порядок матрицы N=“; N DIM A(N, N) PRINT “Введите элементы матрицы A” FOR I=1 TO N FOR J=1 TO N PRINT “А (“; I; “,”; J; “)=“; INPUT A(I, J) NEXT J PRINT NEXT I S=0 FOR I=1 TO N S=S+A(I, N+1-I) NEXT I PRINT “S=“; S END RUN (результат на экране дисплея) Введите порядок матрицы N=? 3 Введите элементы матрицы A A( 1 , 1 )=? 1 A( 1 , 2 )=? 2 A( 1 , 3 )=? 0 A( 2 , 1 )=? 4 A( 2 , 2 )=? 5 A( 2 , 3 )=? 6 A( 3 , 1 )=? 7 A( 3 , 2 )=? 8 A( 3 , 3 )=? 3 S= 12 Пример 8. Составить программу согласно следующему условию. Дана матрица А - заданные натуральные числа. Вычислить среднее арифметическое значение элементов матрицы, расположенных в четных строках и нечетных столбцах. Указание. Во внешнем цикле по I от 2 до M с шагом 2 и во внутреннем по J от 1 до N с шагом 2 вычислить сумму элементов матрицы, расположенных в четных строках и нечетных столбцах и их количество К. Среднее арифметическое значение равно S/K. DEFINT I-N INPUT “Введите количество строк M=“; M INPUT “Введите количество столбцов N=“; N DIM A(M, N) PRINT “Введите элементы матрицы A” FOR I=1 TO M FOR J=1 TO N PRINT “А (“; I; “,”; J; “)=“; INPUT A(I,J) NEXT J PRINT NEXT I S=0: K=0 FOR I=2 TO M STEP 2 FOR J=1 TO N STEP 2 S=S+A(I, J) K=K+1 NEXT J NEXT I T=S/K PRINT “T=”; T END RUN (результат на экране дисплея) Введите количество строк M=? 4 Введите количество столбцов N=? 3 Введите элементы матрицы A A( 1 , 1 )=? 1 A( 1 , 2 )=? 2 A( 1 , 3 )=? 0 A( 2 , 1 )=? 3 A( 2 , 2 )=? 4 A( 2 , 3 )=? 5 A( 3 , 1 )=? 6 A( 3 , 2 )=? 7 A( 3 , 3 )=? 8 A( 4 , 1 )=? 3 A( 4 , 2 )=? 2 A( 4 , 3 )=? 1 Т= 3 Пример 9. Составить программу согласно следующему условию. Дана вещестсвенная квадратная матрица A, порядка N, где N - заданное натуральное число. Найти сумму элементов, расположенных на выделенных линиях, указанных на рисунке. Указание. В цикле по J от 1 до N-1 вычислить сумму элементов, расположенных в 1 и N строках, а также в 1 и N столбцах. Отметим, что в каждой строке и столбце вычисляется сумма N-1 элементов. DEFINT I, J, N INPUT “Введите порядок матрицы N=“; N DIM A(N, N) PRINT “Введите элементы матрицы A” FOR I=1 TO N FOR J=1 TO N PRINT “А (“; I; “,”; J; “)=“; INPUT A(I, J) NEXT J PRINT NEXT I S=0 FOR J=1 TO N-1 S = S + A( 1,J ) + A( N,J+1 ) + A( J+1,1 ) + A( J, N ) NEXT J PRINT “S=“; S END RUN (Результат на экране дисплея) Введите порядок матрицы N=? 3 Введите элементы матрицы A A( 1 , 1 )=? 1 A( 1 , 2 )=? 2 A( 1 , 3 )=? 0 A( 2 , 1 )=? 3 A( 2 , 2 )=? 2 A( 2 , 3 )=? 2 A( 3 , 1 )=? 3 A( 3 , 2 )=? 4 A( 3 , 3 )=? 5 S=20 Пример 10. Составить программу согласно следующему условию. Дана квадратная матрица А порядка N, где N - заданное натуральное число. Найти сумму элементов, расположенных на выделенных линиях, указанных на рисунке: Указание. В цикле по J от 1 до N вычислить сумму элементов, расположенных в 1 и N строках. Затем в цикле по I от 2 до N-1 прибавить значения остальных элементов, расположенных в 1 и N столбцах , а также на главной и побочной диагоналях. Учесть, что при нечетном значении N, элемент, расположенный на пересечении главной и побочной диагоналей, считается дважды. DEFINT I, J, N, M INPUT “ Введите порядок матрицы N=“; N DIM A(N, N) PRINT “Введите элементы матрицы А” FOR I=1 TO N FOR J=1 TO N PRINT “А(“; I; “,”; J; “)=“; INPUT A(I, J) NEXT J PRINT NEXT I S=0 FOR J=1 TO N S=S+A(1, J)+A(N, J) NEXT J FOR I=2 TO N-1 S=S+A(I, 1)+A(I, N)+A(I, I)+A(I, N+1-I) NEXT I IF N mod 2 <>0 THEN M=(N+1)/2 S=S-A(M, M) END IF PRINT “S=”; S END RUN (Результат на экране дисплея) Введите порядок матрицы N=? 3 Введите элементы матрицы А A( 1 , 1 )=? 1 A( 1 , 2 )=? 2 A( 1 , 3 )=? 3 A( 2 , 1 )=? 4 A( 2 , 2 )=? 5 A( 2 , 3 )=? 2 A( 3 , 1 )=? 3 A( 3 , 2 )=? 4 A( 3 , 3 )=? 1 S= 25