Курсовая работа
Язык программирования VBA
Выполнил: студент группы
Мт - 110501 Глухов И.В._____________________
Проверила:
Удинцева О.М._____________________________
Нормоконтроль_____________________________
Екатеринбург 2012
Оглавление
Введение. 4
Глава 1. 5
Переменные, константы, объявление типов данных. 5
Объект WorkBook. Его свойства, методы и события. 12
Метод половинного деления. 19
Метод касательных. 21
Глава2. Практическая часть. 23
1.Уравнение х2*2х=1. 23
2.Уравнение х4-х3-2х2+3х-3=0. 25
Заключение. 29
Список литературы.. 30
Задание на курсовую работу.
1. Задание 1 - Теоретические вопросы «Объект WorkBook. Его свойства, методы и события», «Переменные, константы, объявление типов данных».
2. Задание 2 - Описать метод половинного деления и метод касательных.
3. Практическая часть. Заданы два уравнения. Необходимо решить методом половинного деления и методом касательных. Проанализировать и сделать выводы.
1) х2*2х=1
2) х4-х3-2х2+3х-3=0
Введение.
Целью данной курсовой работы является раскрытие содержания тем «Метод половинного деления и метод касательных», «Переменные, константы, объявление типов данных,.»и «Объект WorkBook. Его свойства, методы и события» дальнейшее их закрепление путем выполнения теоретических и практических заданий, так же я постараюсь сравнить методы нахождения корней уравнений и найти наиболее оптимальный.
Глава 1.
Переменные, константы, объявление типов данных.
Любая программа оперирует какими-нибудь данными. Эти данные нужно где-то хранить, а также обрабатывать по определенным правилам. В данной главе мы рассмотрим такие понятия как переменные, типы данных и константы. Переменные представляют собой хранилища в которых размещаются обрабатываемые данные. Каждой переменной назначается какой-либо тип данных, определяя таким образом что с этой переменной можно делать и как. Типы данных определяют правила работы с этими переменными а также множество допустимых значений которые могут размещаться в переменных. Константы - специальные языковые конструкции имеющие заранее определенное значение.
Типы данных
Существует несколько способов по которым можно сгруппировать или разделить типы данных.
По способу объявления
Все типы данных делятся на предопределенные (встроенные) и на пользовательские (объявляемые). Встроенные типы данных - типы данных о которых компилятор знает изначально. Пользователю не нужно объявлять эти типы данных и он нигде не встретит действующего объявления этих типов данных. Пользовательские типы данных - типы данных создаваемые пользователем на основании встроенных типов данных или путем комбинирования нескольких уже определенных типов данных, пользовательских или встроенных.
По платформе
Типы данных разделяются на фундаментальные (fundamental) и общие (generic). Фундаментальные типы (их формат и множество значений) не зависят от реализации языка Delphi, его версии, операционной системы и процессора. Формат и множество значений общих типов данных специфичны для конкретной платформы и могут варьироваться в зависимости от версии Delphi, ОС и процессора. Следует стараться использовать общие типы данных где это возможно, т.к. они предоставляют оптимальную производительность и переносимость программ. Однако зависимость формата от платформы может создать проблемы с совместимостью когда речь идет о хранении (файлы) и обработке данных вне программы (передача данных другим программам или ОС).
По характеру данных:
Простые типы данных
Простые (simple) - типы данных которые могут хранить ограниченное множество упорядоченных значений. Простые типы данных подразделяются в свою очередь на несколько подразделов в зависимости от своей функциональности.
Порядковые типы данных
Порядковые (ordinal) - типы данных представляют собой типы данных которые могут хранить одно из значений упорядоченного набора. Порядковым типом данных называется тип описывающий множество значений каждое из которых имеет однозначно определенное предыдущее значение и последующее значение. Исключение - последнее и первое значение в типе, они не имеют соответственно последующего и предыдущего значений. Каждое значение в типе имеет порядковый номер. Для конкретного значения с порядковым номером N предыдущее значение имеет порядковый номер N-1 а последующее значение имеет порядковый номер N+1.
К порядковым типам данных относятся следующие предопределенные типы данных:все целочисленные типы (ShortInt, SmallInt, Integer, Cardinal, Int64, Word, LongInt, Byte, LongWord)
логический тип данных (Boolean)
символьный тип данных (Char)
перечислимые типы данных в которых явно не определены порядковые номера значений, тогда они автоматически определяются порядком заданным при описании возможных значений (типы данных создаваемые пользователем)
поддиапазон (тип производный от любого из предыдущих типов и включающий в себя подмножество значений базового типа)
Вещественные типы данных
Вещественный (real) тип данных определяет множество чисел которые могут быть записаны в форме с плавающей десятичной точкой. Количество значений определяемых вещественным типом очень большое, хотя и конечное. К вещественным типам данных относятся Real48, Real, Single, Double, Extended, Comp, Currency.
Строковые типы данных
Строка представляет собой последовательность символов. В Delphi существует три встроенных типа для строковых данных.
ShortString - короткие строки, длиной до 255 символов.
AnsiString, String - длинные строки, длиной до ~2^31 символов.
WideString - ~2^30 символов Unicode
Ниже описаны достаточно сложные типы данных.. Поэтому здесь они описываются очень кратко и поверхностно, детальное их описание будет дано много позже, когда мы подойдем к использованию свойств языка которые активно используют эти типы данных.
Структурированные типы данных
Экземпляры структурированных типов данных могут содержать в себе одновременно несколько значений. К структурированным типам данных относятся:
set - множества.
array - массивы.
record - записи.
class - классы.
classreference - ссылки на класс.
interface - интерфейсы.
Указатели
Указатели не содержат каких-либо значений, они содержат в себе адреса в оперативной памяти где эти значения находятся. Этот тип данных также будет описан подробно в нескольких последующих лекциях. Указатели бывают типизированные (typed) и нетипизированные (untyped). Типизированные указатели представляют собой типы данных которые описаны таким образом что компилятор знает как корректно работать со значениями на которые они указывают. Нетипизированные указатели представляют собой единственный тип данных pointer. Компилятор не знает как работать со значениями на которые он указывает, это за него должен сделать программист. Указатели также являются одним из мощнейших средств языка Delphi, однако они-же являются источником большинства трудноуловимых и фатальных ошибок.
Процедурные типы данных
Процедурные типы данных дают возможность использовать другие сущности языка - такие как функции, процедуры и методы в качестве значений.
Варианты
Варианты, а точнее вариант (variant) - единственный тип данных который может содержать значения разных типов. Тип значений хранимых вариантом не определен на этапе компиляции и управляется программистом.
Объявление типов
Типы данных определяемые пользователем (т.е. программистом) объявляются в секции определения типов которая начинается с зарезервированного слова type и имеет вид:
type
TypeDeffinitionList
... гдеTypeDeffinitionList - списокобъявляемыхтипов. Количество типов в списке должно быть больше 0. Нельзя просто употребить в тексте программы зарезервированное слово type если за ним не следует список объявляемых типов данных.
TypeDeffinition1;
TypeDeffinition2;
... где TypeDeffinitionN - объявление одного типа данных.
TypeName=TypeDeclaration;
TypeName - идентификатор нового типа данных, определенного здесь.
TypeDeclaration - описание типа данных.
Переменные
Данные, которыми манипулирует программа, хранятся в переменных. Каждая переменная принадлежит к одному из типов данных. По другому говорят что "такая-то переменная является переменной такого-то типа" или "такая-то переменная имеет тип такой-то". Указание типа данных для переменной является важным свойством языка. Указание типа данных определяет правила по которым переменная может быть использована, способы ее использования и допустимый набор действий которые могут быть произведены над данными хранящимися в этой переменной. Самое главное, то что задание типа данных для переменной информирует компилятор о том какие "правила игры" нужно принять во время работы с этой переменной. Таким образом компилятор имеет возможность проанализировать корректность операций производимых над переменными и сообщить программисту о ошибках, буде тот в своем программном коде нарушает правила игры.
Переменные имеют также имена или по другому идентификаторы. По имени переменной компилятор (да и программист тоже:-) отличают одну переменную от другой.
Над переменными возможно производить две фундаментальных операции - присвоить переменной какое-нибудь значение и использовать значение присвоенное переменной для каких-нибудь целей.
Переменные объявляются в секции объявления переменных, которая начинается с ключевого слова var. Формат объявления переменных:
var
VariableDeffinitionList
где VariableDeffinitionList - список объявленных переменных. В списке переменных обязательно должна быть объявлена хотя-бы одна переменная.
VariableList1:VariableDatatype1;
VariableList2:VariableDatatype2;
VariableListN:VariableDatatypeN;
гдеVariableList - списокобъявляемыхпеременныхтипаVariableDataTypeиразделенныхзапятыми.
VariableIdent1,VariableIdent2,...,VariableIdentN:VariableDataType;
VariableIdent - идентификатор объявляемой переменной.
VariableDataType - идентификатор типа переменной.
Как видите можно объявлять сразу-же несколько переменных одного типа в одной строке. Можно объявлять и по одной. Никакой разницы не будет.
Константы
Иногда нам требуется использовать в тексте программы фиксированные значения, т.е. значения которые не должны изменяться в процессе выполнения программы. Например в программе расчета давления машины на грунт это может быть количество колес автомобиля - 4. Предположим везде в расчетах мы будем использовать это число - 4. Но что будет если нам предложат переделать программу чтобы она считала давление на грунт БТР-а, у которого этих колес 8 штук? Идея просматривать код и заменять везде 4 на 8 - не самая лучшая. Гораздо удобнее и правильнее определить константу и назначить ей нужное значение, а потом использовать вместо значения эту константу. «Компилятор» сам подставит значение константы в тех местах где она была использована. Таким образом нам достаточно лишь будет исправить значение константы с 4 на 8 а потом перекомпилировать программу.
Константы подразделяются на два вида - истинные (trueconstants) и типизированные (typed). Истинные константы - собственно и есть константы в чистом виде. Типизированные константы - константы которые могут содержать типизированные значения. Например можно объявить массив-константу или запись-константу.
Главное и наиболее полезное свойство констант, это то что они неизменны на протяжении всего времени выполнения программы. Программа в которой производится попытка изменить значение константы просто не скомпилируется.
Константы, так-же как переменные и типы данных, объявляются в своей секции объявления констант которая начинается с зарезервированного слова const. Объявление констант имеет следующий формат:
const
ConstantDeffinitionList
... где ConstantDeffinitionList - список объявлений констант. Если вы указали секцию объявления констант, то в списке констант должна быть объявлена хотя-бы одна константа.
ConstantDeffinition1
ConstantDeffinition2
ConstantDeffinitionN
ConstantDeffinition - объявлениеистиннойилитипизированнойконстанты.Объявление истинной константы имеет формат:
ConstantIdent=ConstantExpression;
Объявление типизированной константы больше похоже на объявление переменной и отличается от него только тем что переменной не присвоено изначально никакое значение, а константе изначально присвоено конкретное значение определенное в коде программы. Формат объявления типизированной константы:
ConstantIdent:DataType=ConstantExpression;
ConstantIdent - идентификаторконстанты.
DataType - тип данных к которому принадлежит значение константы.DataType может быть как идентификатором ранее объявленного типа данных, так и объявлением типа данных на месте.
ConstantExpression - константное выражение. Константное выражение - такое выражение которое может быть вычислено компилятором во время компиляции. В константном выражении могут присутствовать идентификаторы других, уже определенных, констант.
Объект WorkBook. Его свойства, методы и события
Терминальные свойства объекта Workbook
Терминальных свойств, как обычно, множество. Они проще, чем свойства, задаваемые объектами. Среди них достаточно много булевых свойств, позволяющих включать или отключать то или иное свойство рабочей книги. Я приведу сводку некоторых из этих свойств, позволяющую получить общее представление о том, как можно управлять характеристиками рабочей книги Excel с помощью этих свойств.
Таблица 1. Терминальные свойства объекта Workbook | |
Терминальные свойства | Назначение свойства |
AcceptLabelsInFormula | Булево свойство со значением True, если метки могут использоваться в формулах рабочего листа. По умолчанию - True. |
HasRoutingSlip | Булево свойство со значением True, если книга может быть направлена по сети другим участникам разработки документа. |
Routed | Булево свойство со значением True, если документ был направлен следующему участнику разработки. |
MultiUserEditing | Булево свойство со значением True, если книга открыта для разделяемого доступа. |
AutoUpdateFrequency | Задает частоту (в минутах), с которой сделанные изменения передаются участникам разделяемого доступа. Если свойство имеет значение 0, то книга будет пересылаться только в момент ее сохранения |
AutoUpdateSaveChanges | Булево свойство со значением True, если сделанные изменения автоматически пересылаются всем участникам разработки. Предыдущий параметр должен иметь значение в пределах от 5 до 1440, чтобы это свойство оказало эффект. |
ListChangesOnNewSheet | Булево свойство со значением True, если сделанные изменения показываются на отдельной странице при разделенном доступе |
KeepChangeHistory | Булево свойство со значением True, если при разделенном доступе сохраняется история сделанных изменений. |
ChangeHistoryDuration | Устанавливает число дней, в течение которых сохраняются изменения в их истории. Старые изменения, срок которых превышает заданную установку, из истории удаляются |
CreateBackup | Булево свойство со значением True, если при сохранении книги создается ее резервная копия. |
CodeName | Рабочие книги, листы и другие объекты Excel имеют два имени - собственное и кодовое. В момент создания объекта они совпадают, например "Лист1", но затем каждое из них может быть независимо изменено. Кодовое имя может быть изменено только вручную в окне свойств. Программно оно может быть использовано только для чтения. Важно то, что кодовое имя можно использовать для непосредственного именования объекта, что сокращает цепочку вызовов. Так непосредственно можно обратиться к объектуЛист1.Range(myRange) |
FullName | Полное имя рабочей книги, заданное в виде строки, включающее путь к файлу, хранящему книгу. Имеет статус "только для чтения". |
FileFormat | Свойство имеет статус "только для чтения" и возвращает константу, задающую формат файла и/или тип рабочей книги |
HasPassword | Булево свойство со значением True, если документ имеет пароль защиты |
Saved | Булево свойство со значением True, если не делалось никаких изменений с момента последнего сохранения документа. |
WriteReserved | Булево свойство со значением True, если документ закрыт для записи. |
Новые терминальные свойства объекта Workbook в Excel 2000 | |
EnvelopeVisible | Новое в Excel 2000 терминальное булево свойство, при включении которого появляется панель для отправки электронной почты и заголовок отправляемого сообщения. |
VBASigned | Новое в Excel 2000 терминальное булево свойство, которое показывает, имеет ли программный проект данной книги цифровую подпись. Свойство имеет статус "только для чтения". |
Методы объекта Workbook
Дадим теперь краткую характеристику основным методам объекта Workbook. Мы уже говорили о том, что создаются и открываются рабочие книги методами коллекции Workbooks - Add, Open и OpenTextFile. А вот закрываются и сохраняются, используя собственные методы. С них мы и начнем описание методов:
Save, SaveAs, SaveCopyAs - позволяют сохранить рабочую книгу, без ее закрытия и удаления из коллекции Workbooks. При первом сохранении следует применять метод SaveAs, чтобы задать имя файла, в котором книга сохраняется. Метод имеет и другие параметры - формат хранения, пароль, статус и другие характеристики. Последний из этой группы методов создает копию рабочей книги.
· Close - выполняет те же функции, что и Save, но одновременно закрывает книгу и удаляет ее из коллекции.
· Activate - активизирует рабочую книгу.
· Route - направляет рабочую книгу по сети всем участникам совместной разработки. Список участников и другие характеристики задаются в свойствах объекта RoutingSlip.
· AcceptAllChanges, RejectAllChanges - принимает или отвергает все изменения, сделанные участниками совместной разработки документа при разделенном доступе.
· RefreshAll - обновляет сводные таблицы и все области, содержащие внешние данные.
· PurgeChangeHistoryNow (Days,SharingPassword) - удаляет из истории изменений все те, чей срок хранения превосходит число дней, заданных параметром Days. Второй параметр задает общий пароль.
· Protect, ProtectSharing, Unprotect, UnprotectSharing - методы, включающие и выключающие пароли личные и общие рабочей книги.
· ExclusiveAccess - если книга открыта с разделяемым доступом, то этот метод дает пользователю, вызвавшему его, исключительное право доступа - изменения, сделанные всеми остальными пользователями должны сохраняться в отдельных файлах.
· ChangeFileAccess(Mode, WritePassword, Notify) - изменяетстатусдоступа. Новый статус задается параметром Mode, который может принимать одно из двух значений: xlReadWrite иxlReadOnly. Если файл снабжен паролем и получает статус для записи и чтения, то второй параметрWritePassword задает пароль на запись. Если булев параметр Notify имеет значение True, то пользователь получает уведомление, когда файл недоступен.
· AddToFavorites - добавляет в папку Favorites ярлычок рабочей книги.
· PivotCaches - возвращает коллекцию областей памяти, отводимых сводным таблицам данной рабочей книги. Элементами этой коллекции являются объекты PivotCache. Каждой сводной таблице - объекту PivotTable отводится своя память (кэш), которую и задает объект PivotCache.
· RunAutoMacros - запускает на выполнение все автомакросы данной книги.
LinkSources([Type]), ChangeLink(Name As String, NewName As String, [Type As XlLinkType = xlLinkTypeExcelLinks]), OpenLinks(Name As String, [ReadOnly], [Type]), LinkInfo(Name As String, LinkInfo As XlLinkInfo, [Type], [EditionRef]), UpdateLink([Name], [Type]) - группаметодов, позволяющих работать со ссылками. Ссылки могут быть четырех типов:
· на другие рабочие книги Excel,
· на документы, связанные по протоколу OLE (например, документы Word, на которые ссылается рабочая книга) или протоколу DDE,
· на издателей книги при совместной работе над книгой и ее публикации на сервере,
· на подписчиков книги, опубликованной на сервере и доступной для подписчиков.
- Метод LinkSources позволяет получить все ссылки типа, заданного его параметром. Если параметр не указан, то будут выданы ссылки на книги Excel.
- Следующий метод Change позволяет изменить ссылку, Open - открыть документ по заданной ссылке, Info - получить некоторую информацию о документе, Update - обновить ссылки. (отступ первой строки)
У объекта Workbook в Excel 2000 появились два новых метода:
· Sub ReloadAs(Encoding As MsoEncoding),
· SubWebPagePreview().
· Оба метода, так или иначе, связаны с общей тенденцией публикации документов Excel в Интернет. Рабочие книги, публикуемые в Интернет и интранет, хранятся, естественно в формате HTML. При их чтении могут возникнуть проблемы с кодировкой.
· Метод ReloadAs(EncodingAsMsoEncoding)позволяет перезагрузить книгу в формате HTML, используя нужную кодировку, заданную параметром метода, значением которого может быть, например, константа msoEncodingCyrillic.
· МетодWebPagePreview позволяет перед публикацией книги отобразить ее на дисплее в том виде, как будет выглядеть соответствующая Web-страница, открываемая в интернет для работы с рабочей книгой.
Методы объекта Workbook предназначены, как можно видеть, для выполнения общих операций над документом и по существу не определяют специфических для Excel действий. Чтобы познакомиться со спецификой, следует пойти вглубь иерархии объектов.
События объекта Workbook
Со всеми событиями, которые может обрабатывать объект Workbook, мы уже знакомы. Всего таких событий 20, из них 9 событий связаны непосредственно с самим объектом Workbook, 8 - возникают на страницах рабочей книги и связаны также с объектом Sheet, три события связаны с объектом Window. Я напомню, что при возникновении события сообщение о нем операционная система посылает, как правило, нескольким объектам. Все они, каждый по-своему, могут обрабатывать это событие. Подробно обо всем этом рассказано при рассмотрении событий объекта Application.
Метод половинного деления
Решение алгебраического уравнения. Для численного решения алгебраическихуравнений существует множество способов. Среди самых известных можно назвать метод Ньютона, метод Хорд, и «всепобеждающий» метод Половинного Деления.Сразу оговоримся, что любой метод является приближенным, и по сути дела лишь уточняющим значение корня. Однако уточняющим до любой точности, заданной Нами.Метод половинного деления или дихотомии (дихотомия - сопоставленность или противопоставленность двух частей целого) при нахождении корня уравнения f(x)=0 состоит в делении пополам отрезка [a; b], где находится корень. Затем анализируется изменение знака функции на половинных отрезках, и одна из границ отрезка [a; b] переносится в его середину. Переносится та граница, со стороны которой функция на половине отрезка знака не меняет.Далее процесс повторяется. Итерации прекращаются при выполнении одного из условий: либо длина интервала [a; b] становится меньше заданной погрешности нахождения корня ε, либо функция попадает в полосу шума ε1 – значение функции сравнимо с погрешностью расчетов. Сначала поставим задачу. Дана монотонная, непрерывная функция f(x), которая содержит корень на отрезке [a,b], где b>a. Определить корень с точностью ε, если известно, что f(a)*f(b)<0 Дано уравнение вида: f(x)=0; (1)необходимо найти удовлетворяющие ему значения x..
истина |
начало |
Ввод a, b, eps |
x= (a + b)/2,i=0 |
F (x)=x^2*2^x |
F(x) =0 |
Abs (F(x))<eps |
F(x)*F (a)>0 |
x: = b |
x = (a + b)/2,i=i+1 |
конец |
Печать х,i |
x: = a |
истина |
истина |
ложь |
ложь |
ложь |
Рис.1 Блок-схема |
Геометрическая интерпретация
Основная идея метода заключается в следующем: задаётся начальное приближение вблизи предположительного корня, после чего строится касательная к исследуемой функции в точке приближения, для которой находится пересечение с осью абсцисс. Эта точка и берётся в качестве следующего приближения. И так далее, пока не будет достигнута необходимая точность.Пусть — определённая на отрезке и дифференцируемая на нём вещественнозначная функция. Тогда формула итеративного исчисления приближений может быть выведена следующим образом:
где — угол наклона касательной в точке .
Следовательно, искомое выражение для имеет вид:
Рис.2.
Рис.3. Блок-схема.
Да |
Нет |
Да |
Нет |
Конец |
x, f(x) |
f=d(x) |
|h|<=e |
f=d(b) |
h=f/f1 x=x-h |
F1=d1(x) |
F=d(x) |
X=a |
X=b |
F*f2>0 |
F2=d2(b) |
Ввод a,b,e |
Начало |