
- •Задания по информатике
- •1. Постановка задачи. Последовательность программирования
- •2. Создание элементов управления
- •3. Установка свойств объектов
- •4. Составление программного кода
- •Private Sub cmdСложение_Click
- •З адание № 4. Программирование вычислительных задач разветвляющейся структуры
- •Задание № 6. Одномерные массивы
- •1 . Постановка задачи 3. Алгоритм задачи
- •2. Анализ задачи
- •4. Разработка пользовательского интерфейса
- •5. Написание программного кода
- •З адание № 8. Процедуры-подпрограммы Sub и процедуры-функции Function
- •Задание № 9. Процедура-подпрограмма Сортировки Sub с использованием рамки Frame и переключателей OptionButton
4. Составление программного кода
После запуска приложения мы увидим форму (окно), изображенное на рис. 1. Пользователю достаточно ввести первое число, второе число и щелкнуть по одной из кнопок, имеющих названия арифметических операций. После этого должен выполниться код, который будет соответствовать выбранной арифметической операции. После щелчка по кнопке с названием <Конец> форма должна быть закрыта. То есть код обрабатывает событие щелчка (Click) кнопки. Поэтому говорят, что в Visual Basic программирование событийное.
Для работы с программным кодом командной кнопки нужно на ней дважды щелкнуть мышью. Например, щелкнем по кнопке <cmdСложение>. После этого появляется окно «Code» (Код).
Блок кода, связанный с частным объектом интерфейса, называется процедурой события Visual Basic. Тело процедуры должно быть заключено между операторами, указывающими на начало и конец порцедуры:
Private Sub cmdСложение_Click ‘начало процедуры
End Sub ‘конец процедуры
Операторы тела процедуры выполняются каждый раз, когда пользователь активизирует элемент интерфейса, связанный с процедурой. В данном случае событием является щелчок мыши (Click), но могут быть и события другого типа. (Их можно увидеть в ниспадающем списке, щелкнув по стрелке правее надписи Click).
Разработаем программный код для кнопки <cmdСложение>, а затем для <cmdEnd>.
Наберите следующие программные строки между заголовком и концом процедуры, которые приведены выше:
Private Sub cmdСложение_Click
‘ Объявление переменных sngА и sngВ
Dim sngA As Single, sngB As Single
‘ Присвоение sngА и sngB значения, введенного
‘ в первое и второе текстовые поля
sngA = Val(txtЧисло1.Text)
sngB = Val(txtЧисло2.Text)
‘ Выдача суммы в поле объекта lblРезультат
lblРезультат.Caption = sngA + sngB
‘Выдача вида операции в поле объекта lblОперация
lblОперация.Caption = “СЛОЖЕНИЕ”
End Sub
Для командной кнопки <cmdEnd> введите процедуру, состоящую из одного оператора End:
Private Sub cmdEnd_Click
End ‘ Останов программы и удаление формы с экрана
End Sub
Для запуска программы нажмите клавишу F5.
Для остальных кнопок программный код введите самостоятельно. Для этого можно скопировать код для кнопки Сложение и изменить в нем нужные строки.
Для кнопки Деление введите после строки sngB = Val(txtЧисло2.Text) введите следующий код:
If sngB = 0 Then
MsgBox "Введите Число 2!!", vbCritical + vbOKOnly, "ОШИБКА!!!"
txtЧисло2.SetFocus
Exit Sub
End If
После завершения работы над программой ее нужно сохранить в своей папке.
З адание № 4. Программирование вычислительных задач разветвляющейся структуры
Постановка задачи
Вычислить значение функции f = 3k2 – 2p, где
если 2 < x
≤ 6
если x
> 6
k =
при трех исходных значениях Х, равных соответственно 1; 4; 7
Анализ задачи
Анализ постановки задачи показывает, что данный вычислительный процесс является разветвляющимся и вычисление величины К выполняется по разным формулам в зависимости от значения Х. Исходные данные – значения Х, промежуточные – К, Р, результирующая – f.
Алгоритм задачи
Алгоритм задачи изображен на рис. 4.1
Обсудим этот алгоритм. Опытный программист сразу обратит внимание на то, что алгоритм составлен не оптимально, а в «лоб». Просто следуем записи постановки задачи. Что видим, то поем, как акын казахских степей. Для инженера или другого специалиста, для которого программирование не основная специальность, надо быстро получить результат. А этот алгоритм, составляемый таким образом, позволяет решать любую задач подобного рода.
Другое замечание можно сделать по поводу лишнего ветвления с переменной В булевского типа. Этого, действительно, можно избежать, но тогда придется при программировании использовать метку, а все руководства по программированию всегда настойчиво напоминают, что хороший стиль программирования – обходиться в программах без меток.
Разработка
пользовательского
интерфейса
Разработаем интерфейс новой формы. То есть спланируем, какие элементы управления разместить на форме, чтобы интерфейс формы был удобным и понятным для пользователя вашей программы.
Нас должен интересовать интерфейс, связанный с тремя основными блоками: ввода исходных данных, блока вычислений, вывода результатов.
Ввод исходных данных
Ввод исходных данных, т. е. значения Х здесь проще всего осуществлять с помощью одного Текстового поля и одной Надписи с приглашением ввода Х.
Блок вычислений
Все вычисления будут запрограммированы в программе (процедуре). Но для начала вычислений необходимо предусмотреть на форме Кнопку с названием <Вычислить>, которая и будет запускать на выполнение такую процедуру. Еще одна Кнопка с названием <Выход> (или <Конец>) необходимо построить на форме для завершения работы с формой.
Вывод результатов
Одна Надпись (Label) нужна для выдачи заголовка Результаты расчетов. Одна Надпись – для заголовка «К Р f» (вместо трех). Вывод результатов K, P, f запрограммируем на три Надписи. Еще одна Надпись нужна для выдачи сообщения «Нет решения» в случаях, когда значение Х > 6. Но это сообщение можно выдавать на ту же Надпись, на которой будет записан заголовок Результаты расчетов. Но в этом случае придется запрограммировать вывод сообщения Нет решения и восстановление заголовка Результаты расчетов в одном и том же элементе управления Надпись Таким образом, всего в этом блоке будет использовано 6 Надписей.
Все элементы управления, которые необходимо построить на форме, а также их свойства приведены в табл. 4.1.
Таблица 4.1
Объект |
Свойство |
Установленное значение |
Label1 |
Caption |
Введите Х: |
TextBox1 |
Text |
Пусто (для ввода Х) |
|
(Имя) |
txtX |
|
TextAlign |
3 – TextAlignRight |
|
TabIndex |
0 |
Label2 |
Caption |
Результаты расчетов |
|
(Имя) |
lblЗагол |
|
TextAlign |
3 – TextAlignCenter |
Label3 |
Caption |
К P f |
Label4 |
Caption |
Пусто (для выдачи К) |
|
(Имя) |
lblK |
|
TextAlign |
3 – TextAlignRight |
|
BorderStyle |
1- fmBorderStyleSingle |
Label5 |
Caption |
Пусто (для выдачи Р) |
|
(Имя) |
lblP |
|
TextAlign |
3 – TextAlignRight |
|
BorderStyle |
1- fmBorderStyleSingle |
Label6 |
Caption |
Пусто (для выдачи f) |
|
(Имя) |
lblF |
|
TextAlign |
3 – TextAlignRight |
|
BorderStyle |
1-fmBorderStyleSingle |
CommandButton1 |
(Имя) |
cmdВычислить |
|
Caption |
Вычислить |
|
Default |
True |
CommandButton2 |
(Имя) |
cmdEnd |
|
Caption |
Выход |
В режиме выполнения этого приложения форма может выглядеть, например, так, как это изображено на рис. 4.2.
Если для командной кнопки установить свойству Default значение True, то при щелчке по клавише Enter всегда будет срабатывать эта кнопка. Если командных кнопок на форме несколько, только для одной кнопки можно назначить свойству Default значение True.
При задании значения 0 (ноль) для свойства TabIndex текстового поля txtX, при запуске программы обеспечивает положение курсора в этом поле.
Написание программного кода
Для события Click кнопки cmdВычислить (<Вычислить>) напишите следующий код:
Private Sub cmdВычислить_Click()
Dim X As Single, k As Single, blnДалее As Boolean
Dim P As Single, f As Single
‘ Переменные р и f можно не вводить, а сразу рассчитать по формулам
‘ их значения и присвоить их этикеткам lblP и lblF
‘ Булевская переменная blnДалее введена вместо переменной В,
‘ которая используется в блок-схеме
X = Val(txtX)
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
P = (2 * X + k) / k ^ 2
f = 3 * k ^ 2 - 2 * P
lblK.Caption = FormatNumber (k, 4)
‘ ниже не приводим Caption и с помощью функции FormatNumber
‘ выдаем для вещественных чисел 4 знака после запятой
lblP = FormatNumber(P, 4) 'P
lblF = FormatNumber (f, 4) 'f
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
Задача № 4-1. Решение квадратного уравнения
В программе использовать условный оператор If … ElseIf … Else …
Составить программу решения квадратного уравнения Ах2 + Вх + С = 0.
Рассмотрите шесть возможных вариантов:
А = В = С = 0, корней бесчисленное множество (х – любое);
А = В = 0, С ≠ 0, уравнение не имеет корней;
А = 0, В ≠ 0, С ≠ 0, вырожденное квадратное уравнение, имеется один корень (формулу вычисления корня найдите сами);
D < 0, где D – дискриминант, который предварительно надо вычислить; уравнение не имеет вещественных корней;
D = 0, уравнение имеет два одинаковых корня (вывести их значения);
D > 0, уравнение имеет два различных вещественных корня (вычислить и вывести их значения).
Соответствующие сообщения вывести на форму вместе с корнями уравнения, если они имеет определенные значения.
Для проверки правильности работы программы предлагается шесть тестовых вариантов исходных данных:
А = В = С = 0;
А= В = 0, С = 1;
А=0, В = 3, С = 6 (должно получиться х = -2);
А=5, В=3, С=2;
А = 1, В = 2, С = 1 (должно получиться x1= x2 = -1);
А = 2, В = 5, С = 2 (должно получиться х1 = -2, х2 = -8).
Задание № 4-2 Страны и их курорты
Используя оператор выбора Select Case… End Select разработать проект, позволяющий по названию страны, введенному в текстовое поле, получать список курортов этой страны.
Список 9-ти стран разместить на форме.
При разработке этого проекта использовать следующую таблицу.
Страна |
Курорт |
Страна |
Курорт |
Египет |
Шарм-Эль-Шейх |
Таиланд |
о. Самди |
Египет |
Хургада |
Таиланд |
Паттайя |
Египет |
Сафага |
ОАЭ |
Дубай |
Куба |
Варадеро |
ОАЭ |
Шарджа |
Куба |
Гавана |
Италия |
Рим |
Куба |
о. Кайо Санта |
Италия |
Тоскана |
Португалия |
о. Мадейра |
Италия |
Римини и Равенна |
Ямайка |
Вестморлэнд |
Италия |
Флоренция |
Ямайка |
Монтего Бэй |
Италия |
Лацио |
Ямайка |
Очо Риос |
Италия |
Венеция |
Турция |
Стамбул |
Индия |
Гоа |
Турция |
Кемер |
Индия |
Керала |
Турция |
Сиде |
|
|
Турция |
Аланья |
|
|
Турция |
Анталия |
|
|
Задание № 5. Программирование циклического алгоритма (табулирование функций)
Постановка задачи
Вычислить значение функции f = 3k2 – 2p, где
если 2 < x
≤ 6
если x
> 6
k =
при значениях Х, изменяющегося от 1 до 11 с шагом 0,5.
Анализ задачи
Анализ постановки задачи показывает, что данный вычислительный процесс является циклическим и значение Х изменяется от начального значения Хn до конечного Хk с шагом DХ.
Переменные: X, Xn, Xk, dX. Rez, k, p, f, blnДалее.
Исходные данные: Xn, Xk, dX.
Схема алгоритма задачи
Разработка интерфейса
Элементы управления, которые следует построить на форме приведены в табл. 1.
Таблица 1
Объект |
Свойство |
Установленное значение |
Label1 |
Caption |
Введите Хn, Хk, dX: |
Text1 |
Имя |
txtXn |
|
TabIndex |
0 |
|
Text |
Пусто (для ввода Хн) |
Text2 |
Имя |
txtXk |
|
TabIndex |
1 |
|
Text |
Пусто (для ввода Хк) |
Text3 |
Имя |
txtDX |
|
TabIndex |
2 |
|
Text |
Пусто (для ввода dX) |
Label2 |
Caption |
Результаты расчетов |
|
ForeColor |
Темно-коричневый |
Text4 |
Имя |
txtRez |
|
MultiLine |
True |
|
Text |
Пусто (для ввывода результатов) |
Command1 |
Имя |
cmdВычислить |
|
Default |
True |
|
Caption |
Вычислить |
Command2 |
Имя |
cmdEnd |
|
Caption |
Выход |
Примечание: если задать свойству Default кнопки значение True, то кнопка будет нажата при щелчке по клавише Enter. Назначить значение True свойству Default можно только для одной кнопки!
В
ид
формы
Коды процедуры
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, rez As String
xn = Val(txtXn.Text): xk = Val(txtXk.Text): dX = Val(txtDX.Text)
txtRez.Text = "" ' чистка текстового поля
‘ в текстовой переменной rez формируем шапку таблицы с результатами:
rez = "X" & vbTab & vbTab & "K" & vbTab & vbTab & "P" & _
vbTab & vbTab & "F" & vbCrLf
For X = Xn To Xk Step dX ‘ начало цикла со счетчиком Х (здесь счетчик – аргумент функции)
‘ Xn – начальное значение параметра Х; Xk – конечное значение параметра Х
‘ dX – шаг изменения Х (Step – шаг)
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 * 3 + 4 * (Cos(X)) ^ 2), 3)
Else
blnДалее = False
End If
If blnДалее Then
p = FormatNumber(((2 * X + k) / k ^ 2), 3)
f = FormatNumber((3 * k ^ 2 - 2 * p), 3)
rez = rez & FormatNumber(X, 1) & vbTab & vbTab & k & vbTab & vbTab & p & _
vbTab & vbTab & f & vbCrLf
Else
rez = rez & X & vbTab & "Нет решения!" & vbCrLf
End If
Next x ‘ конец цикла
txtRez.Text = rez ‘ вывод таблицы результатов в текстовое окно txtRez
MsgBox rez, vbInformation + vbOkOnly, “Результаты расчетов” ‘ вывод в окно сообщений MsgBox
End Sub