Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Лабораторная работа №5




 

Тема: Двумерные массивы. Подпрограммы: внешние функции и процедуры.

Цель работы: овладеть навыками программирования с использованием двумерных массивов; научиться основам модульного программирования.

 

Задание

I уровень (варианты №№ 1 - 9 из Перечня вариантов)

1. Составить блок-схему выполнения задания (без подпрограмм).

2. Написать программу в соответствии с блок – схемой.

3. Выполнить программу и получить результаты.

 

II уровень (варианты №№ 10 - 26 из Перечня вариантов)

1. Составить блок-схему алгоритма преобразования матрицы двумя модулями: головным модулем и процедурой SUB, или головным модулем и модулем-функцией FUNCTION.

2. Написать программу в соответствии с блок – схемой.

3. Выполнить программу и получить результаты.

 

III уровень (варианты №№ 27 - 30 из Перечня вариантов)

1. Составить блок-схему алгоритма преобразования матрицы тремя модулями: головным модулем, модулем-функцией FUNCTION и процедурой SUB.

2. Написать программу в соответствии с блок – схемой.

3. Выполнить программу и получить результаты.

 

Пример:

Дана матрица A(N,M).

1. Найти наибольший элемент в последней строке матрицы A.

2. Определить массив B(N), элементы которого равны суммам соответствующих строк матрицы A.

3. Определить массив D(M), элементы которого равны суммам соответствующих столбцов матрицы A.

Порядок выполнения работы (I уровень)

1. Входные данные:

(N+1) – количество строк матрицы A, (M+1) – количество столбцов матрицы A,

A(,) – двумерный массив из (N+1)*(M+1) элементов.

Выходные данные:

AMAXN - наибольший элемент в последней строке матрицы A, B() - массив, элементы которого равны суммам соответствующих строк матрицы A, D() - массив, элементы которого равны суммам соответствующих столбцов матрицы A.

2. Блок-схема (рис. 5.1)

 

 

Да
Вывод AMAXN
 
AMAXN=A(N,i)
AMAXN < A(N,i)
Нет
AMAXN=A(N,0) – присвоить начальное значение переменной AMAXN
Ввод N, M
Начало
Ввод (N+1)*(M+1) элементов матрицы A
i= 0, M, 1

 

 

 
B(i)=0 – присвоить начальное значение элементу B(i) для накопления суммы i -ой строки матрицы A()
B(i)=B(i) + A(i, j) – увеличить значение элемента B(i) на величину A(i, j) очередного элемента i -ой строки матрицы A()
Вывод B(i)
 
i= 0, N, 1
j= 0, M, 1

 

 
D(j)=0 – присвоить начальное значение элементу D(j) для накопления суммы j -го столбца матрицы A()
D(j)=D(j) + A(i, j) – увеличить значение элемента D(j) на величину A(i,j) очередного элемента j -го столбца матрицы A()
Вывод D(j)
Конец
j= 0, M, 1
i= 0, N, 1

 


Рис. 5.1. Блок – схема программы

 

3. Текст программы:

 

Module Module1

‘ Заголовок программной секции, относящейся к категории программных модулей

 

Sub Main()

‘ Заголовок программной секции, относящейся к категории головного модуля программы

Dim N, M, I, J As Integer

Dim A(,) As Single = {{7,-1,2,0},{4,5,-3,1},{-6,11,8,-4}}

‘ Явный способ задания двумерного массива А(,) с вещественными (Single) элементами, значения которым присваиваются после символа = построчно, то есть три строки по 4 элемента в каждой

N = A.GetUpperBound(0)

‘ Параметру N присвоено значение верхней границы 1-ой (0) размерности двумерного массива А(,)

M = A.GetUpperBound(1)

‘ Параметру M присвоено значение верхней границы 2-ой (1) размерности двумерного массива А(,)

Console.WriteLine("N={0} M={1}", N, M)

‘ Вывод значений параметров N и M

Console.WriteLine("Количество строк матрицы A равно N+1={0}", N + 1)

Console.WriteLine("Количество столбцов матрицы A равно M+1={0}", M + 1)

‘Количество строк и столбцов матрицы A равны, соответственно, N+1 и M+1, так как стандартная нумерация элементов ведется для строк с 0 до N-1, для столбцов – с 0 до M-1.

Dim B(N), D(M) As Single

Dim Z As Single

Dim AMAXN As Single

I = 0: AMAXN = A(N, I)

‘ Параметру AMAXN присваивается начальное значение, равное значению элемента матрицы A(,), расположенному в N-ой строке и 0-ом столбце

For I = 0 To M

If AMAXN < A(N, I) Then AMAXN = A(N, I)

Next I

Console.WriteLine("")

Console.WriteLine("НАИБОЛЬШИЙ ЭЛЕМЕНТ ПОСЛЕДНЕЙ СТРОКИ AMAXN ={0}", AMAXN)

Console.WriteLine("")

Console.WriteLine("МАССИВ ЗНАЧЕНИЙ СУММ СТРОК МАТРИЦЫ A():")

For I = 0 To N

B(I) = 0

For J = 0 To M

B(I) = B(I) + A(I, J)

Next J

Console.WriteLine("B({0})={1}", I, B(I))

Next I

Console.WriteLine("")

Console.WriteLine("МАССИВ ЗНАЧЕНИЙ СУММ СТОЛБЦОВ МАТРИЦЫ A():")

For J = 0 To M

D(J) = 0

For I = 0 To N

D(J) = D(J) + A(I, J)

Next I

Console.WriteLine("D({0})={1}", J, D(J))

Next J

Console.ReadLine()

End Sub

‘ Конец текста программы головного модуля

 

End Module

‘ Конец программной секции, относящейся к категории программных модулей

 

4. Результаты работы программы представлены на рис. 5.2.

 


Рис. 5.2. Скриншот результатов работы программы

 

Порядок выполнения работы (II-III уровни)

 

Задание II – III уровней требует использования в программе функции FUNCTION и/или процедуры SUB. Процедуры и функции применяются для выполнения повторяющихся задач и их можно вызывать из разных частей кода, поэтому их можно использовать в качестве элементарных структурных блоков при создании приложения. Структурирование кода с помощью процедур позволяют разбить программу на отдельные логические блоки. Отлаживать такие отдельные блоки легче, чем всю программу целиком. Кроме того, процедуры, разработанные для одной программы, можно в том же виде (или после внесения незначительных изменений) использовать в другой программе. Это помогает избежать дублирования кода.

Процедура - это некий блок кода, который будет выполняться всякий раз при вызове этой процедуры. Каждая процедура начинается зарезервированным словом Sub и заканчивается End. Вот общий синтаксис процедуры:

 

Sub name [(список_аргументов)]

[здесь некий код]

[Exit Sub]

[здесь тоже может быть некий код]

End Sub

 

Всё, что заключено в квадратные скобки - является необязательным. Процедура возвращает управление вызывающему коду после завершения работы оператором End Sub или Exit Sub (досрочный выход из процедуры).

В большинстве случаев процедуре необходимо работать с различными данными при каждом ее вызове. Можно передать эти сведения в процедуру как часть вызова процедуры. Процедура определяет ноль или более параметров, каждый из которых представляет значение, ожидаемое ею для приема. Каждому параметру в определении процедуры соответствует аргумент в вызове процедуры. Аргумент представляет значение, которое передается соответствующему параметру в вызове данной процедуры. Список аргументов представляет собой набор элементов, каждый из которых имеет следующий вид:

 

[ByVal | ByRef] varname[()] [As type]

 

Здесь указаны:

- способ передачи значений аргументов (ByVal – передача значения аргумента, ByRef – передача указателя на адрес памяти, по которому размещается значение или массив значений аргумента),

- Varname – имя передаваемого аргумента,

- As type – тип данных, в соответствии с которым можно интерпретировать переданные значения аргументов.

Пример описания процедуры показан ниже:

 

Sub ShowMessage(message As String)

MsgBox message

End Sub

 

Здесь указано имя процедуры ShowMessage, содержащей один параметр с именем message, у которого тип данных String соответствует понятию текстовая строка.

Для вызова процедуры используется оператор Call. Пример вызова процедуры ShowMessage с одним параметром показан ниже:

 

Call ShowMessage ("Первая процедура").

Результатом выполнения такой процедуры будет вывод на экран сообщения: "Первая процедура". Здесь вызывается процедура ShowMessage, которой передаётся строка "Первая процедура". Фактически в процедуре происходит присвоение переменной message значения "Первая процедура". Далее происходит вызов функции MsgBox и вывод сообщения на экран. Если количество параметров, передаваемых при вызове процедуры не совпадёт с количеством параметров в объявлении процедуры, то Visual Basic сгенерирует ошибку.

 

Функция - это некий блок кода, который будет возвращать значение. Этим, и только этим функции отличаются от процедур. Общий синтаксис функции:

 

Function имя функции (список_аргументов)] [As type]

[здесь некий код]

[имяфункции = выражение]

[Exit Function]

[здесь тоже может быть некий код]

[имяфункции = выражение]

End Function

 

Пример описания функции показан ниже:

 

Function Square(number As Integer) As Long

Square = number * number

End Function

 

Вызвать функцию можно так:

 

b = Square (5).

 

Здесь функция Square возвращает квадрат переданного ей параметра (значение переменной b будет равно 25).

 

1. Входные данные: двумерный массив A (N,M).

Выходные данные: наибольший элемент (AMAXN) в последней строке матрицы A, массив B (), элементы которого равны суммам соответствующих строк матрицы A, массив D (), элементы которого равны суммам соответствующих столбцов матрицы A.

 

2. Глобальная блок-схема.

Ввод N, M
Начало
Ввод (N+1)*(M+1) элементов матрицы A
Вызов процедуры BSUM(N,M,A,B)
Вывод результирующего значения функции FMAXN
Вызов подпрограммы – функции FMAXN(N,M,A)
Вывод (N +1) значений элементов массива B()
Создание массивов B(N), D(M)
Вызов процедуры DSUM (N,M,A,D)
Вывод (M +1) значений элементов массива D()
Конец

 

 


Рис. 5.3. Блок-схема с использованием функций и процедур

3. Текст программы.

 

Module Module1

‘ Заголовок программной секции, относящейся к категории программных модулей

Sub Main()

‘ Заголовок программной секции, относящейся к категории головного модуля программы

Dim N, M, I, J As Integer

Dim A(,) As Single = {{7,-1,2,0}, {4,5,-3,1}, {-6,11,8,-4}}

‘ Явный способ задания двумерного массива А(,) с вещественными (Single) элементами, значения которым присваиваются после символа = построчно, то есть три строки по 4 элемента в каждой

N = A.GetUpperBound(0)

‘ Параметру N присвоено значение верхней границы 1-ой (0) размерности двумерного массива А(,)

M = A.GetUpperBound(1)

‘ Параметру M присвоено значение верхней границы 2-ой (1) размерности двумерного массива А(,)

Console.WriteLine("N={0} M={1}", N, M)

Console.WriteLine("Количество строк матрицы A равно N+1={0}", N + 1)

Console.WriteLine("Количество столбцов матрицы A равно M+1={0}", M + 1)

‘Количество строк (K1) и столбцов (K2) матрицы A равны, соответственно, N+1 и M+1, так как стандартная нумерация элементов ведется для строк с 0 до K1-1, для столбцов – с 0 до K2-1.

Dim B(N), D(M) As Single

Dim Z As Single

Z = AMAXN(N, M, A)

‘ Осуществляется обращение к процедуре – функции AMAXN(N, M, A)

Console.WriteLine("")

Console.WriteLine("НАИБОЛЬШИЙ ЭЛЕМЕНТ ПОСЛЕДНЕЙ СТРОКИ AMAXN ={0}", Z)

Console.WriteLine("")

Console.WriteLine("МАССИВ ЗНАЧЕНИЙ СУММ СТРОК МАТРИЦЫ A():")

Call BSUM(N, M, A, B)

‘ Осуществляется обращение к процедуре BSUM(N, M, A, B)

For I = 0 To N

Console.WriteLine("B({0})={1}", I, B(I))

Next I

Console.WriteLine("")

Console.WriteLine("МАССИВ ЗНАЧЕНИЙ СУММ СТОЛБЦОВ МАТРИЦЫ A():")

Call DSUM(N, M, A, D)

‘ Осуществляется обращение к процедуре DSUM(N, M, A, D)

For J = D.GetLowerBound(0) To M

Console.WriteLine("D({0})={1}", J, D(J))

Next J

Console.ReadLine()

EndSub

 

Function AMAXN(ByRef N As Integer, ByRef M As Integer, _

ByRef A(,) As Single) As Single

‘ Заголовок процедуры – функции AMAXN(N, M, A), при обращении к которой все аргументы (N, M, A) передаются по ссылке (ByRef), а сама функция возвращает в качестве результата вещественное число (Single)

Dim J As Integer

Dim MAX As Single

MAX = A(N, 0)

For J = 0 To M

If A(N, J) > MAX Then MAX = A(N, J)

Next J

AMAXN = MAX

‘ Осуществляется формирование результирующего значения функции AMAXN

EndFunction

‘ окончание текста программы для процедуры – функции

 

Sub BSUM(ByRef N As Integer, ByRef M As Integer, _

ByRef A(,) As Single, ByRef B() As Single)

‘ Заголовок процедуры BSUM(N, M, A, B), при обращении к которой все аргументы (N, M, A, B) передаются по ссылке (ByRef)

Dim I, J As Integer

Dim S As Single

For I = 0 To N

S = 0

‘ Переменной S присваивается начальное значение, равное 0.

For J = 0 To M

S = S + A(I, J)

‘ Значение переменной S увеличивается на величину, равную значению элемента A(I, J)

Next J

B(I) = S

‘ Элементу B(I) массива B() присваивается значение переменной S.

Next I

EndSub

‘ окончание текста программы для процедуры BSUM(N, M, A, B)

 

Sub DSUM(ByRef N As Integer, ByRef M As Integer, _

ByRef A(,) As Single, ByRef D() As Single)

‘ Заголовок процедуры DSUM(N, M, A, D), при обращении к которой все аргументы (N, M, A, D) передаются по ссылке (ByRef)

Dim I, J As Integer

Dim S As Single

For J = A.GetLowerBound(1) To M

S = 0

‘ Переменной S присваивается начальное значение, равное 0.

For I = A.GetLowerBound(0) To N

S = S + A(I, J)

‘ Значение переменной S увеличивается на величину, равную значению элемента A(I, J)

Next I

D(J) = S

‘ Элементу D(I) массива D() присваивается значение переменной S.

Next J

EndSub

‘ окончание текста программы для процедуры DSUM(N, M, A, D)

 

 

EndModule

‘ Конец программной секции, относящейся к категории программных модулей

 

4. Результаты работы программы аналогичны представленным на рис. 5.2.

 

Перечень вариантов заданий к лабораторной работе № 5

Вариант № 1

Дана матрица

А =

Определить количество отрицательных и положительных элементов.

Вариант № 2

Дана матрица. Определить сумму элементов, стоящих на главной и побочной диагоналях.

В =

Вариант № 3

Дана квадратная матрица М. Найти сумму и произведение элементов, попадающих в заданный интервал [ a, b ].

М =

Вариант № 4

Дана матрица. Найти сумму элементов первой строки и первого столбца.

Z =

Вариант № 5

Дана матрица В. Найти сумму элементов j -го столбца.

В =

Вариант № 6

Найти максимальный элемент матрицы и индексы максимального элемента.

Z =

Вариант № 7

Дана матрица

А =

Определить среднее арифметическое отрицательных и положительных элементов.

Вариант № 8

Дана матрица С. Найти сумму отрицательных элементов и количество положительных.

С =

Вариант № 9

Найти минимальный элемент матрицы и его индексы.

Z =

Вариант № 10

Дана матрица A. Получить новую матрицу В, элементы которой определяются по формуле bij = А =

Вариант № 11

Дана квадратная матрица

Z =

Транспонировать матрицу, т. е. получить новую матрицу A, где столбцы матрицы Z является строками, а строки – столбцами.

Вариант № 12

Даны матрицы

X = Y =

Получить матрицу Z, элементы которой равны .

Вариант № 13

Дана единичная матрица E

E =

Найти элементы новой матрицы B, каждый из которых определяется условием:

bij=

Вариант № 14

Дана единичная матрица

Е =

Получить новую матрицу Z, каждый элемент которой определяется заданным условием:

zij =

Вариант № 15

Даны квадратные матрицы А, В, С второго порядка. Получить матрицу D, элементы которой равны dij = (aij+bij)*cij

A = B = C =

Вариант № 16

Дана квадратная матрица

Z =

Выбрать максимальный элемент в третьей строке, составить новую матрицу, каждый элемент которой равен соответствующему элементу матрицы Z, деленному на полученный максимальный элемент.

Вариант № 17

Дана матрица А =

Найти вектор В, каждая компонента которого совпадает с произведением элементов соответствующей строки матрицы А. Вектор B вывести на экран в строку.

Вариант № 18

Даны две матрицы

X = Y =

Найти наибольший элемент среди элементов матриц X и Y.

Вариант № 19

Дана квадратная матрица А.

Получить матрицу В, элементы которой определяются как bij = aij2 – i*j.

В матрице B найти минимальный элемент.

Вариант № 20

Дана квадратная матрица A =

Найти минимальный элемент, стоящий на главной диагонали (amin); получить новую матрицу В, каждый элемент которой равен bij = aij + аmin.

Вариант № 21

Дана матрица С =

Найти вектор К, каждая компонента которого равна количеству положительных элементов соответствующей строки матрицы С.

Вариант № 22

Дана квадратная матрица Z

Найти максимальный элемент первой строки (zmax) и получить новую матрицу Y, каждый элемент которой равен yij = zij - zmax.

Вариант № 23

Дана квадратная матрица X =

Найти вектор Y, каждая компонента которого равна количеству отрицательных элементов соответствующего столбца матрицы X.

Вариант № 24

Даны две матрицы X и Y

Выбрать из них наименьший элемент.

Вариант № 25

Дана матрица

Выбрать наибольший элемент (max) и получить новую матрицу В, каждый элемент которой равен bij = max - aij

Вариант № 26

Дана матрица Найти наименьший элемент матрицы (min) и получить новую матрицу D, каждый элемент которой равен .

Вариант № 27

Дана квадратная матрица М. Найти сумму элементов S, расположенных в заштрихованной части. Получить новую матрицу С, каждый элемент которой

Вариант № 28

Дана квадратная матрица С. Найти произведение элементов, расположенных в заштрихованной части матрицы. Подсчитать сколько элементов больше 5 в заштрихованной части матрицы.

С =

Вариант № 29

Дана матрица А. Получить матрицу В, элемент bi j которой равен результату деления суммы элементов матрицы A, расположенных в заштрихованной области, на aij.

    aij  

Вариант № 30

Дана квадратная матрица Z. Найти сумму элементов, расположенных в заштрихованной части матрицы.

Получить новую матрицу Y, каждый элемент которой равен разности между найденной суммой и элементом матрицы Z.

 





Поделиться с друзьями:


Дата добавления: 2014-12-17; Просмотров: 1406; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.2 сек.