Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_VB_ч_1_МГУС.doc
Скачиваний:
46
Добавлен:
23.08.2019
Размер:
1.41 Mб
Скачать

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

lblSumma.Caption = intSum

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

‘этикетке lblSumma.

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

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

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

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

frmMatr.CurrentX = 250

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

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

frmMatr.CurrentY = 500

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

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

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

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

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

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

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

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

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

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

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

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

Line3

Линии в шапке таблицы имеют такие имена: 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 следующей строки выдачи. В качестве текста как аргумента можно задать хотя бы один и любой символ. Функция возвращает высоту строки с учетом заданного размера шрифта.

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

    • форму со всеми текстами на ней и графикой с помощью метода формы 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 (но без кнопки).