Пример 1
Лекция 11
Заданы два одномерных массива a(1), a(2), … , a(k) и b(1), b(2), … , b(l). Центрировать и вывести массив а, если среднее значение его элементов меньше среднего значения элементов массива b. В противном случае центрировать и вывести массив b. Каждый элемент центрированного массива получается как разность значения соответствующего элемента исходного массива и среднего значения его элементов.
Сначала следует разбить задачу на отдельные подзадачи, для решения каждой из которых мы предусмотрим отдельную процедуру или функцию. При формулировании подзадачи требуется правильно составить список аргументов, а также правильно задать тип каждого аргумента. Подобные навыки можно получить только опытным путем.
Перечень подзадач.
1. Ввод одномерного массива x. Применим уже знакомую нам процедуру: Ввод_вектора (x() As Single).
2. Вычисление для одномерного массива x, имеющего imax элементов, среднего значения его элементов. Применим функцию:
Среднее(x() As Single, imax As Integer) As _ Single.
3. Центрирование одномерного массива x, имеющего imax элементов. Применим процедуру:
ЦенирированиеВектора (x() As Single, imax As _ Integer, Вычитаемое As Single).
4. Вывод одномерного массива x. Применим процедуру: Вывод_вектора (x() As Single).
![]() |
Рис. 11.1. Укрупненная блок-схема основного алгоритма |
Укрупненная блок-схема основного алгоритма
Укрупненная блок-схема основного алгоритма приведена на рис. 11.1. Алгоритмы подзадач 2, 3 и 4 характеризуются простотой, что позволяет обойтись без составления их блок-схем. Основой всех этих трех алгоритмов является простой цикл.
Интерфейс проекта
Воспользуемся тем же интерфейсом проекта, который был применен для примеров, рассмотренных в предыдущих лекциях (подробнее).
Исходный текст программы
Option Explicit
Option Base 1
Private Sub Command1_Click()
Dim k As Integer, l As Integer
Dim a() As Single, b() As Single
Cls
k = InputBox("k=?")
l = InputBox("l=?")
Print "k= "; k; " l= "; l
ReDim a(k), b(l)
Print "Ввод вектора а"
Ввод_вектора a
Ввод_вектора b
Dim СреднееА As Single, СреднееВ As Single
СреднееА = Среднее(a, k)
СреднееВ = Среднее(b, l)
If СреднееА < СреднееВ Then
ЦентрированиеВектора a, k, СреднееА
Print "Центрированный вектор а"
Вывод_вектора a
Else
ЦентрированиеВектора b, l, СреднееВ
Print "Центрированный вектор b"
Вывод_вектора b
End If
End Sub
Private Sub Ввод_вектора(x() As Single)
1: Dim i As Integer
Dim i_min As Integer
Dim i_max As Integer
i_min = LBound(x)
5: i_max = UBound(x)
For i = i_min To i_max
x(i) = InputBox("Элемент вектора (" _
& i & ")=?",”Ввод вектора”)
Print x(i),
Next
End Sub
Private Function Среднее(x() As Single, _
imax As Integer) As Single
Dim sum As Single, i As Integer
sum = 0
For i = 1 To imax
sum = sum + x(i)
Next
Среднее = sum / imax
End Function
Private Sub ЦентрированиеВектора(x() As Single, _
imax As Integer, Вычитаемое As Single)
Dim i As Integer
For i = 1 To imax
x(i) = x(i) - Вычитаемое
Next
End Sub
Private Sub Вывод_вектора(x() As Single)
1: Dim i As Integer
Dim i_min As Integer
Dim i_max As Integer
i_min = LBound(x, 1)
5: i_max = UBound(x, 1)
For i = i_min To i_max
Print x(i),
Next
End Sub