Все примеры снабжены подробными комментариями в виде ремарок в программе и могут быть скопированы непосредственно в окно редактора.
Программа вычисления выражения y = 2x2 – 10 для целых чисел, при y ⊂ [0;100] и x ≥ 0.
Результат выводится в файл: каждое значение на новой строке.
В программе использованы две встроенные функции: Str() – для перевода числового значения результата в символьную форму и Trim() – для подавления пробелов в начале образующейся строки.
В программе допущена ошибка в порядке анализа оператора ветвления, когда первым оценивается редкое событие (If y > 100), прерывающее программу.
Sub Macro1() X = 0 'Задается переменная памяти X с числовым значением ноль r: 'Метка для перехода. Не рекомендуется к использованию, как устаревший способ y = 2 * X * X - 10 'Вычисление значения переменной y для текущего значения X If y >= 0 Then 'Анализируем только значения y >= 0 If y > 100 Then 'Если превышено допустимое значение y Exit Sub 'Завершить выполнение программы Else 'В противном случае сформировать строку результата и вывести её Selection.TypeText Text:=Trim(Str(X)) + ": " + Trim(Str(y)) Selection.TypeParagraph 'Добавить символ конца абзаца End If End If 'Конец оператора ветвления X = X + 1 'Увеличить на 1 значение переменной X GoTo r 'Перейти на метку r End Sub
Тоже, что и в предыдущем случае, но использованы: функция LTrim(), подавляющая только пробел в начале (а значит и работающая быстрее); цикл While...Wend, что позволило сократить код программы на 3 строки, несмотря на необходимость проводить вычисление выражения дважды; возведение в квадрат вместо умножения (код стал более универсальным).
В начале выполнения программы создается новый документ, что предотвращает порчу текущего документа или ошибку при попытке вывода информации в несуществующий документ.
Sub Macro2() Documents.Add DocumentType:=wdNewBlankDocument Dim X As Integer 'Создается переменная памяти X целочисленного типа X = 0 y = 2 * X ^ 2 - 10 While y <= 100 If y >= 0 Then Selection.TypeText Text:=LTrim(Str(X)) + ": " + LTrim(Str(y)) Selection.TypeParagraph End If X = X + 1 y = 2 * X ^ 2 - 10 Wend End Sub
Sub SQRT1() 'Извлечение целой части квадратного корня из целого числа Dim x As Double 'Объявим переменную, из которой извлекаем корень 'и присвоим ей тип Double, что позволит задать значение 'вплоть до 1.79769313486232E308 Dim y As Double 'Результат работы Again: 'Метка для повторной попытки ввода x x = InputBox("Введите число", "Извлечение квадратного корня") If x < 0 Then 'Введено невозможное число MsgBox "Число должно быть больше ноля!", , "Ошибка!" GoTo Again End If If x = 0 Or x = 1 Then 'Корень извлекать нет смысла y = x + 1 'Прибавим 1, так как его придется вычитать для вывода результата Else 'А иначе стоит попробовать '...Сюда надо вставить тот блок, который будет осуществлять проверку 'А вот то, что надо было сделать: (возможный вариант) y = 1 'Начинаем с 1, чтобы не упустить корень из 2 и 3 While y ^ 2 <= x 'Цикл ПОКА, продолжаюшийся до тех пор, пока искомый корень (у) 'в квадрате не превысит введенное в начале число (х) y = y + 1 'Раз условие не достигнуто, добавим к у ешё 1 Wend 'Начать цикл с начала, но уже с увеличенным значением у End If MsgBox "Квадратный корень из числа" + Str(x) + " равен" + Str(y - 1), , "Ответ" 'y - 1, так как цикл найдет значение, на 1 превышающее искомое End Sub