- •Программирование в excel
- •Симферополь 2000
- •Факультет "Механизация сельского хозяйства" Программирование в excel
- •1. Основы программирования на vba
- •1.1. Создание, редактирование и запись программ
- •1.1.1. Запись макроса
- •1.1.2. Как найти макрос в проекте
- •1.1.3. Написание новой процедуры
- •Чем макрос отличается от процедуры
- •1.1.4. Процедуры типа Sub и Function
- •1.1.5. Закрытые и открытые процедуры
- •1.1.6. Использование значения, возвращаемого функцией
- •1.1.7. Выполнение процедуры Sub
- •1.1.8. Передача аргументов в процедуру
- •1.1.9. Именованные аргументы
- •1.1.10. Написание процедур для обработки событий
- •1.1.11. Где хранится код обработки события
- •1.1.12. Средства, ускоряющие написание программ
- •1.1.13. Как написать легкочитаемую программу
- •1.2. Переменные, константы и типы данных
- •1.2.1. Типы данных в Visual Basic
- •1.2.2. Объявление константы, переменной или массива
- •1.2.3. Объявление объектной переменной
- •1.2.4. Встроенные константы
- •1.3. Управляющие конструкции
- •1.3.1. Операторы ветвления
- •1.3.2. Операторы циклов
- •1.3.3. Вложение управляющих конструкций
- •1.3.4. Выход из циклов и процедур
- •1.4. Структура программы
- •2. Сортировка данных
- •2.1. Алгоритм сортировки обменами (алгоритм “пузырька”)
- •2.2. Алгоритм сортировки вставками
- •2.3. Алгоритм сортировки выбором элемента
- •2.4. Алгоритм быстрой сортировки (метод Хоора)
- •2.5. Алгоритм пирамиды (метод Уильямса-Флойда)
- •2.6. Учебные задачи по программированию сортировки данных
- •3. Работа vba с объектами Excel
- •3.1. Как получить справку по Visual Basic для Microsoft Excel
- •3.2. Объекты Microsoft Excel
- •3.3. Работа с объектом Application
- •3.4. Работа с объектом Workbook
- •3.4.1. Открытие рабочей книги
- •3.4.2. Закрытие рабочей книги
- •3.4.3. Создание и сохранение рабочей книги
- •3.5. Работа с объектом Range
- •3.6. Строковые ссылки в стиле а1 или имена диапазонов
- •3.6.1. Числовые индексы строк и колонок
- •3.6.2. Свойство Offset
- •3.6.3. Свойства CurrentRegion и UsedRange
- •3.6.4. Организация циклов для перебора ячеек диапазона
- •3.6.5. Применение свойства Address для отладки кода, работающего с объектом Range
- •3.7. Работа с событиями
- •3.7.1. Включение и отключение обработки событий
- •3.7.2. Использование событий, связанных с рабочими листами
- •3.7.3. События на уровне рабочего листа
- •3.7.4. События на уровне диаграммы
- •3.7.5. События на уровне рабочей книги
- •3.7.6. События на уровне приложения
- •3.7.7. Модули классов и события
- •4. Численные методы математики
- •4.1. Методы решения нелинейных уравнений
- •4.1.2. Метод деления отрезка пополам (метод дихотомии).
- •4.1.3. Метод Ньютона (касательных).
- •4.1.4. Метод хорд (секущих).
- •4.1.5. Метод итераций (метод последовательных приближений).
- •4.2.1. Теоретические сведения
- •4.2.2. Метод Крамера
- •4.2.3. Метод Гаусса
- •4.2.6. Метод Зейделя
- •4.3. Обработка экспериментальных данных
- •4.3.1. Задачи, которые возникают при обработке экспериментальных данных.
- •4.3.2. Интерполяция
- •4.3.2.1. Интерполяция функций
- •4.3.3.2. Определение параметров эмпирической формулы
- •4.4. Методы численного интегрирования
- •4.4.1. Метод трапеций
- •4.4.2. Метод Симпсона
- •4.4.3. Оценка точности формул численного интегрирования. Выбор шага интегриров-ания
- •4.4.3.1. Выбор шага интегрирования по оценке остаточного члена (ошибки)
- •4.4.3.2. Выбор шага интегрирования с помощью двойного пересчета
- •4.5.1. Теоретические сведения
- •4.5.2. Одноступенчатые методы
- •4.5.2.1. Решение с помощью рядов Тейлора
- •4.5.2.2 Метод Эйлера
- •4.5.2.3. Модифицированный метод Эйлера
- •4.5.2.4. Метод Эйлера-Коши
- •4.5.2.5 Метод Рунге-Кутта
- •4.5.3. Многоступенчатые методы
- •4.5.3.1. Методы прогноза и коррекции
- •4.6. Методы решения линейной краевой задачи для обыкновенных дифференциальных уравнений
- •4.6.1. Постановка задачи
- •4.6.2. Метод конечных разностей
- •4.6.3. Метод прогонки
- •4.6.4. Алгоритм решения краевой задачи методом прогонки.
2.6. Учебные задачи по программированию сортировки данных
1. Обработка одномерного массива чисел
Задача 1.1. Отсортировать массив действительных чисел по возрастанию (неубыванию) абсолютных величин элементов массива. Отсортированные данные вывести на экран и печать.
Задача 1.2. Отсортировать массив натуральных чисел по возрастанию значений последней цифры в записи числа.
Задача 1.3. Отсортировать массив натуральных чисел по возрастанию значений первой цифры в записи числа.
Задача 1.4. Отсортировать массив натуральных чисел по убыванию значения суммы цифр в записи числа.
Задача 1.5. Отсортировать элементы массива натуральных чисел, расположенные на четных местах, по возрастанию, а элементы, расположенные на нечетных местах - по убыванию.
Задача 1.6. Отсортировать по возрастанию все положительные элементы массива.
Задача 1.7. Отсортировать по убыванию все отрицательные элементы массива.
Задача 1.8. Отсортировать элементы массива действительных чисел в порядке возрастания длины их дробной части.
Задача 1.9. Отсортировать первую половину массива по возрастанию, а вторую - по убыванию значений элементов.
Задача 1.10. Проверить наличие упорядоченности элементов массива по возрастанию или по убыванию.
2. Обработка двухмерного массива чисел
Задача 2.1. Отсортировать строки двумерного массива чисел по возрастанию значений элементов в первом столбце.
Задача 2.2. Отсортировать строки двумерного массива чисел по возрастанию значений элементов, расположенных на главной диагонали.
Задача 2.3. Отсортировать строки двумерного массива чисел по убыванию значений элементов, расположенных на побочной диагонали.
Задача 2.4. Отсортировать столбцы двумерного массива чисел по возрастанию значений элементов в первой строке.
Задача 2.5. Отсортировать столбцы двумерного массива чисел по возрастанию значений элементов, расположенных на главной диагонали.
Задача 2.6. Отсортировать столбцы двумерного массива чисел по убыванию значений элементов, расположенных на побочной диагонали.
Задача 2.7. Отсортировать элементы, расположенные на главной диагонали двухмерного массива по возрастанию, а элементы, расположенные на побочной диагонали - по убыванию.
Задача 2.8. Первый столбец массива содержит номер года, второй - номер месяца, третий - число (день). Отсортировать все строки массива в порядке возрастания значения даты.
Задача 2.9. Отсортировать по возрастанию элементы массива, расположенные по его периметру (в направлении по часовой стрелке).
Задача 2.10. Отсортировать диагонали массива, расположенные над главной диагональю по возрастанию значений первого элемента каждой диагонали.
3. Обработка символьной информации
Задача 3.1. Отсортировать все символы в строке символов длиной n по алфавиту (по коду ASCII).
Задача 3.2. Отсортировать по алфавиту все символы в строке, которые являются буквами кириллицы.
Задача 3.3. Отсортировать по алфавиту (коду ASCII) все символы в строке, которые не являются буквами.
Задача 3.4. Отсортировать по алфавиту список фамилий учащихся класса (одномерный массив строк).
Задача 3.5 Отсортировать по алфавиту все слова, которые встречаются в строке символов.
Задача 3.6. Отсортировать элементы в одномерном массиве строк в порядке возрастания количества слов в строке.
Задача 3.7. Отсортировать слова, содержащиеся в строке символов в порядке убывания их длины.
Задача 3.8. Отсортировать все символы в двухмерном массиве символов в направлении слева-направо, сверху-вниз (как одну строку символов).
Задача 3.9. Отсортировать по алфавиту все символы строки, расположенные в позициях с p по q (включительно).
Задача 3.10. Строка имеет длину 8 символов и представляет собой значение даты в форме: ‘дд.мм.гг’. Отсортировать по убыванию значения даты одномерный массив, состоящий из таких строк.
Лабораторная работа 3.
Составление алгоритмов сортировка данных.
Задание:
1.Составить алгоритм и программу сортировки данных:
1.1 методом обмена (алгоритм «пузырька»);
1.2 методом вставки;
1.3 методом выбора.
Алгоритм «пузырька»: исходные данные в столбце «С» (размер массива 200 значений), результаты сортировки – в столбце «D».
В качестве варианта (вариант 2) предложено использовать логическую переменную Switch, которая может быть равна FALSE (ложно) или TRUE (истинно).
Sub Bubble()
Dim SortArray(200)
i = 1
While Range("C" + LTrim$(Str$(i)))
SortArray(i) = Range("C" + LTrim$(Str$(i)))
i = i + 1
Wend
Limit = i - 1
Do
Key = 0 ‘вариант2: Switch = FALSE
For Row = 1 To (Limit - 1)
If SortArray(Row) > SortArray(Row + 1) Then
A = SortArray(Row)
SortArray(Row) = SortArray(Row + 1)
SortArray(Row + 1) = A
Key = Row
End If
Next Row
Limit = Key
For Row = 1 To i - 1
Range("D" + LTrim$(Str$(Row))) = SortArray(Row)
Next Row
Loop While Key > 0 ‘вариант2: Loop While Switch
End Sub
Алгоритм вставки: исходные данные в столбце «С» (размер массива 200 значений), результаты сортировки – в столбце «D».
Sub Insertion()
Dim SortArray(200)
i = 1
While Range("C" + LTrim$(Str$(i)))
SortArray(i) = Range("C" + LTrim$(Str$(i)))
i = i + 1
Wend
Limit = i - 1
For Row = 2 To Limit
TempVal = SortArray(Row)
For J = Row To 2 Step -1
If SortArray(J - 1) > TempVal Then
SortArray(J) = SortArray(J - 1)
Else
Exit For
End If
Next J
SortArray(J) = TempVal
For k = 1 To i - 1
Range("D" + LTrim$(Str$(k))) = SortArray(k)
Next k
Next Row
End Sub
Алгоритм обмена: исходные данные в столбце «С» (размер массива 200 значений), результаты сортировки – в столбце «D».
Sub Exchange()
Dim SortArray(200)
i = 1
While Range("C" + LTrim$(Str$(i)))
SortArray(i) = Range("C" + LTrim$(Str$(i)))
i = i + 1
Wend
Limit = i - 1
For Row = 1 To Limit
SmallestRow = Row
For J = Row + 1 To Limit
If SortArray(J) < SortArray(SmallestRow) Then
SmallestRow = J
End If
Next J
If SmallestRow > Row Then
A = SortArray(Row)
SortArray(Row) = SortArray(SmallestRow)
SortArray(SmallestRow) = A
End If
For k = 1 To Limit
Range("D" + LTrim$(Str$(k))) = SortArray(k)
Next k
Next Row
End Sub