Занятие 21
Тема: Процедуры, определенные пользователем
Цели: 1. Научиться создавать процедуры пользователя в объектно-ориентированной среде программирования.
2. Использовать подпрограммы, созданные пользователем в событийных процедурах.
3. Развивать логическое мышление.
Актуализация:
- Дайте понятие термину подпрограмма.
- Какие бывают подпрограммы?
- Чем функция отличается от процедуры?
- Локальные и глобальные переменные.
Подпрограмма - это отдельная функционально независимая часть программы.
Подпрограммы решают три важные задачи:
- избавляют от необходимости многократно повторять в тексте программы аналогичные фрагменты;
- улучшают структуру программы, облегчая ее понимание;
- повышают устойчивость к ошибкам программирования и непредвиденным последствиям при модификациях программы.
В подпрограмму может выделяться любой законченный фрагмент программы. В качестве ориентиров просмотрите следующие рекомендации:
- Когда Вы несколько раз перепишете в программе одну и ту же последовательность команд, необходимость введения подпрограммы приобретает характер острой внутренней потребности.
- Иногда слишком много мелочей заслоняют главное. Полезно убрать в подпрограмму подробности, скрывающие смысл основной программы.
- Полезно разбить длинную программу на составные части - просто как книгу разбивают на главы. При этом основная программа становится похожей на оглавление.
- Бывают сложные частные алгоритмы. Полезно отладить их отдельно в небольших тестирующих программах. Включение отлаженных алгоритмов в основную программу будет легким, если они оформлены как подпрограммы.
- Все, что Вы сделали хорошо в одной программе, Вам захочется перенести в новые. Для повторного использования таких частей лучше сразу выделять в программе полезные алгоритмы в отдельные подпрограммы.
Подпрограммы могут быть стандартными, т.е. определенными системой, и собственными, т.е. определенными программистом.
Стандартная подпрограмма (процедура или функция) - подпрограмма, включенная в библиотеку программ, доступ к которой обеспечивается средствами языка программирования. Вызывается подпрограмма по имени с заданием фактических параметров. Типы фактических параметров должны соответствовать типам формальных параметров, указанным при описании данной процедуры в библиотечке процедур и функций.
Для закрепления материала разработаем алгоритм решения задачи, используя пользовательские процедуры.
Задача: Даны две двумерные квадратные целочисленные матрицы. Найти средние арифметические значения положительных, отрицательных и всех элементов каждой из матриц. А также максимальный и минимальный элементы и сумму элементов каждой матрицы.
Public Class Form1
Dim m1(,), m2(,) As Integer
Dim n1, n2 As Integer
Private Sub inicial(ByVal m(,) As Integer, ByVal n As Integer, ByVal lab As Object)
'инициализация и вывод матрицы
Dim i, j As Integer
lab.text = ""
For i = 1 To n
For j = 1 To n
m(i, j) = Int(Rnd() * 20 - i - Rnd(10) * j * 0.56)
lab.Text = lab.Text + Format(m(i, j), "0 ")
Next
lab.Text = lab.Text + vbCrLf
Next
End Sub
Private Sub sredn_pol(ByVal m(,) As Integer, ByVal n As Integer, ByVal lab As Object)
'среднее арифметическое положительных элементов
Dim i, j, sum, k As Integer
Dim sr As Double
For i = 1 To n
For j = 1 To n
If m(i, j) > 0 Then
sum = sum + m(i, j)
k = k + 1
End If
Next
Next
sr = sum / k
lab.text = Format(sr, " 0.00 ")
End Sub
Private Sub sredn_otr(ByVal m(,) As Integer, ByVal n As Integer, ByVal lab As Object)
'среднее арифметическое отрицательных элементов
Dim i, j, sum, k As Integer
Dim sr As Double
For i = 1 To n
For j = 1 To n
If m(i, j) < 0 Then
sum = sum + m(i, j)
k = k + 1
End If
Next
Next
sr = sum / k
lab.text = Format(sr, " 0.00 ")
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'матрица 1
n1 = Int(InputBox("размерность массива", "двумерный массив", "5"))
ReDim m1(0 To n1, 0 To n1)
inicial(m1, n1, Label1)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
'матрица 2
n2 = Int(InputBox("размерность массива", "двумерный массив", "4"))
ReDim m2(0 To n2, 0 To n2)
inicial(m2, n2, Label2)
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Randomize()
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
'среднее арифметич. положительных матрица 1
sredn_pol(m1, n1, Label3)
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
'среднее арифметич. положительных матрица 2
sredn_pol(m2, n2, Label4)
End Sub
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
'среднее арифметич. отрицательных матрица 1
sredn_otr(m1, n1, Label5)
End Sub
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
'среднее арифметич. отрицательных матрица 2
sredn_otr(m2, n2, Label6)
End Sub
End Class
Контрольные вопросы:
- В каких случаях целесообразно применять процедуры без параметров?
- Какие преимущества предоставляют подпрограммы с параметрами?
- Каковы правила передачи параметров-переменных?
- Можно ли применять в одной подпрограмме несколько параметров-переменных различных типов?