Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Final-LabRabKonsPrilozh_2011_Word2007

.pdf
Скачиваний:
145
Добавлен:
08.04.2015
Размер:
1.83 Mб
Скачать

31

21

Составить алгоритм замены элементов

массива В из N чисел

 

следующим образом: числа, попадающие в интервал [а, b],

 

уменьшить вдвое,

а остальные –

увеличить вдвое. Вывести на

 

печать исходный массив В и результирующий массив.

 

 

22

Имеется массив Р из N целых чисел. Составьте алгоритм

 

вычисления произведения отрицательных и положительных

 

элементов массива.

 

 

 

 

23

В массиве К из N целых чисел определить сумму всех тех

 

элементов, значения которых превышают среднее значение.

 

 

24

В массиве С из N целых чисел все нулевые элементы заменить

 

максимальным элементом. Вывести на печать исходный массив С

 

и результирующий массив Т.

 

 

 

 

25

Имеется массив А из N вещественных чисел. Определить число

 

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

 

 

26

В произвольно заданном одномерном массиве определить

 

элемент, сумма которого с первым элементом максимальна.

 

 

27

Имеется массив Р из N целых чисел. Составьте алгоритм замены

 

всех элементов массива, меньших 10, единицей, а если есть

 

элемент массива больше 10, то ничего не менять.

 

 

28

Имеется массив K из N вещественных чисел. Составьте алгоритм

 

такой задачи: если первый элемент массива положителен, то

 

каждый

второй

элемент массива

заменить числом 50, иначе

 

выдать сообщение: «все без перемен».

 

 

 

29

Имеется массив Т из N целых чисел. Составьте алгоритм

 

подсчета, сколько раз число t встречается среди элементов

 

данного

массива,

в противном

случае

вывести сообщение:

 

«элементов t в массиве нет».

 

 

 

 

30

В массиве В из N целых чисел определить количество всех

 

элементов, значения которых меньше среднего значения всех

 

элементов массива.

 

 

 

 

 

 

 

 

32

ЛАБОРАТОРНАЯ РАБОТА №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.

33

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

Начало

Ввод N, M

Ввод (N+1)*(M+1) элементов

AMAXN=A(N,0) – присвоить начальное значение переменной AMAXN

i= 0, M, 1

Нет

AMAXN < A(N,i)

Да

AMAXN=A(N,i)

Вывод AMAXN

1

34

1

i= 0, N, 1

B(i)=0

– присвоить начальное значение

элементу B(i) для накопления суммы

i-ой строки матрицы A()

j= 0, M, 1

B(i)=B(i) + A(i, j)

– увеличить значение элемента B(i) на

величину A(i, j) очередного элемента

i-ой строки матрицы A()

Вывод B( i )

2

35

2

j= 0, M, 1

D(j)=0

– присвоить начальное значение

элементу D(j) для накопления суммы

j-го столбца матрицы A()

i= 0, N, 1

D(j)=D(j) + A(i, j)

– увеличить значение элемента D(j) на

величину A(i,j) очередного элемента

j-го столбца матрицы A()

Вывод D(j)

Конец

Рис. 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}}

36

Явный способ задания двумерного массива А(,) с вещественными (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("")

37

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. Процедуры и функции применяются для выполнения повторяющихся задач и их можно вызывать из разных частей кода, поэтому их можно использовать в качестве элементарных структурных блоков при создании приложения. Структурирование кода с помощью процедур позволяют разбить программу на отдельные логические блоки. Отлаживать такие отдельные блоки легче, чем всю программу целиком. Кроме того, процедуры,

38

разработанные для одной программы, можно в том же виде (или после внесения незначительных изменений) использовать в другой программе. Это помогает избежать дублирования кода.

Процедура - это некий блок кода, который будет выполняться всякий раз при вызове этой процедуры. Каждая процедура начинается зарезервированным словом 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 ("Первая процедура").

39

Результатом выполнения такой процедуры будет вывод на экран сообщения: "Первая процедура". Здесь вызывается процедура 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.

40

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

Начало

Ввод N, M

Ввод (N+1)*(M+1)

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

Создание массивов B(N), D(M)

Вызов подпрограммы – функции FMAXN(N,M,A)

Вывод результирующего значения функции FMAXN

Вызов процедуры BSUM(N,M,A,B)

Вывод (N+1) значений элементов массива B()

Вызов процедуры

DSUM (N,M,A,D)

Вывод (M+1) значений элементов массива D()

Конец

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