- •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. Сглаживание и осреднение рядов
- •Задания
- •Литература
Input X
s = 1 : p = - x * x : q = 1 : i = 0
DO : i = i + 2 : q = p * q ( i * ( i - 1)) : s = s + q
LOOP UNTIL ABS(q) < 0.00001
PRINT "x = " ; x ; "; s = " ; s ; "; точное значение = " ; cos(x)
Пример 7. Вычислить для заданного х сумму
f(x) = . Здесь, как можно заметить, n – e
слагаемое отличается от предыдущего множителем , поэ-
тому решение задачи можно представить кодом:
DEFINT N
DEFSNG P-S
n = 1: r = 2 * x / (1 + x * x)
q = 0.5 * r: sum = q 'вычислено первое слагаемое
WHILE ABS(q) > 0.000001
n = n + 2: q = q * r * n / (n + 1) : sum = sum + q
WEND : PRINT sum
Пример 8. Вычислить произведение (с точностью = 0.000001)
. Процесс умножения следует выполнять до тех пор, пока очередной сомножитель не будет отличаться от единицы меньше
заданной погрешности (= 0.000001).
DEFSNG P-S
prod = SQR(2) : s = prod : q = 0
WHILE ABS(q – 1) > 0.000001
s = SQR(2 + s) : q = 2 / s 'вычисление сомножителя
prod = prod * q
WEND : PRINT prod
Заметим, что привлечение собственного интеллекта может вооб-ще избавить от программирования. Например, в задаче: составить про-грамму определения n – го элемента в последовательности чисел
110100100010000100000100 … легко понять, что k -я единица нахо-дится на 1 + - м месте (k = 1, 2, …). Поэтому, если число
целое, то на указанном месте стоит единица, иначе – ноль.
1.8. Программные стэки
В программе можно организовать неизменяемый стэк данных с помощью оператора DATA, после которого может быть записана последовательность констант произвольного типа, разделенных запя-тыми. Оператор DATA может располагаться в любом месте програм-мы (в начале строки). Совокупность всех операторов DATA образует единый стэк констант, которые могут быть прочитаны с помощью опе-ратора READ по очереди, начиная с первого элемента стэка. Каждое прочтение READ передает очередь следующему элементу стэка. Ко-гда список стэка исчерпан, обращение READ вызовет ошибку. Опера-тор RESTORE возвращает очередь считывания к первому элементу списка. Если строка с оператором DATA помечена, то RESTORE c этой меткой передает очередь считывания помеченному оператору.
Пример 1. Из списка 10 претендентов на участие в спецзадании
необходимо случайным образом выбрать трех человек. Воспользуемся
программой
DATA Николаев, Спинстер, Трафф, Васин, Лимонов, Локк,
Зенд, Жаров, Кислицын, Корд
DEFINT A-C, I 'при определении переменные принимают значение 0
DEFSTR S
RANDOMIZE TIMER
WHILE (a - b) * (a - c) * (b - c) = 0
a = 1 + INT(10 * RND) : b = 1 + INT(10 * RND)
c = 1 + INT(10 * RND)
WEND : 'выбор различных сл. целых чисел из [1, 10]
FOR i = 1 TO 10 : READ s
SELECT CASE i
'сравнение номера считанного имени со случайным числом
CASE a : str1 = s
CASE b : str2 = s
CASE c : str3 = s
END SELECT
NEXT
PRINT "Выбраны : " ; str1 ; ";" ; str2 ; ";" ; str3
Выбор данных из стэка всегда выполняется в одном и том же по-рядке: от первого элемента к последнему. При необходимости иного порядка прочтения следует вставлять цикл для прямого прочтения.
Пример 2. Если список предыдущего примера следует прочесть
в обратном порядке, то следует поступить так:
FOR i = 10 TO 1 STEP -1: RESTORE 'выбор обратного порядка
FOR j = 1 TO i : READ s: NEXT 'чтение в прямом порядке
PRINT s;
NEXT
Пример 3. Рассмотрим задачу перевода десятичного числа в чис-ло с произвольным основанием Q(1, 37). Алгоритм в своей основе прост: из числа все время вычитаем максимальную степень основания, уменьшая эту степень каждый раз на единицу до указанных пределов.
Недостающие цифры, как всегда, дополняются буквами латинского
алфавита. Алгоритм можно реализовать в виде кода:
DEFINT I-N: DEFDBL P-Z: DEFSTR A-T
CONST eps = 1E-12 'константа eps = 0.000000000001
DATA 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z
INPUT "Введите число в десятичной системе счисления: N= ", x
INPUT "и новое основание (1<Q<37): Q= ", q
m = INT(LOG(x) / LOG(q) + eps) : r = q ^ m: p = x
IF m < 0 THEN t = "0." + STRING$(-m – 1, "0") ELSE t = ""
WHILE (m >= -16) AND (r > eps): j = INT(x / r) : x = x - j * r
RESTORE: FOR i = 0 TO j: READ a: NEXT 'чтение из стека DATA
m = m – 1: r = r / q: t = t + a: IF m = -1 THEN t = t + "."
WEND
PRINT "Результат перевода:": PRINT p;"(10) ---> "; t + "(";q;")"
Введя десятичное число 21 и новое основание 13.7, получим на экра-не результат: 21 (10) 17.416CD1BB33 (13.7).
Если основание системы счисления меньше единицы, код прог-раммы следует существенно переделать. Как?