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


Категории:

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






Четвёртый этап: написание программного кода задачи

Вся программав Visual Basic оформляется в виде процедур и пользовательских функций. В Qbasic, Turbo Pascal кроме этих структурный блоков есть понятие основной программы[1], где согласно алгоритму происходит вычисление требуемых величин и происходит обращение к функциям и процедурам. В VB если и можно выделить некоторую часть алгоритма как основной блок программы, то и он оформляется в виде процедуры, связанной с каким-то событием. Поясним это утверждение.

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

Такими событиями могут быть: ввод текста в окно, щелчок или двойной щелчок по кнопке мыши, щелчок или двойной щелчок по элементу управления, перетаскивание объекта, нажа­тие клавиши клавиатуры и т.п. Эти события производятся пользователем. Другие события могут происходить в результате совершения других событий. Например, форма открывается, загружается или закрывается, элемент управле­ния становится активным (доступным) или теряет активность, элемент видимый или невидимый.

Основные действия пользователя, которые генерируют вызов событий в программе, следующие:

q запуск программы;

q выход из программы;

q нажатие клавиши;

q щелчок кнопкой мыши;

q перемещение мыши.

В Visual Basic многие программные блоки – это процедуры, которые пишутся как отклики на какие-то события. Чаще всего процедура (программный код) пишется как отклик, как реакция на события элементов управления.

Все управляющие элементы, размещенные на форме, можно увидеть в Окне написания кода, открыв слева вверху список элементов управления (Object). Это изображено на рис. 1.5.

А все события, которые можно связать с данным элементом управления, можно увидеть, если открыть список справа вверху (Procedure) в Окне написания кода (см.рис. 1.6).

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

Таким образом, процесс разработки про­граммы в среде VB сво-

дится к выбору набора объектов и их свойств, заданию событий и процедур их обработки. Программирование на VB – это событийное программирование.

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

Начало написания программы

Начинать написание программыследует так. Если в проекте одна форма, надо нажать на кнопку Показать код вверху Окнапроекта, чтобы открылось Окно кода. При наличие нескольких форм сначала надо выделить нужную форму, щелкнуть на кнопке Показать объект, а затем рядом – на кнопке Показать код.

После этого в Окне кода открываем список объектов, построенных на форме, как это показано на рис. 1.5 и выбираем требуемый элемент управления, а потом открываем список событий для этого элемента так, как это изображено на рис. 1.6. Предположим, была выбрана кнопка с именем cmdВычислить и событие для неё – Click. Тогда в Окне кода появятся первая и последняя строки процедуры события Click для кнопки cmdВычислить:

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

End Sub

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

В одной процедуре может быть написана вся программа или её часть.

Название процедуры события всегда состоит из названия элемента управления (здесь cmdВычислить), знака подчеркивания ( _ ) и названия события (здесь Click).

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

Написание процедуры начинается так же, как программы на Qbasic и Turbo Pascal.

Настоятельный совет при написании кодов:

Набирайте текст программы

только строчными буквами!

Такой способ написания программы избавит вас от ошибок, источник которых – ваша невнимательность. Дело в том, что если вы ввели текст программы правильно, то после перехода к следующей строке первые буквы операторов VB превратятся в заглавные. В заглавные превратятся и буквы, которые были введены при объявлении переменных. (Это еще один довод в пользу того, что все переменные лучше обязательно объявлять). Если этого не происходит, ищите ошибку при вводе текста программы!

Объявление переменных

Сначала следует объявить все переменные и константы, используемые при решении задачи. Чтобы объявление переменных было обязательным, введите слова Option Explicit в раздел (General) (Declarations) окна написания кода.

Начиная с объявления переменных, уже можно пользоваться подсказками. Для повышения эффективности написания кода и уменьшения ошибок следует пользоваться подсказками VB.

Подсказки,возникающиепри написании кода, предусмотрены в Visual Basic в следующих случаях:

- при декларации (объявлении) типов переменных;

- при написании названия свойств объектов после названия объектов;

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

На рис. 1.7 приводится результат действия подсказки при объявлении переменой r типа Integer. Возникновение списка с типами переменных происходит после того, как было набрано на клавиатуре

 

dim r As

и нажали на клавишу Пробел. При наборе названия типа переменной синий световой шаблон устанавливается каждый раз в списке на слове, начало названия которого совпадает с набранными буквами. После выхода на нужный тип переменной ввод слова с клавиатуры лучше прекратить и нажать клавишу <Tab>, если выражение продолжается, или клавишу <Enter>, если надо переходить к новой строке. Тогда после окончания ввода оператора Dim на рис 1.6 получим:

Dim r As Integer

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

Для уменьшения ошибок ввода кода рекомендуется такая технология программирования:

- необходимо сначала создать на форме все элементы управления, чтобы при написании операторов с использованием свойств объектов появлялась подсказка; если подсказки нет, то объекта управления, имя которого было набрано, на форме не существует; это возможно в двух случаях: элемент действительно не создан на форме или название существующего на форме элемента набрано с грамматической ошибкой;

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

Ввод начальных данных

Следующим в событийной процедуре является раздел ввода начальных данных. Для задания начальных данных в VB можно использовать:

1. Текстовые поля (TextBox) на форме.

2. Функцию InputBox(), которая выводит на экран диалоговое (модальное) окно. На нем содержатся: приглашение на ввод, текстовое поле ввода, кнопки ОК, Cancel (“Отмена” в русифицированных версиях), кнопка «Справка» и числа, указывающие расстояние от левого края экрана до левого края окна (координата X) и расстояние от верхнего края экрана до верхнего края окна (координата Y).

3. Оператор присваивания для задания начальных данных программным путем.

4. Оператор RND, генерирующий случайные числа.

Можно для задания начальных данных использовать также таблицы, но здесь они не рассматриваются.

Первый интерактивный способ ввода начальных данных имеет такую особенность – любые введенные данные представляют собой строковые (текстовые) данные. Поэтому при вводе числовых данных их следует перевести в числовые с помощью стандартной функции Val().

Например, в текстовое поле Text1 вводим число строк (m), а в Text2 вводим число столбцов (n) матрицы. Тогда после ввода этих чисел для дальнейшего использования переменных m и n мы обязаны в процедуре написать коды:

m = Val(Text1.Text)

n = Val(Text2.Text)

Текстовые поля для ввода данных можно использовать, если количество данных небольшое и заранее известно.

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

Например, для ввода элементов матрицы dblMat(i,j), количество которых будет каждый раз зависеть от ее размерности (m x n), диалоговое окно может быть задано следующим кодом, которое будет телом вложенного цикла:

dblMat(i,j) = InputBox(“Введите элемент dblMat( “& i & “,” _

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

Здесь строка в двойных кавычках до первой запятой – приглашение, вторая строка («Ввод матрицы») – заголовок окна, 3500 и 4500 – числа, задающие расположение окна на экране в твипах (1 твип ≈ 0,00297см). В примере диалоговое окно ввода устанавливается в правом нижнем углу экрана 15-дюймового экрана. В первой строке после записи “,” сделан пробел и введен знак подчеркивания ( _ ). Это знак переноса кода. Используется, если программное выражение длинное и не умещается в одной строке.

На рис. 1.8 приведен вид диалогового окна для ввода элементов матрицы MN().

 

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

‘ размерность матрицы m = 2, n = 3

dblMat(1,1) = 23.34: dblMat(1,2) = 88.38: dblMat(1,3) = 8.36

dblMat(2,1) = 40.04: dblMat(2,2) = 47.55: dblMat(2,3) = 18.78

Здесь пишется разделитель двоеточие (:), так как в строке записывается несколько операторов.

При использовании оператора RND для ввода исходных данных следует учесть следующее. RND генерирует случайные числа в диапазоне от 0 до 1. Минимальное число будет 0,0000001, максимальное 0,9999999. Для получения чисел в диапазоне целых чисел от M до N необходимо применять оператор:

dblMat(i,j) = Int(RND*(N – M +1)) + M

‘функция Int() возвращает целую часть числа, а

‘M, N – целые числа

Все пояснения после апострофа есть комментарий, который именно так пишется в программах VB. Другой вариант комментария:

Rem Это тоже комментарий, но проще ввести апостроф

В отличие от Паскаля, комментарий в VB – не многострочный, а однострочный, т. е. на каждой строчке перед комментарием следует вводить апостроф или Rem.

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

Программирование задачи

Программирование задачизависит от разработанного алгоритма. Этот алгоритм может быть предварительно представлен в виде блок-схемы или сразу в виде готовой программы на VB. Все зависит от сложности задачи и профессиональности программиста. Чтобы облегчить себе жизнь при программировании, надо знать, как можно больше функций Visual Basic и основные приемы, способы программирования типовых задач. Это дает возможность мыслить алгоритмически и догадываться о наиболее простом решении задачи. Но если это решение не самое простое и быстрое, ничего страшного. Студенты, основная специальность которых не связана с программированием, должны уметь быстро получить результат решения поставленной задачи с использованием программирования. Поэтому вопрос составления оптимальных программ перед ними не стоит. Это дело чести профессиональных программистов.

К основным несложным приемам, способам программирования, знание которых может помочь решению вычислительных задач, можно отнести:

§ максимальное использование логических операций (And, Or, Not, Xor, Imp, Fqv) при решении задач с ветвящейся структурой алгоритма;

§ использование циклов с известным числом повторений и свободное применение счетчика цикла при решении задач с циклической структурой алгоритма;

§ применение циклов с предусловием и с постусловием;

§ использование логических переменных;

§ получение сумм и произведений элементов массивов, удовлетворяющих определенному критерию;

§ использование счетчиков;

§ нахождение максимального и минимального элементов в массивах;

§ сортировка массивов;

§ организация перебора вариантов с помощью вложенных циклов.

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

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

Вывод результатоврешения задачи можноосуществить:

1) В этикетки Label или в текстовые поля TextBox с помощью оператора присваивания. Например:

lblSumma.Caption = intSum

‘значение переменной целого типа intSum присваивается

‘этикетке lblSumma.

txtПроизведение.Text = sngПроизведение

‘значение переменной sngПроизведение типа Single

‘присваивается текстовому полю txtПроизведение

2) На форму или в графические поля с помощью оператора Print. Например:

frmMatr.CurrentX = 250

‘координата Х, определяющая на форме начало печати,

‘отсчет Х направо от левого края формы

frmMatr.CurrentY = 500

‘координата Y, определяющая на форме начало печати,

‘отсчет Y от верхнего края формы вниз

frmMatr.Print “Сумма положительных элементов равна “; intSum

‘на форме frmMatr будет выдан текст, заключенный в операторе

‘ в двойных кавычках (но на форме этих кавычек уже не будет!),

‘а за ним значение переменной intSum; при выдаче на текущую форму

‘название формы перед Print можно не приводить.

picGrafWin.Print “Сумма равна “; sngSumma

‘в графическое поле picGrafWin будут выданы: текст, который

‘заключен в двойных кавычках, и сумма sngSumma.

Иногда результаты расчетов требуется выдать в табличном виде. Приведем пример такой выдачи. Особенность этого примера состоит в том, что построенная с помощью графических объектов Line и этикеток Label шапка таблицы может быть перенесена в любое место формы, и данные все равно будут выдаваться в таблицу. Какого-либо изменения программы для этого не потребуется.

Форма с шапкой таблицы представлена на рис. 1.9.

 
 

 

 


Линии в шапке таблицы имеют такие имена: Line1 – верхняя горизонтальная линия, Line2 – нижняя горизонтальная, Line3 – левая вертикальная (указана на рис. 1.9), Line4 – вторая вертикальная после Line3, Line5 – правая крайняя вертикальная линия.

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

Процедура такой выдачи будет такой:

Private Sub cmdPrintTab_Click()

CurrentY = Line2.Y2 + TextHeight("4") / 2

str1 = CurrentY ‘ координата Y, определяющая

‘ начало выдачи 1-й строки в таблице

i = 0

msi = 1 'msi – для регулирования межстрочного интервала

' для примера рассчитывается Sinx от 0 до 3,14 радиан:

For x = 0 To 3.14 Step 0.157

i = i + 1 ‘ счетчик выданных строк

y = Sin(x)

CurrentY = str1 + msi * TextHeight("4") * (i - 1)

' число 700 подбирается один раз, чтобы выдать

' результаты в нужном месте столбца:

CurrentX = Line3.X1 + 700: Print FormatNumber(x, 2);

CurrentX = Line4.X1 + 700: Print FormatNumber(y, 2)

Next x

DrawWidth = 2: yk = CurrentY + TextHeight("4") / 2

Line3.Y2 = yk: Line4.Y2 = yk: Line5.Y2 = yk

' рисуется нижняя линия:

Line (Line3.X1, yk)-(Line5.X1, yk)

End Sub

В этой процедуре используется функция TextHeight() для определения координаты Y следующей строки выдачи. В качестве текста как аргумента можно задать хотя бы один и любой символ. Функция возвращает высоту строки с учетом заданного размера шрифта.

3) На принтер можно выдать:

§ форму со всеми текстами на ней и графикой с помощью метода формы PrintForm. При этом можно не выдавать управляющие элементы (например, командные кнопки), сделав их перед выдачей невидимыми. В процедуре, приведенной ниже, перед печатью формы Form2 кнопки cmdPrintForm и cmdPrinter делаются невидимыми, а после выдачи – видимыми:

Private Sub cmdPrintForm_Click()

cmdPrintForm.Visible = False

cmdPrinter.Visible = False

Form2.PrintForm

cmdPrintForm.Visible = True

cmdPrinter.Visible = True

End Sub

§ с помощью объекта Printerи методов Print, Line, Circle, Psetи PaintPicture. Используя их, копируем текст или графику, создаваемую этими методами, на объект Printer, а затем выдаем на печать с помощью метода EndDoc.

Если требуется выдача результатов на принтер, необходимо создать процедуру (не событийную), в которой будет содержаться решение задачи и выдача результатов, но перед всеми указанными выше методами привести наименование объектов. Эти объекты – формальные параметры процедуры. Приведем пример по разработки программы с выдачей результатов на форму и на принтер.

Private Sub cmdPrinter_Click()

ГрафП Form2, Printer

End Sub

Private Sub Form_Click()

ГрафП Form2, Form2

End Sub

Private Sub ГрафП (nForm As Object, Dest As Object)

Dim intR As Integer, intCX As Integer, intCY As Integer

intCX = 6050 ‘координата Х центра окружности

intCY = 4120 ‘координата Y центра окружности

intR = 3000 ‘радиус окружности

If Dest Is Printer Then

intCX = 6000

intCY = 8000

End If

Dest.CurrentX = 3000: Dest.CurrentY = 500 ‘координаты

‘начала выдачи текста на Form2 или на листе при печати

Dest.Print "Выдача текста и графики "

Dest.Circle (intCX, intCY), intR

If Not (Dest Is nForm) Then

Dest.PaintPicture nForm.Picture1, 250, 1500, 2280, 2280

End If

If Dest Is Printer Then Printer.EndDoc

End Sub

Форма Form2 после запуска программы и щелчка по форме кнопкой мыши имеет вид, изображенный на рис. 1.9.

Поясним программу. В процедуре ГрафП первый формальный параметр nForm – объект-источник (объект Form2), второй Dest – объект-адресат (объект Printer или другая форма). Если в программе не используются методы графики (PaintPicture, Line, Circle, Pset),то в процедуре первый формальный параметр будет отсутствовать.

 

В объект Picture1 рисунок вставлен заранее в процессе конструирования формы. Но на объект Printer этот трактор из формы надо перерисовать с помощью метода PaintPicture. Поэтому в процедуре есть проверка, в результате которой метод PaintPicture будет выполняться, если адресат картинки и источник картинки различны.

После этого для печати результатов достаточно обратиться к процедуре ГрафП с формальными параметрами Form2 и Printer (см. процедуру cmdPrinter_Click()), а для выполнения программы с выводом результатов на форму – обратиться к процедуре ГрафП с параметрами Form2 и Form2 (см. процедуру Form_Click()).

Если добавить новую форму Form3, из Form2 откроем ее и обратимся к процедуре ГрафП с параметрами Form2 и Form3, то на форме Form3 получим копию формы Form2 (но без кнопки).


2. Практические задания по Visual Basic

 

Практические задания по Visual Basic предназначены для проведения лабораторных работ по программированию.

Первые задания посвящены вычислительным задачам, в которых используется минимальное количество стандартных элементов управления. Этими стандартными элементами являются, в основном, командные кнопки, текстовые поля, надписи.

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

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

Начиная с задания № 3 и по задание № 8, после выполнения каждого из них студент должен получить у преподавателя свой вариант задачи и выполнить его самостоятельно.

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

Значительно упрощает алгоритм некоторых задач, приведенных в этом разделе, – это использование массивов элементов управления. Примеры их использования даны в заданиях № 13 (Построитель гистограмм), № 19 (Традиционный калькулятор), № 20 (Программирование игры Пятнадцать).

И, наконец, в заданиях № 9 (Приближенное вычисление определенного интеграла) и № 14 (Построитель графика функций)) показан пример использования мощного средства создания проектов VB ­– ActivX-компонента ScriptControl.

 

Задание № 1. Знакомство с элементами управления

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

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