Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторный практикум-new.doc
Скачиваний:
23
Добавлен:
09.04.2015
Размер:
1.4 Mб
Скачать

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

При решении задач с использованием двумерных массивов, так же как и при решении задач с одномерными массивами, можно определить следующие модули: ввод массива, операции с массивом, вывод массива.

Рассмотрим эти модули для двумерного массива.

Ввод матрицы

Пример:

Ввести двумерный массив действительных чисел, состоящий из n строк и m столбцов,

Оператор input в данной программе выполняется n x m раз и при каждом его выполнении вводится один элемент матрицы. Порядок ввода элементов - сначала вводятся элементы 1-й строки, начиная с элемента а(1,1) до элемента а(1, m), затем элементы 2-й строки и т.д. до строки с номером n. В приведенном примере внутренний цикл- цикл по j, внешний - по i

rem ввод матрицы

input n, m

dim a(l to n, l to m)

for i = l to n

for j =1 to m

нет input a(i, j)

next j

да next i

нет

да

Рис. 14

Матрицу можно ввести и по столбцам. Сначала вводятся по очереди все элементы столбца 1, начиная с а(1,1) до а(n,1), затем элементы второго столбца и т.д. до столбца с номером m. Блок-схема решения задачи ввода матрицы по столбцам и программе на QBASIC для решения задачи имеют следующий вид

rem ввод матрицы

input n, m

dim a(l to n, l to m)

for j = 1 to m

for i = 1 to n

input a(i, j)

нет next i

next j

да Продолжение

нет

да

Рис.15

При выполнении приведенных программ все элементы матрицы вводятся с клавиатуры поочередно. При вводе и отладке программы на экране монитора появится знак "?" и поочередно вводятся элементы массива.

Элементы матрицы могут быть введены с помощью блока данных. В цикле выполняется оператор read (a(i,j)) и вне цикла записывается оператор data, в котором перечисляются все значения элементов массива.

rem ввод матрицы

input n, m

dim a(l to n,l to m)

for i = 1 to n

for j = 1 to m

read a (i,j)

next i

next j

data 5,8.9,4.67,2,92.8 и т.д.

Значение элементов матрицы в операторе data отделяются друг от друга запятой. Для получения элементов матрицы можно использовать функцию rnd.

rem ввод матрицы

cls

input n, m

dim a(l to n, l to m)

for i = 1 to n

for j =1 to m

a(i, j) = rnd (i)

next j

next i

Функция rnd дает возможность получить случайные числа в диапазоне от 0 до 1.

Если нужно получить случайное число в диапазоне от 0 до N (где N>1), то необходимо умножить результат функции rnd на N. Если в цикле записать

a(i,j) = 100 x rnd (1), то можно получить случайные действительные числа между 0 и 100. Если необходимо получить целые числа, то используется функция int. Например, при выполнении в цикле оператора a(i,j)=int ( 100 x rnd (i)) можно получить целые числа от 0 до 100.

Вывод двумерного массива

Блок-схема решения задачи вывода матрицы размерностью n x m и программа на QBASIC имеют следующий вид:

нет rem ввод матрицы

да Продолжение dim a(l to n, l to m)

for i = 1 to n

for j =1 to m

нет print a(i, j)

next j

да next i

Рис.16

В данном примере при выполнении оператора print a(i, j) каждый элемент матрицы будет печататься на отдельной строке,

Если записать print a (i, j), будет напечатано по 5 элементов в строке.

Если записать print a (i, j); все элементы будут печататься в строчку.

Если программу записать:

rem ввод матрицы

for i = 1 to n

for j =1 to m

print a(i, j)

next j

print

next i

то массив будет распечатан в виде матрицы, оператор print между next j и next i переводит курсор на новую строку.

Вычисление суммы элементов матрицы

Дано: матрица aij i = 1, n, j=l,m.

Определить: сумму элементов матрицы

Фрагмент блок-схемы и программы, вычисляющей сумму, будет следующим:

rem вычисление суммы

элементов матрицы

нет S = 0

да for i=1to n

for j=l to m

s=s+a(i, j)

нет next j

да next i

print s

Рис.17

Вычисление суммы по условию.

Дано: матрица aij i=l, 10 , j=l, 20.

Определить: Среднее значение положительных элементов матрицы, где:

если aij>0

S - сумма положительных элементов матрицы;

К - количество положительных элементов матрицы (счетчик числа

элементов).

Блок-схема и программа (фрагмент):

rem вычисление среднего значения

rem положительных элементов матрицы

k=0: s=0

for i = 1 to 10

нет for j = l to20

да if a(i, j)>0 then

S=S+a(i, j)

K=K+l

нет end if

next j

да next i

нет sr=s/k

да print sr

рис 18.

Нахождение max (min) элемента матрицы

Дано: матрица bij i=l, n j=l,m

Определить: max и min элементы матрицы

max =

max , если bij < max

bij , если bij ≥ max

min =

min , если bij > min

bij , если bij ≤ min

rem нахождение максимального rem и минимального элемента

max= -1 Е 10::min = 1 E 10

да for i = 1 to n

for j =1 to m

if b(i, j) >= max then

нет max=b(i, j)

end if

да if b(i,j)<=min then

нет min=b(i,j)

да end if

next j

next i

нет print max, min

да

Рис.19

Преобразование матриц.

Умножение (деление) строки на число.

Задача. Умножить (разделить) все элементы k-той строки матрицы на число “b”.

Дано: число b,

матрица aij i=1, n; j=l, m

Определить: новую преобразованную матрицу.

Умножение (деление) столбца на число выполняется аналогично

rеm умножение строки на число

input b, k

i=k

for j=1 to m

нет a(i, j)=a(i, j)*b

да next j

for i=l to n

нет for j=1 to m

print a(i, j);

да Продолжение next j

print

next i

нет

да

Рис.20

Сложение (вычитание) строк.

К элементам k-й строки матрицы прибавить элементы строки с номером 1, умноженные на число "b".

Дано: числа b, l, k; матрица аij i=1, n; j=l, m.

Определить: новую преобразованную матрицу.

rem сложение строк по rem условию

нет input b, l, k

да for j =1 to m

a(k, j) = a(k, j) + a(l, j)*b

нет next j

да rem вывод матрицы

Продолжение for i = 1 to n

for j = 1 to m

нет print a (i, j);

next j

да print

next i

Рис.21

Преобразование матрицы в одномерный массив.

Задача.

Переслать элементы матрицы размерности 10x20 в одномерный массив, сохранив порядок следования элементов (элементы матрицы пересылать по строкам.)

Дано: матрица аij i=1, n; j=l, m

Определить:bi i=l , l, где 1=10x20.

rem преобразование

rem матрицы в

rem одномерный массив

нет e= 10*20 :k=l

да for i = 1 to 10

for j = l to 20

нет b(k)=a(i, j)

нет k = k + 1

да next j

да next i

rem ввод одномерного массива

for k = 1 to e

print b(k)

next k

Рис.22

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

Дано: матрица аij i=l, n;j=l,k

матрица bij i=1, k; j=1, m.

Определить

i = 1, n

j = 1, m

нет

rem умножение

да матрицы на матрицу

for i=l to n

for j=l to m

нет S=0

for l=l to k

нет S = S + a(i,j)*b(l,j)

next 1

c(i, j)=S

next j

next i

нет

да

Рис.23

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

Дано: матрица аij i=l,n;j=l,m

вектор bj j=1,m

Определить

нет rem умножение матрицы на вектор

for i=l to n

да S=0

for j=l to m

S=S+a(i, j) x b(j)

next j

c(i)=S

нет next i

да

рис 24.

Перестановка строк матрицы

Дано: матрица aij i=l, n;j=l,m

Переставить строки с номером р и q.