Visual Basic Script - для решения расчетно-графических задач в системе "ВекторW"

Содержание
Справочная информация
Операторы работы с массивами
Операторы присваивания
Комментарии
Функции
Операторы используемые в выражениях
Ветвление и циклы
Oбъявление функций и процедур
Некоторые правила VBscript
Идентификаторы Visual Basic
Зарезервированные слова
Что такое переменные?
Присваивание значения переменной
Объявление и использование массивов
Непосредственно работа в системе "ВекторW"
Как вызвать сценарий на VBscript в системе Вектор?
Как вызвать из одного сценария на VBscript другой сценарий в системе Вектор?
Преобразование геометрических объектов
OrtTrans a, b - преобразование отрезка ортогнально к координатной плоскости
Примеры
Импорт линий .dxf формата:  Import "Rnew12.dxf"
SetInvisibleAll - команда очистки экрана
О перспективах программирования на VB

 
 

Справочная информация

.
 
СИНТАКСИС ПРИМЕР ОПИСАНИЕ
  
Операторы работы с массивами
 
 
Dim имя_массива (индексы) dim a(10), b(20,30) Объявление массива
Erase имя_массива erase a Очистка содержимого массива
 
Операторы присваивания
 
 
переменная = значение a=137 a=b c="привет" Присваивание
  
Комментарии
 
 
' комментарии  ' текст   
 
Функции
 
 
Abs (число) a = abs(-1.34) ... a=1.34 Абсолютное значение числа
Asc (символ) a = asc("s") ... a=115 ANSI код символа
Int (число) a = int(-1.5) ... a=-2 Целое число, округление 
Atn (число) a = atn(0.37) Арктангенс
Tan (число) a = tan(0.37) Тангенс
Cos (число) a = cos(0.37) Косинус
Sin (число) a = sin(0.37) Синус
Exp (число) a = exp(0.37) Экспонента
Log (число) a = log(0.37) Логарифм
Sqr (число) a = sqr(0.37) Квадратный корень
Rnd (число) a = rnd(1) Случайное число 0..1
Randomize Randomize Установка генератора случайных чисел в исходное состояние
 
Операторы используемые в выражениях
 
 
   - сложение; аnd   - и; /  -  деление; =  равно, присвоить;   >  - больше; <=   - меньше-равно;  <> -  не ; <  - меньше;  =>  - меньше-больше; мod  - модуль числа; *  - умножение;    - отнять;  or  - или 
 
Ветвление и циклы
 
 
Call имя_событие Call but_onclick Вызов подпрограммы
Do While условие 
... 
Loop
Do While a<5 
a=a+1 
Loop
Повторяет выполнение кода, пока условие справедливо
For счетчик=начало To конец Step шаг 
... 
next
For i=1 to 5 
a=a+1 
next
Цикл 
IF условие Then 
действие1 
действие2 
End if
IF a > amin Then amin = a Выполнение кода при выполнении условия
While условие 
действие 
Wend
While a<5 
a=a+1 
Wend
Выполнение кода пока условие истинно
 
Oбъявление функций и процедур
 
 
Dim переменная Dim a Объявление переменной
Sub имя_событие 
код 
End sub
Sub but_onclick 
Alert x 
End sub
Подпрограмма
Function имя(параметры) 
код 
End function
Function(x,y) 
x=x*y 
End function
Функция
Exit ... Exit Do (For, Function, Sub) Досрочный выход
  

Некоторые правила VBscript

VBS в отличие  JS не чувствителен к регистру символов, т.е. для него, что copyfun(), что CoPYfuN() - все равно.
VBscript не чувствителен к типу данных, если они работают в одной программе.

Процедура это общее название функций или подпрограмм. Имеет синтаксис:

sub name
        событие
end sub

где:
name -  имя процедуры.
событие - то, что может "случиться" в процессе выполнения программы (вычисления, отрисовка).

Чтобы переменные x  была преобразована в целые числа, используется функция Cint(переменная):
а=Cint(x)

Если код не умещается в одной строке, то можно использовать символ продолжения строки:

if a=1 and b=2 or c=3 then t = 10
  можно написать как
if    a=1 _
  and b=2 _
   or c=3 _
then t =10
Перенос же строки, при печати текста и вычислений на экран, выполняется процедурой  vbCrLf в следующей конструкции:
 Составим таблицу выводимых значений магического кварата Ло-Шу
VBSMsg     "1-й ряд,   n1 = " & n1 & "     n2 = "  &  n2 & "   n3 = "  &  n3  & "  и их сумма = "  &  m1 _
& vbCrLf & "2-й ряд,   n4 = " & n4 & "     n5 = "  &  n5 & "   n6 = "  &  n6  & "  и их сумма = "  &  m2 _
& vbCrLf & "3-й ряд,   n7 = " & n7 & "     n8 = "  &  n8 & "   n9 = "  &  n9  & "  и их сумма = "  &  m3 _
& vbCrLf & "сумма по верикали: 1-й стлб. = " & m4  & "     2-й стлб. = "  &  m5 & "    3-й стлб. = "  &  m6 _
& vbCrLf & "сумма по диагоналям: 1-я = " & m7  & "     2-я  = "  &  m8
VBSMsg - специальная в   VBS для "Вектор" процедура вывода текста на экран дисплея.

Идентификаторы Visual Basic

— Первый символ идентификатора обязательно является буквой или символом подчеркивания. Например, идентификаторы First, _Var являются правильными, а 1st, 100 — неправильными. В середине или на конце идентификатора допускается использовать цифры, например: A1, A1B2 и др.
— В идентификаторах не допускается использовать пробелы, а также специальные символы: знаки препинания, а также @, #, $, &. Идентификаторы My Var, New& являются неправильными.
— Максимальная длина идентификатора не может превышать 255 символов.
— Идентификатор не может совпадать с зарезервированными словами языка программирования Visual Basic Script.
— В пределах одного модуля или проекта недопустимо объявлять один и тот же идентификатор дважды.

Зарезервированные слова

Зарезервированные слова — это стандартные инструкции, позволяющие решать определенные действия: описывать процедуры, открывать циклы, объявлять переменные и др. Ни одно из этих слов недопустимо использовать в качестве идентификатора.
 

Что такое переменные

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

Для объявления новой переменной используется инструкция Dim, синтаксис которой таков:
Dim <идентификатор> [As <тип>], <идентификатор1> [As <тип>]...
<идентификатор> — имя переменной.
<тип> — допустимый тип данных.
Например, следующая конструкция объявляет переменную V1:
Dim V1 As Integer
Тип переменной и соответственно конструкцию As можно опускать. В этом случае переменная является не типизированной. При одновременном объявлении нескольких переменных очень часто используется такая конструкция Dim A, B, C As Integer. Причем подразумевается, что все три переменные являются целыми. На самом деле это не так. Целой является лишь переменная C, а переменные B и C нетипизированы. Более правильный способ записи таков:
Dim A As Integer, B As Integer, C As Integer

Присваивание значения переменной

Начальное значение переменной равно 0 для числовых типов данных. В большинстве случаев это значение вполне подходит условиям задачи. Так, можно составить программу суммирования строк массива A, не обнуляя значение переменной S:

Dim S
For I = 1 To 5
S = S + A[I]
Next

Такая программа при исполнении не выдаст ошибки и правильно суммирует пять элементов массива. Но правила хорошего тона в программирования все-таки вынуждают перед использованием новой переменной присвоить ей начальное значение. К программе для суммирования элементов массива следует добавить еще одну строку:

Dim S
S = 0
For I = 1 To 5
S = S + A[I]
Next

Присвоить значение переменной можно двумя способами: в явной форме или в неявной форме. В следующих примерах показаны различные способы присвоения значений переменным:

' числовая переменная
Dim Year As Integer
Year = 1999

' расчет значения выражения
B = (3*(3+4))/4
 

Объявление и использование массивов

Массивы — это переменные особого типа, имеющие еще одну характеристику: размерность. С их помощью можно манипулировать сразу несколькими значениями. Для объявления массива, как и переменной, используются стандартные конструкции Dim или Static:

Dim <массив> (<размерность1, размерность2...>) [As тип]
При описании массива используются следующие обозначения:
<массив> — имя массива, образующееся как и другие идентификаторы.
<размерность, размерность2...> — длина каждой размерности массива.
<тип> — необязательный при описании массива тип данных.

В программах обычно используются одномерные, двухмерные и трехмерные массивы. Причем, одномерные массивы иногда называются векторами, а двухмерные — таблицами. Следующий пример объявляет одномерный массив A: Dim A(6). Элементы массива обычно нумеруются с 0. Так, для массива A, объявленного выше, выделяется память для семи элементов: A(0), A(1), A(2), A(3), A(4), A(5) и A(6). Впрочем, совершенно не обязательно использовать элемент массива с нулевым индексом — можно ограничиваться значениями, хранящимися в оставшихся шести элементах с первого по шестой. Размерности массива, указываемые в круглых скобках после идентификатора.
Как и в случае с переменными, первое действие, которое следует выполнить в программе после объявления массива, — это присвоение значений элементам массива, например:

Dim FirstArray(4) As Integer
FirstArray(0) = 20
FirstArray(1) = 16
FirstArray(2) = 15
FirstArray(3) = 23
FirstArray(4) = 11

Для манипуляции элементами массива наиболее подходящим является цикл For, в котором, к примеру, можно просуммировать элементы массива FirstArray:

For I = 0 To 4
S = S + FirstArray(I)
Next I

Чтобы быстрее изучить особенности использования переменных, констант и массивов, надо воспользоваться любой книгой по Бейсику, где приведены примеры различных программ, а затем попытаться реализовать их в среде Visual Basic Scrept for Vector. По другим вопросам обращаться к Help языка VBS. Так например, перенос строки при выводе на экран каких-либо сообщений был найден в Help и использован в программе VbsBox.


Непосредственно работа в системе "ВекторW"

Выше даны стандартные функции VBS. В "Вектор", кроме непосредственно различных графических построений и преобразований, записывающихся в сценарий, реализованы свои процедуры:
otrezok.s (x1,y1,z1, x2,y2,z2) - построение отрезка через точки р1, р2;
krug.s (x1,y1,z1, R)  - построение окружности радиусом R с центром  в точки р1.


Как вызвать сценарий на VBscript в системе Вектор?
Сценарий (программа) создается в специально встроенном в Вектор редакторе Блокнот (WordPard) с расширение .vbs Запускается система Вектор с помощи создания или открытия файла. Старый файл выполнит действия команд в нем заложенные.

Как вызвать из одного сценария на VBscript другой сценарий в системе Вектор? 
Необходимо второй сценарий поместить в конец первого сценария, также можно создать Subr или Function для выполнений часто-повторяющихся построений или вычислений.

Пример построения отрезка различным способом задания переменных
otrezok.s 1, 4, 5, 7, 7, 10 ' - непосредственно заданием значений при обращении к otrezok.s

x1=1
y1=3
z1=4

x2=7
y2=6
z2=9
otrezok.s x1, y1, z1, x2, y2, z2  '  -  через регистры переменных

Dim p1, p2
p1 = Array(1,2,3)
p2 = Array(7,5,8)
otrezok.s p1(0), p1(1), p1(2), p2(0), p2(1), p2(2)  ' элементами массивов

Пример расчет дины отрезка р1-р2
 
 s =sqr((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)+(z2-z1)*(z2-z1))
 
VbsBox " Длина отрезка р1-р2  = "  & s  - вывода текста  (что в кавычках) и цифровоых значений (переменной s).

Преобразование геометрических объектов

obj.xAngle, obj.yAngle, obj.zAngle - переменные в которые передаются угол вращения вокруг той или иной оси, например: obj.zAngle = 10  - просто присвается угол в 10 градусов, или obj.zAngle = 10*n  - присвоение используется для цикла,  в котором n переменный параметр.
obj.origin(0) = 1   ' – сдвиг по х на 1
obj.origin(1) = 1   ' – сдвиг по y на 1
obj.origin(2) = 1   '  – сдвиг по z на 1
obj.scale  - масштаб  (например, obj.scale =0.5)
obj.All = True (или obj.All = 1) - преобразовать все объекты
obj.All = 0   -  отменить преобразования всех объектов
obj.SetH - установить матрицу преобразования и отрисовать.
Пример
otrezok.s 0,0,0,5,5,0
obj.zAngle = 10
obj.SetH
Что означает: отрезок задать, повернуть его на угол и отрисовать.

OrtTrans a, b  - преобразование отрезка в проецирующее положение той или иной к. плоскости
где
a  - к какой коорд. плоскости преобразуем объект

0 - к горизонтальной плоскости проекций,
1- к фронтальной плоскости проекций,
2 - к профильной плоскости проекций,
b - номер отрезка, который преобразуем
Пример
OrtTrans 0, 0
Означает: произвести ортогональное преобразование к горизонтальной плоскости координат нулевого отрезка.

Пример изображения отрезка прямой, вращающегося вокруг начала координат

    For n = 0 To 36 step 1
        otrezok.s 0,0,0,5,5,0
        obj.zAngle = 10*n
        obj.SetH
     Next
или
    For s = 0 To 360 step 10
        otrezok.s 0,0,0,5,5,0
        obj.zAngle = s
        obj.SetH
     Next

Импорт линий .dxf формата
Пример изображения вращающейся "Rnew12.dxf"  линии импортируемой из текущей директории (там где находится vector.exe)

For s = 0 To 360 step 5
        Import "Rnew12.dxf"       ‘ импортирование кривой
        obj.yAngle = s                 ‘ переменная – угол вращения
        obj.SetH                          ‘ матрица преобразований и изображение
Next

Пример изображения  линии(в масштабе, вращающейся и со сдвигом) импортируемой не из текущей директории.

For s = 0 To 360 step 10
         Import "C:\cg8n\krug1.dxf"
         obj.scale = 0.1     ' - масштаб
         obj.zAngle = s      ' -  переменная – угол вращения
         obj.origin(0) = 1   ' -  переменная – сдвиг по х
         obj.origin(1) = 1   ' -  переменная – сдвиг по y
         obj.origin(2) = 1   ' -  переменная – сдвиг по z
         obj.SetH              ‘ матрица преобразований и изображение работает
                                      ' по умочанию: масштаб. поворот, сдвиг
Next

* Примечание: вращение окружности заданной в центре координат вокруг оси Oz ничего не даст

Пример изображения  импортируемой линии в масштабе, свиге и затем повороте - все еще в цикле.

For s = 0 To 360 step 10
 Import "C:\cg8n\krug1.dxf"
 obj.zAngle = s
 obj.origin(0) = 20 ' – сдвиг по х на 20 с учетом масштаба на самом деле будет сдвиг на 2 см
 obj.origin(1) = 0   ' – сдвиг по y (если на 0, то можно не задавать)
 obj.origin(2) = 0   '  – сдвиг по z
 obj.scale = 0.1  ' - масштаб
 obj.SetH   ‘ матрица преобразований действует после поворота
Next

For s = 0 To 360 step 10
         Import "C:\cg8n\krug1.dxf"
         obj.scale = 0.1     ' - масштаб
         obj.origin(0) = 1   ' – сдвиг по х на 1
         obj.origin(1) = 1   ' – сдвиг по y на 1
         obj.origin(2) = 1   '  – сдвиг по z на 1
         obj.SetH              ‘ матрица преобразований на  сдвиг
         obj.zAngle = s      ' -  повернули
         obj.SetH              ‘ матрица преобразований действует после поворота
Next
 
 
SetInvisibleAll     ' очистка  экрана
 

Ниже приведена программа расчета длины отрезка p1-p2 и вывода его значений на экран диспея.
В макропрограмме pointline - показано, как определяется наикратчайшее расстояние от точки р3 до прямой р1-р2. Определяется и точка p, до которой расстояние минимально.  На печать выдается сообщение:
Наикратчайшее расстояние от точки р3 до  прямой р1-р2  =  10
Координаты точки  р следующие:
x=5
y=7
z=4

Пример 1. Написать программу, которая бы случайным образом загадывала число от 1 до 100, и выводила это число в рабочее окно системы "Вектор".

Dim a           ' определяем переменные
randomize              ' включение генератора случайных чисел
a=int(rnd(1)*100+1)    ' присваивание переменной (a) случайного значения
krug.s a/10,a/10,0,0.1  ' отрисовка сучайных чисел (координаты центра) окружностями
VBSMsg " Cлучайное число = " &   a

Что бы произошло, если бы мы в начале программы не объявили переменную? А ничего. Объявлять переменную нужна  для того, чтобы она  была "видна"  в других процедурах (sub, function).
 

Пример 2. На каком шаге угадаете наперед заданное число?
Для написание программы необходимо организовать:
- задание наперед заданного числа,
- цикла перебора чисел,
- выхода из программы при угадывании числа,
- вывода сообщений, на какой раз произошло угадывание.
При этом последовательность угадываемых чисел можно изображать окружностями, координаты центров которых: абсцисса - номер итерации, ордината - значение угадываемого числа.

' Итак на каком шаге "i" выпадет наперед заданное число "k"?

k = 23 ' наперед задаваемое число

' Организуем цикл

For i=1 To 150 Step 1
    randomize                     ' включение генератора случайных чисел
    a=int(rnd(1)*100+1)     ' присваивание переменной (a) случайного значения
    krug.s i/10,a/10,0,0.1    ' отображаем значение (a), где а - ординатой точки,  i - абсцисса
    if a = k Then exit  For    ' условие выхода
Next

' Вывод сообщений на экран
VBSMsg " число " & a & vbCrLf & "получено на шаге " & i
 
 


О перспективах программирования на VB /из статьи Андрея  Колесова 1997г./
 
Visual Basic сегодня  стал полноправным инструментом для профессионалов. Дискуссия о языках чаще  сводится к дилемме "Visual C++ или Delphi". А как же VB, превосходящий по популярности в мире все остальные средства именно в профессиональной сфере?  Не говоря уже о том, что использование различных инструментов в одном проекте является довольно заурядным явлением: одного для разработки пользовательского интерфейса, второго — для создания расчетных модулей, третьего — для обеспечения доступа к базам данных и т.д. Так было и двадцать лет назад, но сегодня это стало особенно актуально в условиях компонентной модели создания приложений.  Проблемы разработки уже давно переместились из области написания кодов в сферу умения использовать средства макропрограммирования. 

Да Delhpi является одним из лучших и элегантных средств разработки. Но лидерство VB на рынке определяется его массовостью, которая породила невиданный ранее рынок различных дополнений и расширений, в результате чего он становится фактически стандартом макроязыка для широкого круга бизнес-приложений. Разумеется, главным вопросом при выборе средства разработки является принципиальная возможность реализации на нем поставленной задачи.В этом плане весьма характерным является появление языка Java. Его технология, ориентирована больше  на новые области применения и методы реализации (Internet, апплеты, байт-код и пр.) Однако областью применения Java являются отнюдь не только специальные области Internet —  основной объем разработок смещается в область традиционных прикладных систем.

Как учат и как учить программированию

Наиболее характерным подходом было и остается обучение при принципу "что знаем, то и преподаем", не заботясь о вопросе, "а зачем это нужно". Сегодня программирование является  частью проблемы компьютерного грамоты, а методика его преподавания должна поменяться самым решительным образом. Технология разработки программ: визуальное программирование, событийная логика программы, компонентная технология, использование макросредств и пр.,  должно коренным образом отразиться на методике обучения. А что же делается сейчас? Чаще вообще просто изучается теория языков? Но такая постановка вопроса напоминает известный анекдот о бассейне, который обещают наполнить водой, когда все научатся плавать.  Классическая схема обучения программированию раньше выглядела следующим образом: сначала теоретическое изучение синтаксиса некоторого языка, а уже потом выполнение некоторых практических заданий. Сегодня же для написания первых программ для Windows вообще не нужно знать об особенностях языка — нужно понимать общую логику разработки приложения  и уметь работать в среде инструмента. И только после этого можно переходить к изучению языка для "изысканного программирования". Какое средство разработки годится для решения подобной задачи? Ответ — Visual Basic. Во-первых, это позволит в максимальной степени абстрагироваться от языковых проблем. Во-вторых, — познакомиться со средой программирования, характерной для всех средств разработки Microsoft . Освоение же языка реально возможно только в ходе практической работе и самообучения. Для компьютерной отрасли, как наиболее динамично развивающейся сферы, как нигде актуальна основная цель образования — заложить основы для будущего обучения всю свою жизнь.