- •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. Сглаживание и осреднение рядов
- •Задания
- •Литература
1.9. Массивы
Массивы - группы однотипных данных с произвольным досту-пом в оперативной памяти (во внешней памяти соответствующие группы данных называются файлами). По сути это таблицы с одним или несколькими входами (одно или многомерные массивы) в соот-ветствии с указанными индексами. Определяются массивы операто-ром DIM с указанием количества и диапазона изменения индексов (индексация по умолчанию начинается с нуля). В программе опреде-ление массива должно располагаться до его фактического использо-вания. Выборка элемента массива осуществляется указанием его име-ни и индексов.
Пример 1. Переписать содержимое одномерного массива разме-ром 1 : m∙n в двумерный m×n массив. Будем считать, что m и n за-
даны и одномерный массив каким-то образом заполнен:
DIM A(1 TO m * n) AS SINGLE, B(1 TO m, 1 TO n) AS SINGLE
'заполнение массива А( )
k = 0
FOR i = 1 TO m: FOR j = 1 TO n
k = k + 1: B(i, j) = A(k)
NEXT: NEXT
Пример 2. Составить программу умножения двух матриц. Пусть матрицы заданы массивами A(1 TO m, 1 TO k), B(1 TO k, 1 TO n), C(1 TO m, 1 TO n) и требуется вычислить C = A∙B. Приведем часть
кода, выполняющую необходимые вычисления.
FOR i = 1 TO m
FOR j = 1 TO n : p = 0
FOR t = 1 TO k
p = p + A(i, t) * B(t, j) 'вычисление суммы сомножителей
NEXT: C(i, j) = p
NEXT
NEXT
Пример 3. Иногда бывает необходима специальная нумерация элементов массива. Пусть, например, требуется перенумеровать эле-менты квадратного массива A(1 TO n, 1 TO n) параллельно побочной диагонали, т. е. заполнить массив последовательно натуральными чис-лами в порядке: A(1, 1) = 1, A(2, 1) = 2, A(1, 2) = 3, A(3, 1) = 4, A(2, 2) = 5 и т. д. Заметим, что сумма индексов параллельно побоч-ной диагонали остается постоянной. Этим и воспользуемся в приве-
денном ниже коде:
DEFINT I-N, T, U, V
INPUT "Введите размер массива N= ", n
DIM A(1 TO n, 1 TO n) AS INTEGER
FOR k = 1 TO 2 * n – 1
IF k < n THEN u = k ELSE u = n 'u = min(k, n)
IF k < n THEN v = 1 ELSE v = k – n + 1 'v = max(1, k – n + 1)
FOR i = u TO v STEP -1
t = t + 1: j = k + 1 – i: A(i, j) = t
NEXT
NEXT 'теперь можно вывести массив на дисплей
FOR i = 1 TO n
FOR j = 1 TO n: PRINT USING"### "; A(i, j); : NEXT
NEXT
Для n = 5 на дисплей будет выведена таблица:
Таблица 2
1 |
3 |
6 |
10 |
15 |
2 |
5 |
9 |
14 |
19 |
4 |
8 |
13 |
18 |
22 |
7 |
12 |
17 |
21 |
24 |
11 |
16 |
20 |
23 |
25 |
Пример 4. Пусть, например, 10 человек получают фиксирован-ную зарплату. Информация находится в программном стэке DATA. Требуется вывести информацию на экран в порядке увеличения зар-
платы. Задачу можно решить программой:
DATA Николаев,Спинстер,Трафф,Васин,Лимонов,Локк,Зенд,
Жаров,Кислицын,Корд
DATA 2500, 3200, 1295, 650, 7130, 5440, 4000, 1010, 4280, 6000
TYPE Person 'тип пользователя (см. п. 5)
NAM AS STRING * 10
PAY AS INTEGER
END TYPE
DIM TABLE(9) AS Person 'массив из 10 элементов
RESTORE : FOR i = 0 TO 9 : READ TABLE(i). NAM : NEXT
FOR i = 0 TO 9 : READ TABLE(i). PAY : NEXT
FOR i = 8 TO 0 STEP – 1 'упорядочение массива
FOR j = 0 TO i
IF TABLE(j). PAY < TABLE(j + 1). PAY THEN
SWAP TABLE(j) , TABLE(j + 1) ' перестановка элементов
END IF
NEXT
NEXT : ' таблица упорядочена, теперь только вывод на экран.
FOR i = 0 TO 9
PRINT TABLE(i). NAM ; TABLE(i). PAY
NEXT
Пример 5. Для антисимметричной матрицы A с элементами Ai,j = найти сумму всех скалярных произведений столб-
цов по формуле S = A‹ i › A‹ j ›, где n количество строк (столбцов) матрицы А, верхний индекс указывает номер столбца мат-
рицы. Пусть n вводится с клавиатуры. Приведенная ниже программа
решает задачу:
DEFINT I - K : DEFSNG S: INPUT n
DIM A(1 TO n, 1 TO n) AS SINGLE
FOR i = 1 TO n : FOR j = 1 TO n
IF i = j THEN A(i, j) = 2 ELSE A(i , j) = 1 / (i - j)
NEXT : NEXT : S = 0
FOR i = 1 TO n - 1 : FOR j = i + 1 TO n
FOR k = 1 TO n : S = S + A(k, i) *A(k, j) : NEXT
NEXT : NEXT
Пример 6. В некоторых случаях (особенно в задачах с логичес-ким содержанием) полезно содержимое ячейки (целого формата) рас-сматривать как массив значений разрядов, что может существенно об-легчить перебор всех возможных вариантов. Рассмотрим для примера задачу: имеются семь предметов заданного веса и определенной стои-мости каждый, требуется на платформу данной грузоподъемности по-ложить предметы максимальной суммарной стоимости (задача упаков-ки). Здесь число всевозможных переборов равно 127 = 2 7 – 1, все ком-бинации занимают один байт. Пусть конкретный набор данных разме-
щается в стеке DATA. Приведем код решения задачи.
DEFINT I-N : DEFSNG P-W : DEFSTR Z
n = 7: m = 40 'грузоподъемность
DIM P(1 TO n), S(1 TO n)
DATA 11,21,13,8,6,27,9 'веса в усл. ед.
DATA 3,9,7,6,8,8,12 'стоимость в усл. ед.
FOR j = 1 TO 2 * n
IF j <= n THEN READ P(j) ELSE READ S(j – n)
NEXT 'чтение информации
num = 2 ^ n – 1 'число всевозможных вариантов
max = 0: k = 0
FOR i = 1 TO num: price = 0: w = 0 'перебор вариантов
FOR j = 1 TO n
IF j = 1 THEN jb = 1 ELSE jb = 2 * jb 'выбор j –го разряда