Задание № 6. Одномерные массивы
Постановка задачи
Вычислить сумму и произведение четных элементов, а также сумму и произведение отрицательных элементов массива А(n).
Анализ задачи
Анализ постановки задачи показывает, что в алгоритме задачи должны быть элементы циклической и разветвляющейся структур. Исходные данные – размерность массива n и значения элементов массива A(n). Результирующие данные – две суммы и два произведения элементов массива. Обозначим сумму четных элементов sum2, отрицательных как sum_, произведение четных элементов mul2 и произведение отрицательных – mul_.
Алгоритм задачи
Изложим кратко идею алгоритма, используя понятия языка программирования Visual Basic.
После ввода размерности массива n и элементов массива с помощью оператора цикла For … Next просмотрим все элементы массива. С помощью условного оператора If … Then проверяем в цикле, какого знака значение каждого элемента массива – положительного или отрицательного. Если значение элемента положительное, то суммируем положительные элементы и определяем их произведение. Если же значение элементов – отрицательное, то суммируем значения отрицательных элементов и вычисляем их произведение.
После вычисления сумм и произведений выдаем их на форму оператором Print.
Блок-схема алгоритма приведена на рис. 6.1
Разработка пользовательского интерфейса
Откройте приложение Visual Basic и создайте новый проект, следуя технологии, изложенной в задании № 1. Проект сохраните в своей папке под именем Массив1_СвоиИнициалы.vbp.
Введите Имя (Name) форме frmOdMas и Название (Caption) – Одномерный массив, азатем разработайте интерфейс новой формы.
Интерфейс связан с тремя основными блоками: ввода исходных данных, блока вычислений, вывода результатов.
Введите Имя (Name) форме frmOdMas и Название (Caption) – Одномерный массив, азатем разработайте интерфейс новой формы.
На рис. 6.2 приведен вид формы после разработки интерфейса.
Интерфейс связан с тремя основными блоками: ввода исходных данных, блока вычислений, вывода результатов.
Ввод исходных данных. Ввод размерности массива n проще всего осуществлять с помощью Текстового поля и одной НадписиВведите размерность массива перед этим текстовым полем. Разместите это в верхней части формы. Ввод элементов массива сделайте в 2-х вариантах: ручной ввод (интерактивный) и с помощью функции RND, которая генерирует случайные числа от 0 до 1. Чтобы получить случайные числа Х в заданном диапазоне целых чисел от Мn до Mk используется формула:
Х = Int((RND*(Mk – Mn + 1)) +Mn
Для ввода по этим вариантам разместим на форме две Кнопкис названием Ручной ввод и Случайный ввод.
Блок вычислений. Все вычисления будут запрограммированы в программе (процедуре). Но для начала вычислений необходимо предусмотреть на форме Кнопку с названием Вычислить, которая и будет запускать на выполнение такую процедуру. Еще одну Кнопкус названием Выход необходимо построить на форме для завершения работы с формой. Кнопки разместить справа вверху на форме.
Все четыре кнопки разместите вверху сразу после Надписи и Текстового поля.
Вывод результатов. Поскольку после ввода исходных данных они должны быть выданы для контроля на форму, а их количество не постоянное, то предусмотреть на форме постоянное место для вычисляемых конечных значений не представляется возможным. Поэтому и выдача четырех конечных величин будет происходить в разные места формы и никаких элементов управления для выдачи результатов на форму не следует размещать.
В табл. 6.1 приведены спланированные элементы управления.
Таблица 6.1
Объект | Свойство | Установленное значение |
Label1 | Caption | Введите размерность массива: |
Text1 | Имя | txtN |
Text | Пусто (для ввода n) | |
Command1 | Имя | cmdРучнойВвод |
Caption | Ручной ввод | |
Command2 | Имя | cmdСлучВвод |
Caption | Случайный ввод | |
Command3 | Caption | Вычислить |
Имя | cmdEnd | |
Command4 | Caption | Выход |
Написание программного кода
Сначала объявляем динамический массив intA() и переменную N в разделе (General) (Declarations), чтобы они были видимы из любой процедуры формы:
Option Explicit
Dim intA() As Integer, N As Integer
Для события Click кнопки cmdРучнойВвод напишите следующий код:
Private Sub cmdРучнойВвод_Click()
'ручной ввод одномерного массива
Dim i As Integer, kvs As Integer
N = Val(Text1.Text)
ReDim intA(N) As Integer
Cls
CurrentY = 1350: CurrentX = 40
FontSize = 8
Print " ИСХОДНЫЕ ДАННЫЕ"
'Print " --------------------------------------"
CurrentY = 1800: CurrentX = 40
kvs = 0
For i = 1 To N
kvs = kvs + 1
intA(i) = Val(InputBox("Введите элемент intA(" & i & _
")", "Ввод массива intA(" & N & ")", , 3700, 4400))
If kvs > 5 Then Print: kvs = 0 ‘ввод в строке по 5 элементов
Print " intA("; i; ")= "; intA(i); " ";
Next i
End Sub
Для события Click кнопки Command2 (Случайный ввод) напишите следующий код:
Private Sub cmdСлучВвод_Click()
'задание массива случайно в диапазоне [-20, 20]
Const Mn As Integer = -20
Const Mk As Integer = 20
Dim i As Integer, kv As Integer
N = Val(txtN.Text)
‘переопределяем динамический массив intA(N)
‘после определения переменной N:
ReDim intA(N) As Integer
Cls
CurrentY = 1300: CurrentX = 40
FontSize = 8
Print " ИСХОДНЫЕ ДАННЫЕ"
kv = 0
For i = 1 To N
kv = kv + 1
intA(i) = Int(Rnd * (Mk - Mn + 1)) + Mn
Print " intA("; i; ")= "; intA(i); " ";
If kv = 5 Then Print: kv = 0
Next i
End Sub
Для события Click кнопки cmdВычислить напишите следующий код:
Private Sub cmdВычислить_Click()
Dim i As Integer, sum_ As Integer
Dim sum2 As Integer, mul_ As Long
Dim mul2 As Long
FontSize = 8
sum_ = 0: sum2 = 0: mul_ = 1: mul2 = 1
For i = 1 To N
If intA(i) Mod 2 = 0 Then sum2 = sum2 + intA(i): _
mul2 = mul2 * intA(i)
If intA(i) < 0 Then sum_ = sum_ + intA(i): _
mul_ = mul_ * intA(i)
Next i
FontItalic = True
FontSize = 10
Print “===================================="
Print " РЕЗУЛЬТАТЫ РАСЧЕТОВ"
Print "===================================="
FontItalic = False
Print " Сумма четных элементов = "; sum2
Print " Произведение четных элементов = "; mul2
Print " Сумма отрицательных элементов = "; sum_
Print " Произведение отрицательных элементов = "; mul_
End Sub
Для ускорения написания кода копируйте одинаковые фрагменты кода из одной процедуры в другую.
Выдачу результатов на форму можно изменить. Поскольку выдаются параметры одного названия и количества, то вместо оператора Print используйте элементы управления этикетки (Label).
Дата добавления: 2015-02-05; просмотров: 1492;