Информатика и программирование алгоритмизация – от проблемы к программе. Курс лекций
.pdfНапример, цвет фона на форме можно задать так:
Form1.BackColor = vbBlue
Form1.BackColor = RGB(200, 57, 129)
Form1.BackColor = 17254.
Способ задания цвета выбирается в зависимости от потребностей графики.
6.2. Операторы (Методы) изображения стандартных фигур
Стандартными фигурами являются точка, прямая линия, прямо- угольник и окружность. Для изображения точки служит метод PSET (от слов point set – поставить точку).
Этот оператор имеют следующий формат:
PSET [step] (x, y), c
Параметры x, y – это координаты точки в твипах. Параметр step означает, что координаты x, y относительные, т.е. отсчитываются от координат предыдущей фиксированной точки. Если он отсутству- ет, то координаты абсолютные – отсчитываются от точки с коорди- натами (0, 0), т.е. от левого верхнего угла экрана. Параметр c означа- ет цвет. Он может быть не указан. Тогда оператор PSET ставит точку цветом, определенным предыдущим оператором. А если такой цвет не задан, то точка будет черной.
Прямая линия изображается методом
LINE [step] (x1, y1) – [step] (x2, y2), c
Параметры (x1, y1) и (x2, y2) являются соответственно координа- тами начальной и конечной точек прямой. Параметр c также означает цвет. Параметр step имеет тот же смысл, что и раньше. Координаты (x1, y1) могут быть не указаны. Тогда в качестве начальной точки принимается точка, зафиксированная предыдущим оператором. Это используется при построении кривых по точкам.
Если после параметра цвета через запятую поставить символ B, метод LINE нарисует прямоугольник:
LINE [step] (x1, y1) – [step] (x2, y2), c, B(F)
Левый верхний угол прямоугольника находится в точке (x1, y1), а правый нижний угол – в точке (x2, y2). Если же вместо символа B поставить BF, то прямоугольник будет закрашен цветом c.
51
Окружность изображается методом CIRCLE со следующими па- раметрами:
CIRCLE [step] (x, y), r, c, s, f, k
Параметр step имеет то же значение, что и раньше. Параметры (x, y) являются координатами центра окружности; r – ее радиус в пикселах; c – цвет; s и f – соответственно начало и конец дуги окружности в ра- дианах; k – коэффициент сжатия, позволяющий нарисовать эллипс. Здесь любой параметр, кроме радиуса, может быть опущен.
Если экран должен быть очищен для воспроизведения следующих изображений, используется метод CLS (clear screen). После выполнения оператора CLS точка фиксируется в центре экрана.
Еще один полезный метод называется Point(x, y). Это функция, которая определяет цвет точки с координатами (x, y), расположенной на экране (форме).
Ниже приведены основные свойства объектов, связанные с их изображением.
DrawWidth – толщина линий. ForeColor – цвет линий (и текста). BackColor – цвет фона.
FillColor – цвет заливки стандартной фигуры. FillStyle – стиль заливки: VBSolid – сплошная заливка.
Вспомним, что в общем виде формат любого оператора выглядит так:
Объект. Свойство = Значение
Это относится и к графическим операторам.
Следующие примеры иллюстрируют изображение стандартных фигур.
Пример 6.1. Геометрическая задача.
С помощью датчика случайных чисел генерируются коорди- наты n точек в заданных пределах x1, x2, y1, y2, при этом все точки попадают в прямоугольник соответствующего размера. За- даны координаты центра и радиус некоторой окружности. Требу- ется подсчитать число точек, попавших внутрь окружности. При- знак попадания: расстояние между точкой и центром окружности меньше ее радиуса. Требуется изобразить на экране соответст- вующий рисунок.
Программа включает три подпрограммы со следующими функ- циями: генерация координат точек, подсчет числа точек в окружно- сти, изображение на экране.
52
Private Sub Command1_Click() 'Пример 6_1 'Список подпрограмм
'SUB gen (x1, x2, y1, y2, x(), y(), n) 'SUB calcule (xc, yc, r, x(), y(), n, calc)
'SUB pnt (x(), y(), n, xc, yc, r, calc, x1, y1, x2, y2) Dim x(100) As Variant
Dim y(100) As Variant
xc = 3000: yc = 2400: r = 1000 'Координаты и радиус окружности x1 = 1000: x2 = 4500: y1 = 1000: y2 = 4000 'Координаты прямоугольника n = InputBox("Задайте число точек")
calc = 0 'Счетчик точек, попавших в окружность
gen x1, x2, y1, y2, x(), y(), n 'Генерация координат точек
Call calcule(xc, yc, r, x(), y(), n, calc) 'Расчет числа точек в окружности
Call pnt(x(), y(), n, xc, yc, r, calc, x1, y1, x2, y2) 'Рисунок End Sub
Private Sub calcule(xc, yc, r, x(), y(), n, calc) For i = 1 To n
If Sqr((x(i) – xc) ^ 2 + (y(i) – yc) ^ 2) < r Then calc = calc + 1 ' Проверка условия попадания точки в окружность
Next i
Print "calcule" End Sub
Private Sub gen(x1, x2, y1, y2, x(), y(), n) For i = 1 To n
x(i) = x1 + (x2 – x1) Rnd 'RND – функция для генерации y(i) = y1 + (y2 – y1) Rnd 'случайных чисел в пределах (0–1) Next i
Print "gen" End Sub
Private Sub pnt(x(), y(), n, xc, yc, r, calc, x1, y1, x2, y2) Form1.BackColor = RGB(100, 100, 100) 'Form1.BackColor = vbBlue 'Фон окрашен синим Form1.CurrentX = 50
Form1.CurrentY = 50
Print "number of points: "; calc 'Вывод на форму числа точек
'в окружности
Line (0, 3000)–(5000, 3000), vbRed ' Рисунок оси x Line (2500, 0)–(2500, 5000), vbRed ' Рисунок оси y
53
Form1.CurrentX = 4900
Form1.CurrentY = 2700
Print "x" 'Обозначение оси x
Form1.CurrentX = 2600
Form1.CurrentY = 200
Print "y" ' Обозначение оси y
Line (x1, y1)–(x2, y2), , B 'Рисунок прямоугольника
Circle (xc, yc), r, vbGreen 'Рисунок окружности
For i = 1 To n
PSet (x(i), y(i)), vbYellow 'Рисунок точки
Next i
End Sub
Пример 6.2. Построение графика функции.
Программа для построения графика произвольной функции долж- на учитывать минимальное и максимальное значения как аргумента, так и функции. В приведенной программе строится график функции y(x) = 0,01xsin(x) в пределах –5 < x < 10. Таким образом, мини- мальное и максимальное значения x определены последним неравен- ством. При этом функция y(x) меняется в пределах от –0,1 до +0,1. Программа вычисляет n точек и проводит линии между смежными точками. В связи с указанными пределами по x и y требуется введе- ние масштабных множителей и пересчет (сдвиг) начала координат, так как отрицательные значения не имеют смысла при определении координат точки на форме.
Эти операции присутствуют в приведенном примере программы. Заблокированные строки (оператор вывода Print) используются при отладке.
Private Sub Command1_Click()
'Пример 6_2 Построение графика функции
Dim x(500) As Integer: Dim y (500) As Single Dim xm(500) As Integer: Dim ym(500) As Single Dim Mx As Integer: Dim My As Integer
n = 30 'Количество точек
x(1) = –10: dx = 30 / n: y(1) = fny(x(1)) 'Задана начальная точка
'и интервал по x.
My = InputBox("Масштаб по вертикали (70–125) My =") Form1.CurrentX = 50 'Установлена начальная точка отсчета
'координат рисунка
54
Form1.CurrentY = 50 For i = 2 To n
x(i) = (x(i – 1) + dx) 'Вычисляются значения аргумента
y(i) = –fny(x(i)) |
'и функции |
|
'Print x(i), y(i) |
Next i |
|
Mx = 5000 / 30 |
|
|
'Print "======="; x(1) |
For i = 1 To n |
|
|
'Print i, x(i), y(i) |
xm(i) = (x(i) – x(1)) Mx + 100 'Вычисляются масштабированные ym(i) = y(i) My + 3000 'значения аргумента и функции
'Print xm(i); ym(i)
Next i
PSet (x(10), y(10)), vbGreen 'Form1.BackColor = RGB(100, 100, 100)
Form1.BackColor = vbBlue 'Фон окрашен синим Line (100, 3000)–(5100, 3000), vbRed ' Рисунок оси x Line (1770, 0)–(1770, 6000), vbRed ' Рисунок оси y
Form1.CurrentX = 5000
Form1.CurrentY = 2700 ForeColor = vbWhite
Print "x" |
'Обозначение оси x |
Form1.CurrentX = 2000 |
|
Form1.CurrentY = 200 |
|
Print "y" |
' Обозначение оси y |
For i = 1 To n – 1 |
|
If y(i) = 0 Then |
|
Circle (xm(i), ym(i)), 50, vbBlack
' Определяется начало координат на рисунке,
Print xm(i), ym(i) 'чтобы подставить в изображение оси y
End If
Line (xm(i), ym(i))–(xm(i + 1), ym(i + 1)), vbYellow Next i
End Sub
Private Function fny(z) fny = z Sin(z)
End Function
55
Пример 6.3. Рисунок четырех фигур.
Треугольник рисуется из начальной точки с координатами (x = 2500, y = 200). Внутри он не окрашивается, так как не является стандартной фигурой.
Private Sub Command1_Click()
'Пример 6_3 Окружность, линия, прямоугольник, треугольник
'Form1.BackColor = RGB(100, 100, 100) 'Цвет формы серый Form1.BackColor = vbBlue 'Цвет формы синий
ForeColor = vbRed |
'Цвет линий |
FillStyle = vbSolid |
'Стиль заливки |
FillColor = vbYellow |
'Цвет заливки |
DrawWidth = 7 |
'Толщина линий |
Line (2530, 170)–(1030, 3030) 'Это треугольник Line (970, 3000)–(5030, 3000)
Line (5030, 3030)–(2470, 170) ForeColor = vbGreen
FillStyle = vbSolid FillColor = vbYellow
Line (3700, 6000)–(5500, 3500), , B 'Это прямоугольник 'FillColor = RGB(220, 220, 220) 'Так тоже можно окрасить – серым FillColor = vbMagenta
DrawWidth = 5 ForeColor = vbYellow
Circle (1000, 5000), 250 ' vbBlack PSet (1000, 5000), vbBlack
Line (1000, 6000)–(3000, 6700), vbGreen End Sub
Пример 6.4. Стандартные фигуры, прямоугольник внутри круга. Сканирование заданной области внутри круга с целью перекрашива- ния прямоугольника.
Private Sub Command1_Click() 'Пример 6_4
Dim i As Integer: Dim x As Integer: Dim y As Integer Form1.BackColor = vbBlue 'Синий фон
DrawWidth = 3
Circle (1000, 5000), 250 'vbBlack – маленький круг для ориентировки
'на форме
56
ForeColor = vbRed FillStyle = vbSolid FillColor = vbYellow
Circle (4500, 5500), 3000 ForeColor = vbGreen
FillStyle = vbSolid FillColor = vbWhite
'Цвет линий 'Сплошная заливка фигуры 'Цвет заливки желтый 'Рисунок окружности
Line (3700, 3500)–(5500, 6000), , B 'Прямоугольник, белый внутри
'PSet (3000, 3000) 'Пробная точка для определения координат
'PSet (6000, 3000) 'PSet (3000, 7000)
'FillColor = RGB(220, 220, 220) |
'Серая заливка |
'DrawWidth = 5 |
'Толщина линий |
i = 1 |
|
For x = 3000 To 6000 Step 40 |
|
For y = 3000 To 7000 Step 40 If i < 8 Then i = i + 1 Else i = 1
R = i 40 'Эта переменная стоит ниже в операторе окраски RGB 'Меняется цвет точки, если она не желтая (65535), 'т.е. находится внутри прямоугольника
If Point(x, y) <> 65535 Then PSet (x, y), vbRed 'Два оператора
'заблокированы –
'If Point(x, y) <> 65535 Then PSet (x, y), y 'попробуйте их открыть If Point(x, y) <> 65535 Then PSet (x, y), RGB(i 2, (8 – i) 30, R)
Next y Next x
Print "=====================" End Sub
Таким образом, нам теперь известны основные операторы языка Visual Basic и способы построения типовых алгоритмов.
57
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
Акулов О.А., Медведев Н.В. Информатика. Базовый курс: Учеб. для студентов вузов, бакалавров, магистров, обучающихся по направлению «Информатика и вычислительная техника». – М.:
Омега-Л, 2004. – 552 с.
Алексеева И.В. Сборник задач и упражнений по курсу «Информати- ка». – Обнинск: Обнинский институт атомной энергетики, 2007. – 214 с.
Власов В.К., Королев Л.Н. Элементы информатики / Под. ред. Л.Н. Королева. – М.: Наука, 2008. – 357 с.
Голицына О.Л., Попов И.И. Основы алгоритмизации и програм- мирования: Учеб. пособие. – М.: ФОРУМ: ИНФРА-М, 2005. – 432 с.
Информатика / Под ред. Н.В. Макаровой. – М.: Финансы и стати-
стика, 2007. – 768 с.
Информатика: Учеб. для вузов / Под ред. С.В. Симоновича. –
СПб.: Питер, 2008. – 428 с.
Кураков Л.П., Лебедев Е.К. Информатика. – М.: Вуз и школа, 2009. – 636 с.
Лабораторный практикум по информатике: Учеб. пособие для ву- зов / В.С. Микшина, Г.А. Еремеева, Н.Б. Назина и др.; Под ред. В.А. Острейковского. – М.: Высш. шк., 2003. – 376 с.
Острейковский В.А. Информатика. – М.: Высш. шк., 2007. – 512 с. Першиков В.И., Савинков В.М. Толковый словарь по информати-
ке. – 2-е изд., доп. – М.: Финансы и статистика, 2008. – 562 с. Сафонов И. Бейсик в задачах и примерах. – СПб.: «БХВ-Петербург»,
2004. – 152 с.
58
Учебное издание
Смирнов Александр Петрович
ИНФОРМАТИКА И ПРОГРАММИРОВАНИЕ
Алгоритмизация – от проблемы к программе
Курс лекций
Редактор Т.А. Кравченко
Компьютерная верстка З.М. Уланова
Подписано в печать 12.08.14 |
Бумага офсетная |
|
Формат 60 × 90 1/16 |
Печать офсетная |
Уч.-изд. л. 3,68 |
Рег. № 476 |
Тираж 100 экз. |
Заказ 4280 |
|
|
|
Национальный исследовательский технологический университет «МИСиС», 119049, Москва, Ленинский пр-т, 4
Издательский Дом МИСиС, 119049, Москва, Ленинский пр-т, 4
Тел. (495) 638-45-22
Отпечатано в типографии Издательского Дома МИСиС 119049, Москва, Ленинский пр-т, 4
Тел. (499) 236-76-17, тел./факс (499) 236-76-35
59
