Категории: ДомЗдоровьеЗоологияИнформатикаИскусствоИскусствоКомпьютерыКулинарияМаркетингМатематикаМедицинаМенеджментОбразованиеПедагогикаПитомцыПрограммированиеПроизводствоПромышленностьПсихологияРазноеРелигияСоциологияСпортСтатистикаТранспортФизикаФилософияФинансыХимияХоббиЭкологияЭкономикаЭлектроника |
Задач разветвляющейся структурыПостановка задачи Вычислить значение функции 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
Написание программного кода Для события 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 требует некоторого изменения, блок-схему этого задания изменять не нужно.
Разработка пользовательского интерфейса Откройте из своей папки свой проект Программы_ВашаФамилия.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
Для формы, после ее выделения, в окне свойств для свойства 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
Написание программного кода Сначала объявляем динамический массив 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). Задание № 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 проще всего осуществлять с помощью двух Текстовых полей, ЭтикеткаВведите размерность матрицы перед этими текстовыми полями, Этикеткаxи ЭтикеткаМатрица. Ввод элементов массива сделайте с помощью функции InputBox. Блок вычислений.Все вычисления будут запрограммированы в программе (процедуре). Но для начала вычислений необходимо предусмотреть на форме Кнопку с названием Вычислить, которая и будет запускать на выполнение такую процедуру. Еще одну Кнопкус названием Выход необходимо построить на форме для завершения работы с формой. Вывод результатов. Поскольку после ввода элементов матрицы они должны быть выданы для контроля на форму, а их количество не постоянное, то предусмотреть на форме постоянное место для вычисляемых конечных значений не представляется возможным. Переменным будет и количество вычисленных сумм строк матрицы. Поэтому выдачу этих величин на форму необходимо предусмотреть в программе. Таким образом, на форме frmMatr должны быть объекты и их свойства, представленные в табл.7.1. Таблица 7.1
Для свойства 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 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 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
Для свойства 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. Все права принадлежат авторам данных материалов. В случае нарушения авторского права напишите нам сюда... |