Главная Случайная страница


Категории:

ДомЗдоровьеЗоологияИнформатикаИскусствоИскусствоКомпьютерыКулинарияМаркетингМатематикаМедицинаМенеджментОбразованиеПедагогикаПитомцыПрограммированиеПроизводствоПромышленностьПсихологияРазноеРелигияСоциологияСпортСтатистикаТранспортФизикаФилософияФинансыХимияХоббиЭкологияЭкономикаЭлектроника






Задач разветвляющейся структуры

Постановка задачи

Вычислить значение функции f = 3k2 – 2p, где

 

 

k =

 

при трех исходных значениях Х, равных соответственно 1; 4; 7.

Анализ задачи

Анализ постановки задачи показывает, что данный вычислительный процесс является разветвляющимся и вычисление величины К выполняется по разным формулам в зависимости от значения Х. Исходные данные – значения Х, промежуточные – К, Р, результирующая – f.

Алгоритм задачи

Алгоритм задачи изображен на рис. 4.1.

Обсудим этот алгоритм. Опытный программист сразу обратит внимание на то, что алгоритм составлен не оптимально, а в «лоб». Просто следуем записи постановки задачи. Что видим, то поем, как акын казахских степей. Для инженера или другого специалиста, для которого программирование не основная специальность, надо быстро получить результат. А этот алгоритм, составляемый таким образом, позволяет решать любую задач подобного рода.

Другое замечание можно сделать по поводу лишнего ветвления с переменной В. Этого, действительно, можно избежать, но тогда придется при программировании использовать метку, а все руководства по программированию всегда настойчиво напоминают, что хороший стиль программирования – обходиться в программах без меток.

Разработка пользовательского интерфейса

Откройте из своей папки свой проект с именем Программы _ВашаФамилия.vbp. Введите новую дочернюю формы с названием, например, Ветвящийся алгоритм с именем frmIf, для чего свойству MDIChild формы frmIf задатйте значение True. Добавьте новый пункт меню (Ветвления) в родительскую форму для загрузки этой новой формы.

Затем разработаем интерфейс новой формы. То есть спланируем, какие элементы управления разместить на форме, чтобы интерфейс формы был удобным для пользователя вашей программы.

Нас должен интересовать интерфейс, связанный с тремя основными блоками: ввода исходных данных, блока вычислений, вывода результатов.

Ввод исходных данных

Ввод исходных данных,т. е. значения Х здесь проще всего осуществлять с помощью одного Текстового поля и одной Надписис приглашением ввода Х.

Да
Блок вычислений

Все вычения будут запрограммированы в программе (процедуре). Но для начала вычислений необходимо предусмотреть на форме Кнопку с названием Вычислить, которая и будет запускать на выполнение такую процедуру. Еще одна Кнопкас названием Выход (или Конец, или END) необходимо построить на форме для завершения работы с формой.

Вывод результатов

Одна Надпись (Label) нужна для выдачи заголовка Результаты расчетов. Одна Надпись – для заголовка «К Р f»(вместо трех). Выдачу результатов K, P, f запрограммируемна три Надписи. Еще одна Надпись нужна для выдачи сообщения «Нет решения» в случаях, когда значение Х > 6. Но это сообщение можно выдавать на ту же Надпись, на которой будет записан заголовок Результаты расчетов. Но в этом случае придется запрограммировать выдачу сообщения Нет решения и восстановление заголовка Результаты расчетов в одном и том же элементе управления Надпись Таким образом, всего в этом блоке будет использовано 6 Надписей.

Все элементов управления, которые необходимо построить на форме frmIf, а также их свойства приведены в табл. 4.1.

В режиме выполнения этого приложения форма может выглядеть, например, так, как это изображено на рис. 4.2.

Меню Программы Выход, которые видны вверху после информационной строки, – это меню на MDI – форме, которое было создано при выполнении задания № 2.

Таблица 4.1

Объект Свойство Установленное значение
Label1 Caption Введите Х:
  (Имя) lblX
Text1 Text Пусто (для ввода Х)
  (Имя) txtX
  Alignment 1 – Правая привязка
Label2 Caption Результаты расчетов
  (Имя) lblЗагол
Label3 Caption К P f
  (Имя) lblKPF
Label4 Caption Пусто (для выдачи К)
  (Имя) lblK
  Alignment 1 – Правая привязка
  BorderStyle 1-Фиксировано один
Label5 Caption Пусто (для выдачи Р)
  (Имя) lblP
  Alignment 1 – Правая привязка
  BorderStyle 1-Фиксировано один
Label6 Caption Пусто (для выдачи f)
  (Имя) lblF
  Alignment 1 – Правая привязка
  BorderStyle 1-Фиксировано один
Command1 (Имя) cmdВычислить
  Caption Вычислить
Command2 (Имя) cmdEnd
  Caption Выход

 

 

Написание программного кода

Для события Click кнопки cmdВычислить (<Вычислить>) напишите следующий код:

 

 

 

 

Private Sub cmdВычислить_Click()

Dim X As Single, k As Single, blnДалее As Boolean

‘ Переменные р и f можно сразу рассчитать по формулам и

‘ их значения и присвоить их этикеткам lblP и lblF

‘ Булевская переменная blnДалее введена вместо переменной В,

‘ которая используется в блок-схеме

X = Val(txtX.Text)

blnДалее = True

If X > 2 And X <= 6 Then

k = (2 * X ^ 2 + Exp(X)) / 2 / X

ElseIf X > 6 Then

k = 3 * X + 4 * (Cos(X)) ^ 2

Else

blnДалее = False

End If

If blnДалее Then

lblK.Caption = FormatNumber (k, 4)

‘ ниже не приводим Caption и с помощью

‘ функции FormatNumber

‘ выдаем для вещественных чисел 4 знака после запятой

lblP = FormatNumber((2 * X + k) / k ^ 2, 4)

lblF = FormatNumber(3 * k ^ 2 - 2 * P, 4)

Else

lblЗагол.ForeColor = &HFF& ’устанавливаем красный цвет

lblЗагол.Caption = "Нет решения": blnДалее = True

End If

End Sub

Поскольку сообщение "Нет решения" красными буквами выдаем в надпись lblЗагол, то при вводе нового значения Х следует почистить этикетки lblK, lblP, lblF от прежних результатов и для этикетки lblЗагол восстановить надпись "Результаты расчетов" буквами черного цвета. Чтобы это происходило, записываем для события Change (Изменение) текстового поля txtX следующую процедуру:

Private Sub txtX_Change()

lblK.Caption = ""

lblP.Caption = ""

lblF.Caption = ""

lblЗагол.ForeColor = &H0& ‘восстанавливаем черный цвет текста

lblЗагол.Caption = "Результаты расчетов"

End Sub

Задание № 5. Программирование вычислительных задач циклической структуры

Постановка задачи

Вычислить значение функции f = 3k2 – 2p, где

k =

 

 

при значениях Х, изменяющегося от 1 до 11 с шагом 0,5.

Анализ задачи

Анализ постановки задачи показывает, что данный вычислительный процесс является циклическим и значение Х изменяется от начального значения Хн до конечного Хк с шагом ∆Х. Формулы для вычисления требуемых параметров такие же, как в задании № 4. Однако выдача многократно вычисляемых промежуточных величин К, Р и результирующей f необходимо каждый раз выдавать на форму, а не на этикетки, как это сделано в задании № 4. Поэтому в программе из задания № 4 должны быть внесены изменения в выдаче вычисляемых величин. Исходные данные: Хн, Хк и dХ.

Алгоритм задачи

Блок-схема алгоритма изображает циклический алгоритм, а телом цикла является предыдущий блок алгоритма разветвляющейся структуры. Поэтому на блок-схеме циклического алгоритма (см. рис. 5.1) предыдущий блок подробно не приводится, а обозначен пунктирным прямоугольником. Следует отметить, что если программа задания № 4 требует некоторого изменения, блок-схему этого задания изменять не нужно.

 
 
Рис. 5.1

 


Разработка пользовательского интерфейса

Откройте из своей папки свой проект Программы_ВашаФамилия.vbp. Введите новую дочернюю формы с названием, например, Цикл For…Next с именем frmCycle, для чего свойству MDIChild формы frmCycle задайте значение True. Добавьте новый пункт меню (Цикл) в родительскую форму для загрузки этой новой формы.

Затем разработаем интерфейс новой формы. То есть спланируем, какие элементы управления разместить на форме, чтобы интерфейс формы был удобным и понятным для пользователя вашей программы. Чтобы лучше понимать, почему выбирались те или иные элементы управления, приведем на рис. 5.2 вид формы, которая она будет иметь после запуска программы.

Нас должен интересовать интерфейс, связанный с тремя основными блоками: ввода исходных данных, блока вычислений, вывода результатов.

Ввод исходных данных, т. е. значения Хн, Хк и dX здесь проще всего осуществлять с помощью трех Текстовых полей и одной НадписиВведите Хн, Хк, dX перед этими тремя текстовыми полями. Разместить это лучше в верхней части формы.

Блок вычислений. Все вычисления будут запрограммированы в программе (процедуре). Но для начала вычислений необходимо предусмотреть на форме Кнопку с названием Вычислить, которая и будет запускать на выполнение такую процедуру. Еще одна Кнопкас названием Выход (или Конец, или END) необходимо построить на форме для завершения работы с формой. Кнопки разместить справа вверху на форме.

Вывод результатов. На форме разместите одну Этикетку (Label) для выдачи заголовка Результаты расчетов. Выдачу результатов расчетов на форму с помощью оператора Print запрограммируйте в процедуре, связанной с обработкой события Click кнопки cmdВычислить.

Начало программирования в программе задается с помощью операторов CurrentX и CurrentY. Чтобы не подбирать эти текущие координаты курсора при печати, можно поступить следующим образом. На форме в режиме конструктора в место, где предполагается начало печати, построить очень маленькую линию (объект), которая строится так же, как любой элемент управления с панели элементов управления. Затем в окне свойств для линии выписать ее координаты, например X1 и Y1. Эти координаты и задать для CurrentX и CurrentY.

В табл. 5.1 приведены спланированные элементы управления.

Таблица 5.1

Объект Свойство Установленное значение
Label1 Caption Введите значение Хн, Хк, dX:
Text1 Имя txtXn
  Text Пусто (для ввода Хн)
Text2 Имя txtXk
  Text Пусто (для ввода Хк)
Text3 Имя txtDX
  Text Пусто (для ввода dX)
Label2 Caption Результаты расчетов
  ForeColor Темно-коричневый
Command1 Имя cmdВычислить
  Caption Вычислить
Command2 Имя cmdEnd
  Caption Выход

 

Для формы, после ее выделения, в окне свойств для свойства AutoRedraw (Автоперерисовка) задать значение True. Это значит, что если результаты выдачи результатов не поместятся на форме, то после увеличения ее размера данные на форме появятся.

Написание программного кода

Для события Click кнопки cmdВычислить (<Вычислить>) напишите следующий код:

Private Sub cmdВычислить_Click()

Dim xn As Single, xk As Single, dx As Single

Dim k As Single, x As Single, blnДалее As Boolean

Dim p As Single, f As Single

‘ значения, введенные в текстовые поля, присваиваем

‘ переменным

‘ xn, xk, dx:

xn = Val(txtXn): xk = Val(txtXk): dx = Val(txtDX)

Cls

CurrentX = 240: CurrentY = 1080 ‘ координаты начала выдачи

Print " X K P F "

Print "___________________________________________"

For x = xn To xk Step dx

blnДалее = True

If x > 2 And x <= 6 Then

k = FormatNumber(((2 * x ^ 2 + Exp(x)) / 2 / x), 3)

ElseIf x > 6 Then

k = FormatNumber((3 * x + 4 * (Cos(x)) ^ 2), 3)

Else

blnДалее = False

End If

If blnДалее Then

p = FormatNumber(((2 * x + k) / k ^ 2), 3)

f = Format((3 * k ^ 2 - 2 * p), "000000.###")

Print Tab(4); FormatNumber(x, 1); Tab(11); k; _

Tab(21); p; Tab(31); f

Else

Print Tab(4); x; Tab(10); " Нет решения"

End If

Next x

End Sub

Для события Click кнопки cmdEnd (<Выход>) напишите следующий код:

Private Sub cmdEnd_Click()

Unload Me ‘Закрытие формы frmCycle

End Sub

Если написать следующую любопытную процедуру, можно будет в режиме выполнения программы прямо на форме мышью можно нарисовать, по желанию, любую таблицу.

Private Sub Form_MouseDown(Button As Integer, _

Shift As Integer, X As Single, Y As Single)

Static Xp As Integer, Yp As Integer

Select Case Button ‘ регистрирует нажатие кнопки

Case 4 'средняя кнопка отмечает точку - начало рисования

PSet (X, Y): Xp = X: Yp = Y

Case 2 'правая кнопка мыши рисует горизонталь

Line (Xp, Yp)-(X, Yp)

Case 1 'левая кнопка мыши рисует вертикаль

Line (Xp, Yp)-(Xp, Y)

End Select

End Sub

Еще одна занятная процедура стирает все, что выдано на форме или нарисуется с помощью предыдущей процедуры.

Public Sub Form_MouseMove(Button As Integer, _

Shift As Integer, X As Single, Y As Single)

Dim col As Single

col = frmCicl.BackColor ‘ устанавливаем цвет формы

‘ «стиралка»: нажав ЛКМ, перемещаем к любому

‘ символу на форме и стираем его

If Button = 1 Then Circle (X, Y), 100, col

End Sub

Последние две процедуры – это процедуры обработки событий мыши: MousDown – нажатие кнопки мыши, MousMove – перемещение мыши.

Стирание происходит путем рисования окружности цветом формы.

После выполнения этого задания получить у преподавателя свой вариант задачи и выполнить его самостоятельно. Перед программированием на компьютере в тетради составить алгоритм задачи, разработку интерфейса формы и написать коды программы.

Задание № 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 " ИСХОДНЫЕ ДАННЫЕ"

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

Print

Print

FontItalic = True

FontSize = 10

Print “===================================="

Print " РЕЗУЛЬТАТЫ РАСЧЕТОВ"

Print "===================================="

FontItalic = False

Print " Сумма четных элементов = "; sum2

Print " Произведение четных элементов = "; mul2

Print

Print " Сумма отрицательных элементов = "; sum_

Print " Произведение отрицательных элементов = "; mul_

End Sub

Для ускорения написания кода копируйте одинаковые фрагменты кода из одной процедуры в другую.

Выдачу результатов на форму можно изменить. Поскольку выдаются параметры одного названия и количества, то вместо оператора Print используйте элементы управления этикетки (Label).

Задание № 7. Программирование двумерных массивов

Постановка задачи

Вычислить сумму элементов столбцов двумерного массива MN(m1, n1) (матрицы).

Анализ задачи

Анализ постановки задачи показывает, что в алгоритме задачи должны быть элементы циклической структуры. Исходные данные – размерность массива m1 и n1, значения элементов массива MN(m1, n1). Результирующие данные – суммы столбцов, количество которых равно n1.

Алгоритм задачи

Для реализации цикла используем оператор цикла For … Next. Чтобы задача позволяла работать с двумерными массивами (матрицами) любой размерности предусматриваем ввод размерности матрицы. После этого матрицу, которую сначала объявляем как безразмерную, снова переопределяем.

Затем, используя вложенные циклы, вводим значение элементов матрицы по строкам с помощью окна ввода InputBox() и сразу выводим их на форму для контроля.

Просматривая элементы матрицы с помощью вложенных циклов For…Next по столбцам, определяем суммы элементов столбцов и сохраняем их в одномерном массиве размерности n1 (по числу столбцов матрицы).

Используя оператор цикла, выдаем суммы элементов всех столбцов матрицы.

Блок-схема алгоритма изображена на рис. 7.1.

 

Разработка пользовательского интерфейса

Один из вариантов разработки интерфейса формы может быть таким, каким изображен на рис. 7.2.

Откройте приложение Visual Basic и создайте новый проект, следуя технологии, изложенной в задании № 1. Проект сохраните в своей папке под именем Матрица_СвоиИнициалы.vbp.

           
   
 
   
 
 
 
   

 


Введите Имя (Name) формы frmMatr, а Название (Caption) – Сумма строк матрицы. Затем разработайте интерфейс новой формы.

Интерфейс связан с тремя основными блоками: ввода исходных данных, блока вычислений, вывода результатов.

Ввод исходных данных. Ввод размерности массива m1 и n1 проще всего осуществлять с помощью двух Текстовых полей, ЭтикеткаВведите размерность матрицы перед этими текстовыми полями, ЭтикеткаЭтикеткаМатрица. Ввод элементов массива сделайте с помощью функции InputBox.

Блок вычислений.Все вычисления будут запрограммированы в программе (процедуре). Но для начала вычислений необходимо предусмотреть на форме Кнопку с названием Вычислить, которая и будет запускать на выполнение такую процедуру. Еще одну Кнопкус названием Выход необходимо построить на форме для завершения работы с формой.

Вывод результатов. Поскольку после ввода элементов матрицы они должны быть выданы для контроля на форму, а их количество не постоянное, то предусмотреть на форме постоянное место для вычисляемых конечных значений не представляется возможным. Переменным будет и количество вычисленных сумм строк матрицы. Поэтому выдачу этих величин на форму необходимо предусмотреть в программе.

Таким образом, на форме frmMatr должны быть объекты и их свойства, представленные в табл.7.1.

Таблица 7.1

 

Объект Свойство Установленное значение
Label1 Caption Введите размерность матрицы:
  BackColor Светло-коричневый (из палитры)
  ForeColor Темно-коричневый (из палитры)
Label2 Caption Матрица
  BackColor Голубой (из палитры)
  ForeColor Темно-синий (из палитры)
Label3 Caption x
Text1 Имя txtM1
  Text Пусто (для ввода m1)
Text2 Имя txtN1
  Text Пусто (для ввода n1)
Command1 Имя cmdВвод
  Caption Ввод элементов матрицы
Command2 Имя cmdВычислить
  Caption Сумма элементов столбцов
Command3 Имя cmdВыход
  Caption Выход

Для свойства Fontвсех надписей на Labelи Commandвыберите размер шрифта в 10 пунктов.

Написание программного кода

Перед написанием программного кода в процедурах следует определить, какие переменные в этом проекте будут глобальными (Public). Поскольку ввод элементов матрицы и вычисления сумм элементов строк будет происходить в разных процедурах, то двумерный массив MN(m1, n1) должен быть объявлен как глобальный в стандартном блоке формы. Для этого в открывшемся Окне написания кода в разделе (General)ниже слов Option Explicit (явный выбор) введите Dim MN() As Double.

Для события Click кнопки cmdВвод (Ввод элементов матрицы) напишите следующий код:

Private Sub cmdВвод_Click()

Dim i As Integer, j As Integer

Dim m1 As Integer, n1 As Integer

m1 = Val(txtM1.Text)

n1 = Val(txtN1.Text)

‘переопределение массива MN():

ReDim MN(m1, n1) As Double

Cls ‘ чистка формы от вывода данных оператором Print

CurrentX = 200 ‘ координаты подбираются X, Y

CurrentY = 1500

For i = 1 To m1

For j = 1 To n1

MN(i, j) = Val(InputBox("Введите элемент MN(" _

& i & "," & j & ")", "Ввод матрицы", , 3700, 5050))

MN(i, j) = Format(MN(i, j), "0000.##;-0000.##")

Print " "; MN(i, j); " ";

Next j

Print

Next i

End Sub

Для события Click кнопки cmdВычислить (Сумма элементов столбцов) напишите следующий код:

Private Sub cmdВычислить_Click()

Dim s As Integer, i As Integer, j As Integer

Dim m1 As Integer, n1 As Integer, su() As Double

m1 = Val(txtM1.Text)

n1 = Val(txtN1.Text)

ReDim su(n1) As Double

For i = 1 To n1

su(i) = 0

For j = 1 To m1

su(i) = su(i) + MN(i, j)

Next j

Next i

Print

Print

Font.Size = 10 ‘ выбор размер шрифта 10 пунктов

Print " ";

Font.Underline = True ‘ ввод текста с подчеркиванием

Print "Сумма элементов:"

Font.Underline = False ‘ отмена ввода текста с

‘ подчеркиванием

For i = 1 To n1

Print “ “; i; " столбца = "; Format(su(i), "0.##")

Next i

End Sub

Для события Click кнопки cmdВыход (Выход) напишите следующий код:

Private Sub Command3_Click()

Unload Me ‘Закрытие формы frmMatr

End Sub

Изменение программного кода

Вычислительные задачи требуют соблюдения определенного порядка работы с элементами управления. В этой задаче необходимо сначала ввести размерность матрицы, затем элементы матрицы и только после этого можно вычислять сумму столбцов. Если этот порядок будет нарушен, то может быть аварийный останов задачи. Избежать этого можно, если сначала заблокировать кнопки, а затем, в нужные моменты, их разблокировать. Такая блокировка, например, для кнопки cmdВвод, осуществляется командой

cmdВвод.Enabled = False,

а разблокировка –

cmdВвод.Enabled = True

Самостоятельно сделайте следующие изменения проекта.

1) В окне Свойств для кнопок Command1 и Command2 свойству Enabledзадать значения False.

2) Для текстового поля txtN1написать процедуру Private Sub txtN1_LostFocus()(LostFocus – событие поля Потеря фокуса). В процедуре запрограммировать следующий алгоритм. Если текстовые поля txtM1и txtN1не пустые, то разблокировать кнопку cmdВвод (Ввод элементов матрицы) и установите на ней фокус, используя метод SetFocus,для чего напишите код cmdВвод. SetFocus

3) В самом конце процедуры Private Sub cmdВвод_Click()записать код разблокирования кнопки cmdВычислить.

4) В самом конце процедуры Private Sub cmdВычислить_Click()записать коды блокирования кнопок cmdВвод иcmdВычислить.

Если дополнения программы будут сделаны правильно, то после ввода размерности матрицы и нажатия клавиши Tabкнопка cmdВвод будет активизирована и получит фокус. Если же размерность не будет введена или введена не полностью, то после нажатия клавиши Tabкнопка cmdВвод разблокирована не будет, а фокус будет передан на кнопку END.

Задание № 8. Процедуры-подпрограммы Sub

И процедуры-функции Function

Постановка задачи

Заданы длины трех отрезков прямой. Определить, можно ли с помощью этих отрезков построить треугольник. Если можно, то какой треугольник можно построить: прямоугольный, тупоугольный или остроугольный. Для треугольника вычислить его площадь.

Анализ задачи

Анализ постановки задачи показывает, что в алгоритме задачи должны быть элементы ветвящейся структуры. В зависимости от длин заданных отрезков может быть построен разного типа треугольник. Исходные данные: значения длин трех отрезков A, B, C. Результат: 4 возможных сообщения и площадь треугольника.

При разработке алгоритма предусмотрим создание процедуры-подпрограммы Треугольник() для определения возможности построения треугольника и его типа, а также создания процедуры-функции Площадь(), вычисляющей площадь треугольника.

Алгоритм задачи

На рис. 8.1 – 8.4 приведены блок-схемы алгоритма.

Здесь реализован пример нисходящего проектирования схемы алгоритма. На рис. 8.1 алгоритм представлен в наиболее общем виде, а на остальных схемах (рис. 8.2 – 8.4) он детализируется.

Разработка пользовательского интерфейса

Один из вариантов разработки интерфейса формы представлен на рис.8.5.

Откройте приложение Visual Basic и создайте новый проект, следуя технологии, изложенной в задании № 1. Проект сохраните в своей папке под именем Процедуры_СвоиИнициалы.vbp. Введите Имя (Name)формы frmProc, а Название Caption) – Процедуры и функции.

Затем разработайте интерфейс новой формы. Интерфейс связан с тремя основными блоками: ввода исходных данных, блока вычислений, вывода результатов.

 
 

 

 


На рис. 8.5 маркерами выделен элемент управления Надпись (Label6) для размещения сообщения Soob(см. процедуру Треугольник).

Ниже в табл. 8.1 приведены объекты и их свойства, которые должны быть размещены на форме frmMatr. Эти объекты изображены также на рис. 8.5.

 

 

 

Таблица 8.1

Объект Свойство Установленное значение
Label1 Caption Введите длины отрезков:
Label2 Caption А
Text1 Имя txtA
  Text Пусто (для ввода А)
Label3 Caption В
Text2 Имя txtB

 

  Text Пусто (для ввода В)
Label4 Caption С
Text3 Имя txtC
  Text Пусто (для ввода С)
Label5 Caption Треугольник можно построить?
Command1 Имя cmdОпределить
  Caption Определить
  Enabled False
Label6 Имя lblMsg
  Caption Пусто (для вывода сообщения)
Label7 Caption Площадь треугольника:
Label8 Имя lblS
  Caption Пусто (для вывода площади)
Command2 Имя cmdS
  Caption Площадь
  Enabled False
Command3 Имя cmdEnd
  Caption Выход

Для свойства Fontвсех надписей на Labelи Commandвыберите размер шрифта в 10 пунктов.

 

Написание программного кода

Перед написанием программного кода в процедурах следует определить, какие переменные в этом проекте будут глобальными (Public). Такими переменными можно принять длины отрезков. Сделайте это следующим образом:

§ установите курсор на строку Проект и щелкните правой кнопкой мыши;

§ в появившемся контекстном меню выполните команду Добавить ] Модуль;

§ щелкните на плюс перед словом Модуль и затем щелкните дважды на слове Модуль1;

§ в открывшемся Окне написания кода в разделе (General)ниже слов Option Explicit (явный выбор) введите Public sngA As Single, sngB As Single, sngC As Single.

В этом же стандартном Модуле1 напишите коды процедур типа Sub и Function. Если процедура написана в модуле, то она становится процедурой общего назначения, т. е. к ней можно обратиться из любой формы проекта, в котором она разработана.

Для процедуры Sub Треугольник напишите следующий код:

Sub Треугольник(A As Single, B As Single, C As Single, strMsg As String)

If (A + B) > C And (A + C) > B And (B + C) > A Then

If (A * A + B * B) < C * C Or (A * A + C * C) _

< B * B Or (B * B + C * C) < A * A Then

strMsg = "Да! ТУПОУГОЛЬНЫЙ."

ElseIf (A * A + B * B) = C * C Or (A * A + C * C) _

= B * B Or (B * B + C * C) = A * A Then

strMsg = "Да! ПРЯМОУГОЛЬНЫЙ."

Else

strMsg = "Да! ОСТРОУГОЛЬНЫЙ."

End If

Else

strMsg = "Нет! НЕЛЬЗЯ!"

End If

End Sub

Для процедуры-функции Function Площадь напишите следующий код:

Function Площадь()

Dim P As Single

P = (sngA + sngB + sngC) / 2

Площадь = Sqr(P * (P - sngA) * (P - sngB) * (P - sngC))

End Function

Для события Click кнопки cmdОпределить напишите следующий код:

Private Sub cmdОпределить_Click()

Dim Soob As String

sngA = Val(txtA): sngB = Val(txtB): sngC = Val(txtC)

'обращение к процедуре Треугольник с заменой формальных

‘ параметров

'А, В, С, strMsg на фактические параметры sngA, sngB, sngC, Soob

Треугольник sngA, sngB, sngC, Soob

Label6.Caption = Soob ‘ вывод сообщения на форму

If Soob <> "Нет! НЕЛЬЗЯ!" Then

‘ если треугольник можно построить, то

‘ происходит разблокировка кнопки Command2 (Площадь)

Command2.Enabled = True

End If

End Sub

Для события Click кнопки cmdS (Площадь) напишите следующий код:

Private Sub cmdS_Click()

lblS.Caption = Format(Площадь, "0.00")

End Sub

Для события LostFocus (потеря фокуса) текстового поля txtС напишите следующий код:

Private Sub txtC_LostFocus()

If txtA <> "" And txtB <> "" And txtC <> "" Then

cmdОпределить.Enabled = True

cmdОпределить.SetFocus

Else

cmdОпределить.Enabled = False

cmdS.Enabled = False

txtA.SetFocus

End If

End Sub

Для события Click кнопки cmdEnd (Выход) напишите следующий код:

Private Sub cmdEnd_Click()

Unload Me ‘Закрытие формы frmProc

End Sub

После выполнения этого задания получите у преподавателя свой вариант задачи и выполните его самосто

Последнее изменение этой страницы: 2016-08-11

lectmania.ru. Все права принадлежат авторам данных материалов. В случае нарушения авторского права напишите нам сюда...