
- •Москва 2009 Введение
- •Циклические вычислительные процессы с известным числом повторений.
- •1.Табулирование функции
- •2. Суммирование, вычисление произведения.
- •Построение графика
- •Табулирование функций, нахождение максимума и минимума
- •Вычисление суммы бесконечного ряда (циклы с неизвестным числом повторений)
- •Пример оформления лабораторной работы.
- •Нахождение суммы бесконечного ряда.
- •Работа с массивами
- •Лабораторная работа №3 Одномерные массивы
- •1. Суммирование элементов массива
- •2.Поэлементное суммирование двух массивов
- •3.Суммирование по условию
- •4.Поиск максимального (минимального) элемента в массиве.
- •5.Удаление элемента из массива
- •6. Включение элемента в заданную позицию массива
- •7.Получение нового массива из данного
- •Задачи для самостоятельного решения. Задание 1
- •Задание 2
- •Задание 3
- •Задание 4
- •Задание 5
- •13. Найти сумму элементов массива х
- •Двумерные массивы
- •1Способ: с использованием вспомогательной переменной т.
- •2 Способ: с использованием вспомогательного массива с.
- •3 Способ.
- •Задание 2
Двумерные массивы
При решении задач с использованием двумерных массивов, так же как и при решении задач с одномерными массивами, можно определить следующие модули: ввод массива, операции с массивом, вывод массива.
Рассмотрим эти модули для двумерного массива.
Ввод матрицы
Пример:
Ввести двумерный массив действительных чисел, состоящий из 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
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 = |
|
| |
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
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.