Программирование на visual basic
Скачать 1.19 Mb.
|
12. Построение графиков функций При решении многих задач результаты необходимо отобразить в гра- фическом виде. Для решения этой задачи идеально подходит мастер диа- грамм табличного процессора Excel. При этом программа пользователя должна вывести на рабочий лист данные для графика или диаграммы и вы- звать соответствующие методы, необходимые для графической иллюстра- ции результатов работы программы. Методы, соответствующие построе- нию графиков, можно получить, используя мастер диаграмм в режиме за- писи макроса. 12.1. Построить график функции y=x 4 + x 3 -2x-2 на отрезке [-2,2]. 146 Решение : В цикле for табулируем заданную функцию на отрезке [2,2] с шагом 0.1 и выводим результаты в первый и второй столбец рабочего листа Лист5. Для того чтобы записать ту часть программы, которая отвеча- ет за диаграмму, необходимо зайти на рабочий лист Лист5 и проделать следующие действия: 1) Выделить произвольную прямоугольную область. 2) Войти в пункт меню Сервис . Выбрать пункт Начать Запись … 3) Запомнить предложенное имя макроса и нажать кнопку OK. 4) Вызвать мастер диаграмм и на первом шаге выбрать тип диаграммы точечная , со значениями, соединенными отрезками без маркеров. 5) На втором шаге мастера диаграмм нажать кнопку готово 6) Остановить запись макроса, нажав на кнопку остановить запись панели инструментов Visual Basic или зайти опять в меню Сер- вис/Макрос/Остановить макрос 7) Зайти в записанный на шагах 4-6 макрос и перекопировать тело макроса в программу после оператора Next x. 8) Найти обращение к свойству Range(“..”) и правильно указать об- ласть, в которую наша программа записывает данные для графиков. Свойство PlotBy :=xlColumns, указывающее, что нужно строить график по столбцам, можно удалить, т.к. по умолчанию графики строятся по столбцам. 9) Запустить программу. Результатом работы программы будет график, нарисованный на рабо- чем листе с именем Лист5. Если последнюю строку, выданную мастером диаграмм удалить, то график будет выведен не на рабочий лист, а в от- дельный чистый лист типа диаграмма. Читатели могут поэкспериментировать с различными типами диа- грамм, а также включить другие шаги мастера диаграмм. Sub График111() Dim x As Double, n As Long Sheets("Лист5").Select n = 0 ' Номер строки для вывода координат точек ' Цикл по точкам графика For x = -2 To 2.00001 Step 0.1 n = n + 1 Cells(n, 1) = x Cells(n, 2) = x ^ 4 + x ^ 3 - 2 * x - 2 Next x ' Эти строки отвечают за построение графика функции Charts.Add ' Добавить диаграмму ' Задает тип диаграммы. Была выбрана точечная, со значениями, ' соединенными отрезками без маркеров ActiveChart.ChartType = xlXYScatterLinesNoMarkers ' Задает область в которой находятся данные для построения ‘ графика данные берутся из области "A1:Bn" рабочего 147 ‘ листа с именем Лист5 ActiveChart.SetSourceData Source:=Sheets("Лист5").Range("A1:B" _ + Trim(Str(n))) 'Задает область для построения диаграммы на том же листе ActiveChart.Location Where:=xlLocationAsObject, Name:="Лист5" End Sub 12.2. Написать программу для автоматического построения графика указанной ниже функции и касательной к нему при x 0 =0.5. Решение. Для вычисления значения функции в произвольной точке на- пишем подпрограмму-функцию Fun112(x) с действительным аргументом x. В переменной a вычисляется значение очередного слагаемого. Пере- менная z отвечает за знак перед слагаемыми. Переменная n равна степени в которую необходимо возвести x. Тогда целая часть числа n\2+1 будет равна номеру очередного слагаемого. Знак z меняем, когда целое число [n/2] четно (через два слагаемых). Function Fun112(x As Double) As Double Dim S As Double, a As Double, n As Long, z As Long a = x: S = a: n = 1: z = 1 While Abs(a) > 0.000000001 n = n + 2 a = a * x*x / ((n - 1) * n): S = S + z * a If (n \ 2 Mod 2) = 0 Then z = -z ' Поменять знак числа Wend Fun112 = S End Function Для получения координат графика касательной напишем две функции: FunDiv(x) и FunTang(x,x0). Первая функция вычисляет производную на- шей функции Fun112 в произвольной точке x, а вторая вычисляет ординату касательной в точке x. Для вычисления производной используем ее определение. Производ- ной называется предел отношения приращения функции на приращения аргумента при стремлении последнего к 0. В качестве ∆x возьмем достаточно малое число 0.000001. ! 15 ! 13 ! 11 ! 9 ! 7 ! 5 ! 3 15 13 11 9 7 5 3 + − − + + − − + = x x x x x x x x y ) ( ) ( lim 0 x x y x x y y x Δ − Δ + = ′ → Δ 148 Function FunDiv(x As Double) As Double Dim d As Double: d = 0.0000001 FunDiv = (Fun112(x + d) - Fun112(x)) / d End Function Уравнение касательной записывается в виде Y=f(x 0 )+f ′(x 0 )(x-x 0 ). Согласно этому уравнению пишем функцию FunTang(x,x 0 ). Function FunTang(x As Double, x0 As Double) As Double FunTang = Fun112(x0) + FunDiv(x0) * (x - x0) End Function Теперь напишем подпрограмму, которая табулирует функции Fun112 и FunTang, выводя значения абсциссы в первый столбец, а ординаты во вто- рой и третий столбцы. В эту же подпрограмму перекопируем из задачи 12.1 строки, отвечающие за построение графиков. Sub Graphics(a As Double, b As Double, h As Double, x0 As Double) Dim x As Double, n As Long n = 0 For x = a To b + 0.001 * h Step h n = n + 1 Cells(n, 1) = x Cells(n, 2) = Fun112(x) Cells(n, 3) = FunTang(x, x0) Next x ' Эти строки отвечают за построение графика функции Charts.Add ' Добавить диаграмму ' Задает тип диаграммы. Было выбрано Точечная со значениями, ' соединенными отрезками без маркеров ActiveChart.ChartType = xlXYScatterLinesNoMarkers ' Задает область, в которой находятся данные для построения ‘ графика теперь уже строим график на базе чисел находящихся в ‘ трех первых 'столбцах A, B и C. ActiveChart.SetSourceData Source:=Sheets("Лист6").Range("A1:C" _ + Trim(Str(n))) ' Где строить диаграмму? ActiveChart.Location Where:=xlLocationAsObject, Name:="Лист6" End Sub И наконец напишем основную программу, в которой задаем интервал [a,b], на котором нужно строить график, шаг между точками на графике h и абсциссу x 0 , в которой надо проводить касательную к графику. 149 Sub График112() Dim a As Double, b As Double, h As Double, x0 As Double Sheets("Лист6").Select a = -10: b = 10: h = 0.05: x0 = 0.5 Call Graphics(a, b, h, x0) End Sub Все приведенные в данном задании программные единицы (функции, подпрограммы и основную программу) необходимо поместить в произ- вольном порядке в один модуль. Разработанная программа получилась достаточно универсальной. Для построения графика другой функции необходимо просто заменить тело функции Fun112. Список литературы 1. Шмидт В. Visual Basic 5.0. –М. : АБФ, 1997. –688с. 2. Берков Н.А. , Беркова Н.Н. Алгоритмический язык Фортран. –М: МГИУ,1998. –94с. 3. Справочная информация пакета программ Microsoft Office 97. 150 Введение.................................................................... 1. Основные элементы языка .......................................... 5 1.1. Первая программа .................................................................... 5 1.2. Типы данных.............................................................................. 7 1.2.1. Константы ................................................................................ 7 1.2.2. Переменные величины ........................................................... 8 1.3. Операции и выражения ............................................................ 11 1.3.1. Оператор присваивания........................................................ 11 1.3.2. Арифметические операции и выражения ........................... 11 1.3.3. Логические операции и выражения .................................... 13 1.3.4. Битовые операции ................................................................. 15 1.3.5. Текстовые выражения........................................................... 17 1.4. Встроенные функции................................................................. 19 1.4.1. Математические функции .................................................... 19 1.4.2. Символьные функции ........................................................... 21 1.4.3. Функции преобразования.................................................... 23 1.4.4. Функции даты и времени ..................................................... 24 2. Управляющие операторы ............................................25 2.1. Оператор безусловного перехода ............................................ 25 2.2. Логические операторы if .......................................................... 25 2.2.1. Простой укороченный if....................................................... 26 2.2.2. Простой полный if................................................................. 26 2.2.3. Блочные операторы If ........................................................... 27 2.2.4. Укороченный блочный If ..................................................... 27 2.3. Оператор выбора........................................................................ 30 2.4. Операторы цикла....................................................................... 31 2.4.1. Оператор цикла For …Next .................................................. 31 2.4.2. Оператор цикла While........................................................... 33 2.4.3. Операторы цикла Do............................................................. 34 3. Массивы и пользовательские типы данных........... 36 3.1. Массивы переменных................................................................ 36 3.1.1. Описание массива ................................................................. 36 3.1.2. Задание начальных значений элементам массива ............. 37 3.2. Динамические массивы ............................................................ 40 3.3. Пользовательские типы данных............................................. 42 151 4. Операторы организации функций и подпрограмм 44 4.1. Подпрограммы-функции.......................................................... 44 4.1.1. Оператор FUNCTION ........................................................... 44 4.1.2. Необязательные параметры ................................................. 46 4.1.3. Передача параметров по ссылке и значению ..................... 46 4.1.4. Оператор Exit Function ......................................................... 47 4.1.5. Особенности использования в качестве формальных параметров массивов ............................................................................ 48 4.2. Подпрограммы............................................................................ 50 4.2.1. Оператор описания подпрограммы SUB ............................ 50 4.2.2. Оператор вызова подпрограммы CALL ............................. 50 4.2.3. Примеры подпрограмм......................................................... 51 4.2.4. Способы передачи формальных параметров ..................... 53 5. Ввод-вывод данных ......................................................... 5.1. Функция MsgBox ..................................................................... 54 5.2. Функция InputBox................................................................... 57 5.3. Вывод результатов в окно отладки ..................................... 58 5.4. Форматирование данных.......................................................... 61 5.4.1. Функция Format..................................................................... 61 5.4.2. Примеры форматов ............................................................... 61 5.4.3. Стандартные форматы.......................................................... 63 5.4.4. Форматы даты и время ......................................................... 64 5.5. Ввод-вывод в ячейки рабочего листа .................................... 65 5.6. Методы форматирования ячеек рабочего листа ................. 67 5.6.1. Методы выделения ячеек цветом ........................................ 67 5.6.2. Методы форматирования и очистки ячеек......................... 70 5.7. Операции ввода-вывода с файлами данных ........................ 72 6. Отладка программ........................................................... 7. Примеры решения простейших стандартных задач....... 77 7.1. Задачи на линейные алгоритмы ............................................. 77 7.2. Задачи на циклические алгоритмы........................................ 81 7.2.1. Арифметическая прогрессия................................................ 81 7.2.2. Геометрическая прогрессия ................................................. 82 7.2.3. Вычисление суммы арифметической последовательности83 7.2.4. Сумма индуктивных слагаемых .......................................... 85 152 7.3. Задачи на разветвляющиеся алгоритмы .............................. 87 8. Задачи сортировки .......................................................... 8.1. Перестановка элементов в массиве........................................ 90 8.2. Сортировка методом “пузырька”........................................... 93 8.2.1. Метод "пузырька" для массивов.......................................... 93 8.2.2. Метод "пузырька" для структур .......................................... 95 8.3. Сортировка методом выбора................................................... 97 8.4. Сортировка методом вставки.................................................. 98 8.5. Быстрая сортировка.................................................................. 99 8.6. Сравнения быстродействия основных типов сортировок101 9. Задачи на символьные переменные............................... 103 9.1. Задачи обработки текстовой информации.......................... 104 9.2. Задачи шифрования текста.................................................... 109 10. Задачи на массивы .......................................................... 10.1. Одномерные массивы натуральных чисел....................... 112 10.2. Задачи на одномерные массивы действительных чисел115 10.3. Задачи на двухмерные массивы действительных чисел120 11. Хранение чисел в памяти компьютера ..........................125 11.1. Перевод натуральных чисел в различные системы счисления 125 11.2. Программы перевода чисел в p-ичную систему счисления127 11.3. Перевод натуральных чисел в системы счисления, кратные двоичной.................................................................................................. 129 11.4. Перевод целых чисел в двоичный формат ....................... 133 11.5. Перевод вещественных чисел в двоичный формат ........ 136 11.6. Хранение символьной информации в памяти компьютера143 12. Построение графиков функций ...................................... 145 Список литературы............................................................. |