Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Основы алгоритмизации и программирования. Часть 1. Учебное пособие
.pdf
Рис. 1.12
Sub задание5а()
'Объявление целой переменной k
'и m - с плавающей точкой
Dim k As Integer
Dim m As Single
'Ввод m
m = InputBox("Вводите m>0")
k = 0
'Цикл с предусловием
While 4 ^ k < m
k = k + 1
End While
'Вывод k
MsgBox("k= " & k)
End Sub
Да
Нет
k := 0
k := k + 1
Вывод k
Конец
4k < m
Ввод m
Начало
а
б
а
б
Рис. 1.13
Sub задание5б()
'Объявление целой переменной k
'и m - с плавающей точкой
Dim k As Integer
Dim m As Single
'Ввод m
m = InputBox("Вводите m>0")
k = 0
'Цикл с постусловием
Do
k = k + 1
Loop Until 4 ^ k < m
'Вывод k
MsgBox("k= " & k)
End Sub
Да
Нет
k := 0
k := k + 1
Вывод k
Конец
4k < m
Ввод m
Начало
31

ЗАДАНИЕ 6
а
б
Рис. 1.14
Sub задание6()
'Объявление целых переменных i,j,N
'и массива a, содерж. целые значения
Dim i, N, S As Integer
Dim a(N) As Integer
'Ввод размерности массива
N = InputBox("Вводите N")
'Переопределение массива а
ReDim a(N)
'Использование цикла с параметром
'для заполнения массива вручную
For i = 1 To N
a(i) = InputBox("a=(" & i & ")")
Next i
'Расчет среднего арифметического
'элементов массива
S = 0
For i = 1 To N
S = S + a(i)
Next i
S = S / N
MsgBox("S= " & S)
End Sub
Начало
Ввод N
i = 1,N
Конец
S := 0
Ввод a(i)
i = 1,N
S := S + a(i)
S := S / N
Ввод S
Вручную заполните целыми числами массив {ai}, i = 1, 2, …, N и
рассчитайте среднее арифметическое значение его элементов в процедуре
задание6().
ТЕХНОЛОГИЯ РАБОТЫ
1. Перерисуйте в тетрадь блок-схему на рис. 1.14, а, а затем приступите
к набору процедуры на рис. 1.14, б.
32

ЗАДАНИЕ 7
Sub primer5_1_22()
'Объявление целых переменных i,j,N
'и массива a типа Integer
Dim i, j, N, min As Integer
Dim a(N, N) As Integer
'Ввод размерности массива
N = InputBox("Вводите N")
'Переопределение массива а
ReDim a(N, N)
'Использование двойного цикла с пара
'метрами для заполнения матрицы с
'помощью генератора случайных чисел
'и вывод заполненной матрицы
For i = 1 To N
For j = 1 To N
a(i, j) = Rnd() * 99 + 1
MsgBox("a=("&i&")"&"("&j&")="&a(i,j))
Next j
Next i
'Определение миним. элемента матрицы
min = a(1, 1)
For i = 1 To N
For j = 1 To N
If min > a(i,j) Then min=a(i,j)
Next j
Next i
MsgBox("min = " & min)
End Sub
Начало
Ввод N
i = 1, N
Конец
min := a(i,j)
Вывод
a(i,j)
Ввод min
j = 1, N
S := 0
i = 1, N
j = 1, N
min := a(i,j)
min>a(i,j)
а
б
Рис. 1.15
При помощи датчика случайных чисел Rnd заполните целыми числами
от 1 до 100 квадратную матрицу {aij}, i = 1, 2, …, N, j = 1, 2, …, N, с N
строками и N столбцами в процедуре задание7().
ТЕХНОЛОГИЯ РАБОТЫ
1. Перерисуйте в тетрадь блок-схему на рис. 1.15, а, а затем приступите
к набору процедуры на рис. 1.15, б.
33

2. Проверьте работу программы при N = 2, 3, 4.
3. Самостоятельно составьте блок-схему, наберите и исполните
программу для решения следующего примера: найти, сколько положительных
элементов Np(i) содержит матрица {aij}, где i = j = 1, 2, …, 4, в строке i = 2 и
столбце j = 4.
Указание: воспользуйтесь примерами 1.3, в и 1.5.
4. Выполните третью группу самостоятельных задач индивидуального
варианта из табл. 1.8.
Задачи для самостоятельной работы № 3
На основании алгоритмов, выполненных на псевдокоде, составить
процедуры на Basic и определить значение переменной S.
1. а) S := 128 б) a := 1
нц для i = 3 до 6 b := 1
если mod(i, 3) = 0, то нц пока a+b < 5
S := S - 3 a := a + 1
всё b := b + 1
кц i кц S := a + b
2. а) i := 0 б) S := 0
S := 0 нц для i = 4 To 1 step -1
нц пока i < 3 если mod(i, 2) = 0, то
i := i + 1 S := S + 1 / i
S := S + i всё
кц кц i
3. а) i := 1 б) S := 0
S := 0 нц для i = 1 до 2
j := 4 нц для j = 2 до 3
нц пока i < j S := S + i + j
S := S + i * j кц j
i := i + 1 кц i
кц
34

4. Найти наибольший элемент max данного массива a1, a2, …, a10 и
1021
... aaa
4 ,1i
5 ,1j
5 ,1i
5 ,1j
4 ,1i
4 ,1j
указать номер imax этого элемента, использовать пример 1.6, в.
5. Найти сумму элементов S, стоящих на четных местах в заданном
массиве a1, a2, …, a10, использовать примеры 1.4, а и 1.6, а.
6. Найти среднее арифметическое элементов Sr, стоящих на нечетных
местах в заданном массиве a1, a2, …, a9, использовать пример 1.6, а.
7. Дана возрастающая последовательность действительных чисел
. Вставить действительное число b, a1 < b < a10, в нее так,
чтобы последовательность осталась неубывающей.
8. В массиве целых чисел a1, a2, …, a10 найти количество положительных
Np и отрицательных No членов.
9. Дан массив a1, a2, …, a5. Найти произведение P элементов, стоящих на
четных местах, использовать примеры 1.4, а и 1.6, а.
10. Создать массив a1, a2, …, an из n случайных чисел в пределах от 0 до
100. Подсчитать в этом массиве среднее арифметическое всех элементов,
найти максимальный max и минимальный min элементы массива,
использовать примеры 1.3, б и 1.6, в.
11. Дан массив a1, a2, …, a8. Найти сумму S положительных элементов,
стоящих на нечетных местах.
12. Дана матрица целых чисел {aij}, где i = j = 1, 2, 3, 4. Подсчитать
количество положительных Np и отрицательных No элементов.
13. Вычислить среднее арифметическое Sr2 и найти минимальный
элемент min2 второй строки матрицы {aij}, где
,
, использовать
примеры 1.5, а и 1.6, в.
14. Вычислить среднее арифметическое Sr3 и максимальный max3
элемент третьего столбца матрицы {aij}, где
,
, использовать
примеры 1.4, б и 1.6, в.
15. Найти среднее арифметическое Sro всех отрицательных элементов
матрицы {aij}, где
,
.
35

16. Найти, сколько отрицательных элементов No2 содержит во второй
5 ,1 ji
5 ,1 ji
5 ,1 ji
4 ,1 ji
4 ,1 ji
строке матрица {aij}, где
, использовать пример 1.4, а.
17. Найти, сколько отрицательных элементов No3 содержит в третьем
столбце матрица {aij}, где
, использовать пример 1.4, б.
18. Найти, сколько положительных элементов Np4 содержит в четвёртом
столбце матрица {aij}, где
, использовать пример 1.4, б.
19. Найти, сколько положительных элементов No2 содержит во втором
столбце матрица {aij}, где
, использовать пример 1.4, б.
20. Найти, сколько отрицательных элементов Np4 содержит в четвёртой
строке матрица {aij}, где
, использовать пример 1.4, а.
1.6. Подпрограммы
Подпрограмма - это программа, реализующая вспомогательный
алгоритм. Основная программа исполняет алгоритм решения задачи и
содержит в себе обращения к подпрограммам. В Basic существуют два типа
подпрограмм: подпрограммы-процедуры (Sub) и подпрограммы-функции
(Function), синтаксис которых приводится ниже:
Function имя(параметры) Sub имя(параметры)
[Операторы] [Операторы]
имя = выражение End Sub
End Function
где имя - имя процедуры и функции; параметры - одна или несколько
переменных, значения которых передаются и возвращаются из процедуры или
передаются в функцию при вызове процедуры или функции; выражение -
возвращаемое значение функции.
ЗАДАНИЕ 8
Даны одномерные массивы xi, yi, i = 1, 2,..N. Вычислите сумму Sr = Sr1 +
Sr2 средних значений Sr1 массива xi и Sr2 массива yi, используя
подпрограмму-процедуру и подпрограмму-функцию для вычисления Sr1 и Sr2
(рис. 1.16).
36

ТЕХНОЛОГИЯ РАБОТЫ
Рис. 1.16
Sub задание8а()
'Объявление целых переменных i,N, вещественных Sr,
'Sr1, Sr2 и массивов x и y типа Integer
Dim i, N As Integer
Dim Sr, Sr1, Sr2 As Single
Dim x(N) As Integer
Dim y(N) As Integer
N = InputBox("Вводите N")
'Переопределение массива а
ReDim x(N)
ReDim y(N)
'Цикл с параметром для заполнения массива вручную
For i = 1 To N
x(i) = InputBox("x=("&i&")")
y(i) = InputBox("y=("&i&")")
Next i
average_a(x, N, Sr1)
average_a(y, N, Sr2)
Sr = Sr1 + Sr2
MsgBox("Sr= " & Sr)
End Sub
Sub average_a(ByVal a() As Integer, ByVal N As Integer,
ByRef Sr As Single)
Dim i As Integer
Dim S As Single
'Расчет среднего арифметического элементов
S = 0
For i = 1 To N
S = S + a(i)
Next i
Sr = S / N
End Sub
1. Наберите программу на рис. 1.16, а, б, выполните ее компиляцию,
отладку и выполнение, а затем на рис. 1.17, а, б.
в основной процедуре main(), а процедуру average_a() и функцию
average_b() - нет.
Указание: процедуры задание8а() и задание8б() следует указать
37

В основной программе вычисляется Sr с привлечением подпрограммы-
Sub задание8б()
'Объявление целых переменных i,N
'вещественных Sr, Sr1, Sr2
'и массивов x и y типа Integer
Dim i, N As Integer
Dim Sr, Sr1, Sr2 As Single
Dim x(N) As Integer
Dim y(N) As Integer
'Ввод размерности массива
N = InputBox("Вводите N")
'Переопределение массива а
ReDim x(N)
ReDim y(N)
'Цикл с параметром
'для заполнения массива вручную
For i = 1 To N
x(i) = InputBox("x=("&i&")")
y(i) = InputBox("y=("&i&")")
Next i
Sr1 = average_b(x, N)
Sr2 = average_b(y, N)
Sr = Sr1 + Sr2
MsgBox("Sr= " & Sr)
End Sub
Function average_b(ByVal a() As Integer, ByVal N
As Integer)
Dim i As Integer
Dim S As Single
'Расчет среднего арифметического
'элементов массива
S = 0
For i = 1 To N
S = S + a(i)
Next i
average_b = S / N
End Function
Рис. 1.17
процедуры average_a(a,b) (рис. 1.16) или функции average_b (a,N)
(рис. 1.17).
38

2. Проверьте работу программы при x1 = 1, x2 = 2, x3 = 3, y1 = 2, y2 = 3,
y3 = 4 (Ответ: Sr = 5).
3. Самостоятельно составьте на Basic две программы, содержащие
подпрограмму-процедуру и подпрограмму-функцию, для решения следующей
задачи: даны два одномерных массива xi и yi, i = 1, 2, 3. Вычислите
наименьшее из двух произведений P1 и P2, где P1 - произведение элементов
массива xi и P2 - произведение элементов массива yi,
4. Решите задачу четвертой группы из индивидуального варианта
(табл. 1.8).
КРАТКАЯ СПРАВКА
Рекурсией называется ситуация, когда подпрограмма вызывает сама
себя. Процедура или функция может содержать вызов других процедур или
функций, в том числе процедура может вызвать саму себя. Никакого
парадокса здесь нет - компьютер лишь последовательно выполняет
встретившиеся ему в программе команды и, если встречается вызов
процедуры, просто начинает выполнять эту процедуру, без разницы, какая
процедура дала команду это делать.
Любые рекурсивные процедуры и функции, содержащие всего один
рекурсивный вызов самих себя, легко заменяются итерационными циклами.
Типичным примером функции, использующей рекурсию, является
вычисление факториала.
ЗАДАНИЕ 9
В процедуре задание9() вычислите факториал F = 1 • 2 • 3 • …• N =
N! числа N с помощью рекурсивной функции Fact().
ТЕХНОЛОГИЯ РАБОТЫ
1. Наберите программу на рис. 1.18, выполните ее компиляцию, отладку
и выполнение, проверьте ее работу при N = 3. (Ответ: F = 6.) Функция
Fact() называется рекурсивной, поскольку она вызывает сама себя
посредством обращения изнутри к своему имени Fact().
39

5,1= , ix
i
Sub задание9()
Dim N, F As Integer
N = InputBox("Ввод N = ")
'Вызов рекурсивной
'функции Fact
F = Fact(N)
MsgBox("F= " & F)
End Sub
Function Fact(ByVal N As Integer)
'Вычисление факториала
If N <= 1 Then
Fact = 1
Else
Fact = Fact(N - 1) * N
End If
End Function
Рис. 1.18
2. Самостоятельно составьте программу для расчета суммы N чисел
F = 1 + 2 + …+ N
с использованием рекурсивной функции.
Задачи для самостоятельной работы № 4
Решите задачу с использованием подпрограмм: процедуры и функции.
1. Вычислить сумму S = xmax + ymax максимального элемента
xmax= max {xi} массива xi и максимального элемента ymax = max {yi} массива
yi, i = 1, 2, 3.
2. Вычислить произведение P = Sr1• Sr2 среднего значения Sr1
элементов массива xi и среднего значения Sr2 элементов массива yi, i = 1, 2, 3.
3. Вычислить произведение P = Sp• Sn сумм положительных Sp и
отрицательных Sn элементов массива
и произведения P2 элементов массива yi, i = 1, 2, 3.
xmin= min {xi} массива xi и минимального элемента ymin = min {yi} массива yi,
i = 1, 2, 3.
суммы S2 элементов массива yi, i = 1, 2, 3.
4. Вычислить сумму S = P1 + P2 произведения P1 элементов массива xi
5. Вычислить произведение P = xmin• ymin минимального элемента
6. Вычислить произведение P = S1 • S2 суммы S1 элементов массива xi и
.
40
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
