- •Bведение
- •1. Основы языка Basic
- •1.1. Основные структуры
- •1.2. Операторы ввода, вывода, позиционирования
- •1.3. Числа
- •1.4. Строки
- •1.5. Операторы def, dim, пользовательский тип
- •1.6. Разветвление и альтернатива
- •1.7. Циклы
- •If k then print "пароль принят" else print "ошибка пароля"
- •Input "Введите произвольный текст : ", txt
- •Input X
- •1.8. Программные стэки
- •1.9. Массивы
- •If I and jb then
- •Input n
- •1.10. Функции, подпрограммы
- •1.11. Файлы
- •1.12. Сегментирование программы
- •Input n
- •1.13. Работа с графической информацией
- •If nu then gosub Move 'перемещение рисунка
- •1.14. Звуковое воспроизведение
- •2. Элементы vba
- •2.1. Типы переменных
- •2.2. Использование массивов
- •2.3. Разветвление и циклы
- •2.4. Работа с ячейками листа
- •If y X Then
- •If Check Then
- •2.5. Элементы управления
- •If X 0 Then
- •2.6. Пользовательские классы
- •If IsEmpty(Text2) Then Exit Sub
- •2.7. Построение графиков в excel
- •2.8. Построение графиков и таблиц в word
- •3. Ключи в word
- •4. Гипертекстовая разметка
- •4.1. Основные тэги html
- •4.2. Форматирование таблиц
- •4.3. Фреймы
- •5. Основы программирования в среде MathCad
- •5.1. Особенности языка MathCad
- •5.2. Некоторые вычислительные модели
- •5.2.1. Системы уравнений
- •5.2.1.1. Системы линейных уравнений
- •Iter(a, b, e) n Last (b)
- •5.2.1.2. Нелинейные уравнения и системы
- •5.2.2. Определенный интеграл
- •5.2.3. Функции на дискретном множестве
- •5.2.4. Обыкновенные дифференциальные уравнения
- •5.2.5. Минимизация функций
- •5.2.5.1. Функции одной переменной
- •5.2.5.2. Функции многих переменных
- •5.2.6. Pазностная модель и прогноз
- •1 Otherwise (коэффициенты непрерывной модели)
- •5.2.7. Сглаживание и осреднение рядов
- •Задания
- •Литература
If IsEmpty(Text2) Then Exit Sub
If count = 1 then
MsgBox “Счет закончен” : Exit Sub
End If
For k = 1 To Val(Text2.Text)
If (cur IsNothing) AND (k = 1) Then
Set cur = first
Else
Set cur = cur.Nxt : m = cur.Num 'переход по ссылке
End if
Next : MsgBox “Выбрали” & Str(m) & “-го”
Set cur.Pre.Nxt = cur.Nxt
Set cur.Nxt.Pre = cur.Pre 'изменение ссылки
Count = count – 1 : Display
End Sub
Private Sub Display() ' вывод информации в Text1
Dim cell As Circ, txt As String, k As long
If cur IsNothing Then Set cell = first Else Set cell = cur.Nxt
Txt = Str(cell.Num)
For k = 1 To count – 1 : Set cell = cell.Nxt
Txt = txt & “,” & Str(cell.Num)
Next
Text1.Text = txt
End Sub
Нажатие кнопки “Initia” создает простейший круг из двух человек. Кнопка “Add” позволяет вставить в круг еще одного человека со следующим номером. Номера участников “считалки” помещены в текстовое окно Text1. Размер круга ограничивается форматом Long целых чисел. В текстовое окно Text2 следует ввести число – модуль пересчета k. Нажатие кнопки “Delete” удаляет из круга k-го участ-ника, считая от последнего удаления или от первого, если удалений еще не было. Схему ссылок в этом примере можно представить на-глядно в следующем виде (см. рис. 3):
• • • • • •
Рис. 3
Ссылок может быть сколько угодно, поэтому такие конструкции удо-бны для организации работы с очередями, деревьями, базами данных. Например, при построении дерева ссылок (что может использоваться для организации базы данных, упорядочения вводимой информации в скрытой форме и др.) каждый элемент (ячейка, или узел дерева) дол-жен иметь один “вход” (ссылку) и несколько “выходов” (тоже ссыл-ки): . Кроме того, каждый узел должен нести ка-кую-то смысловую информацию и информацию, характеризующую этот узел. Так, при обходе дерева полезно знать, посещался ли этот узел (логическое поле), номер этого узла (поле целого типа), отноше-ние к предыдущему узлу и т. д. Пусть в простейшем варианте двоич-ное дерево (один вход и не более двух выходов) предназначено для анализа числовой информации. Можно определить модуль класса
BTree (в свойствах класса установим имя класса BTree):
Option Explicit
Public Bul As Boolean ' признак посещения узла
Public Ind As Integer ' отношение с предыдущим узлом
Public Num As Long ' номер узла по порядку (счетчик)
Public Value As Single ' значение (информационное поле)
Public Pre As BTree ' cсылка на предыдущий узел
Public Le As Btree ' ссылка на первый (левый) выход
Public Ri As BTree ' ссылка на второй (правый) выход
Далее определим метод класса, устанавливающий для элемента класса
значение и порядковый номер, очищая остальные поля:
Public Sub Init(a As Single, i As Long)
Num = i : Value = a : Bul = True : Ind = 0
Set Pre = Nothing : Set Le = Nothing
Set Ri = Nothing
End Sub
Ссылки Pre, Le, Ri являются в определении класса формальными. Они становятся реальными при формировании объекта с помощью опера-тора New BTree в общем разделе определений (раздел Dim ). Для того, чтобы передвигаться по дереву от корня (первого узла) к какой-нибудь вершине, выбирая левую или правую ветвь, можно рабочему объекту (Current) присвоить значение первого узла (пусть его имя First): Set Current = First, а затем переходить на левую (правую) ветвь: Set Current = Current.Le (или Set Current=Current.Ri) до тех пор, пока не при-дем в вершину, т. е. когда Current.Le Is Nothing или Current.Ri Is Nothing. Присваивание осуществляется со всеми фактическими связями. Таким образом, если необходимо в нужном месте сделать изменения в пост-роенном дереве, можно использовать рабочую ячейку для необходи-мой ссылки. Например, если рабочая ячейка оказалась левой ветвью (это можно узнать по ее индексу – свойство Ind), то изменить свой-ство Bul соответствующего узла дерева можно с помощью двойной ссылки: Current.Pre.Le.Bul = False, так как ссылки здесь уже фактические.