Скачать презентацию ОСНОВЫ АЛГОРИТМИЗАЦИИ И ПРОГРАММИРОВАНИЯ ЛЕКЦИЯ 2 Зарецкий М Скачать презентацию ОСНОВЫ АЛГОРИТМИЗАЦИИ И ПРОГРАММИРОВАНИЯ ЛЕКЦИЯ 2 Зарецкий М

ОСАП_Лекция_2.ppt

  • Количество слайдов: 62

ОСНОВЫ АЛГОРИТМИЗАЦИИ И ПРОГРАММИРОВАНИЯ ЛЕКЦИЯ 2 Зарецкий М. В. кафедра ВТи. ПМ ОСНОВЫ АЛГОРИТМИЗАЦИИ И ПРОГРАММИРОВАНИЯ ЛЕКЦИЯ 2 Зарецкий М. В. кафедра ВТи. ПМ

Способ описания формального языка Определение записывается в виде: определяемый_объект : : = определяющее выражение. Способ описания формального языка Определение записывается в виде: определяемый_объект : : = определяющее выражение. Обязательная часть описываемого записывается в угловых скобках <>, необязательная часть – в квадратных скобках []. Варианты определения разделяются вертикальной чертой |.

Приведем примеры. <десятичная цифра>: : =0|1|2|3|4|5|6|7|8|9 <двоичная цифра>: : =0|1 <строчная буква латинского алфавита>: Приведем примеры. <десятичная цифра>: : =0|1|2|3|4|5|6|7|8|9 <двоичная цифра>: : =0|1 <строчная буква латинского алфавита>: : =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 <заглавная буква латинского алфавита>: : =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 Итак, перед нами язык для описания языка – метаязык. А формулы называются металингвистическими формулами Бэкуса. Наура.

Джон Бэкус ( John Backus, 1924 — 2007) — американский учёный в области информатики. Джон Бэкус ( John Backus, 1924 — 2007) — американский учёный в области информатики.

Пи тер На ур (Peter Naur; 1928) — датский учёный в области информатики Пи тер На ур (Peter Naur; 1928) — датский учёный в области информатики

Представление данных в компьютере Изучая информатику, вы узнали, что минимальной единицей информации является один Представление данных в компьютере Изучая информатику, вы узнали, что минимальной единицей информации является один бит. Вспомните, что это такое! 8 бит образуют один байт. 1024 (210) байт образуют килобайт. 1024 (210) килобайт образуют мегабайт. Продолжите эту последовательность самостоятельно.

Представление числовых данных В математике множество натуральных чисел является подмножеством множества целых чисел, которое, Представление числовых данных В математике множество натуральных чисел является подмножеством множества целых чисел, которое, в свою очередь, является подмножеством множества рациональных чисел, которое, в свою очередь, является подмножеством множества вещественных (действительных) чисел. При рассмотрении комплексных чисел те же рассуждения можно применить к вещественной и мнимой частям числа.

 Применительно к компьютерной арифметике, строго говоря, такой цепочки подмножеств нет. Целые неотрицательные числа, Применительно к компьютерной арифметике, строго говоря, такой цепочки подмножеств нет. Целые неотрицательные числа, называемые в компьютерной литературе «целые беззнаковые» кодируются в виде двоичного числа, занимающего отводимое в соответствии с типом числовой переменной количество байтов.

 Целые числа, которые могут быть положительными, отрицательными или равными 0, кодируются сложнее. Знак Целые числа, которые могут быть положительными, отрицательными или равными 0, кодируются сложнее. Знак числа определяется первым битом (0 – положительное, 1 – отрицательное). Рассмотрение данного способа кодирования не входит в нашу программу. Любознательные могут обратиться к книге [1].

 Рассмотрим теперь представление чисел, которые могут иметь как целую, так и дробную часть Рассмотрим теперь представление чисел, которые могут иметь как целую, так и дробную часть (в компьютерной литературе такие числа называются вещественными). Такие числа характеризуются не только диапазоном представления (от минимального до максимального), но и точностью представления.

 Точность вещественного числа характеризуется количеством значащих цифр, сохраняемых в отведенном для числа количестве Точность вещественного числа характеризуется количеством значащих цифр, сохраняемых в отведенном для числа количестве байтов. Все вещественные цифры хранятся в нормализованной форме, имеющей вид:

 Здесь: a - вещественное число; m – мантисса (правильная дробь с ненулевым старшим Здесь: a - вещественное число; m – мантисса (правильная дробь с ненулевым старшим разрядом); P - основание системы счисления; q - характеристика (степень, в которую возводится основание системы счисления). Например, 279, 987 будет представлено в виде: 0. 279987 х103, -0. 0432 будет представлено в виде: -0. 432 х10 -1.

Степени числа 10 в языке VBA обозначаются следующим образом: E+q или E-q, где q Степени числа 10 в языке VBA обозначаются следующим образом: E+q или E-q, где q – показатель степени числа 10. Например, E-1 обозначает 10 -1, E+3 обозначает 103. Таким образом, число 279, 987 должно быть представлено в виде 0. 279987 E+3, число -0. 0432 должно быть представлено в виде -0. 432 E-1. Внимание! Число пишется слитно, знак умножения не ставится!

 Разумеется, на самом деле компьютерное представление основано на двоичной системе счисления, но для Разумеется, на самом деле компьютерное представление основано на двоичной системе счисления, но для наших целей это не очень существенно.

Представление текстовых данных Все символы, из которых состоят текстовые данные кодируются числами. Таким образом, Представление текстовых данных Все символы, из которых состоят текстовые данные кодируются числами. Таким образом, текст хранится в памяти компьютера в виде последовательности чисел.

 В современных компьютерах для кодирования символов используется специальный код UNICODE. Изучение UNICODE не В современных компьютерах для кодирования символов используется специальный код UNICODE. Изучение UNICODE не входит в нашу программу, любознательные могут прочитать о нем в книге [1].

 Данные типа «деньги» (Currency), «дата» (Date) относятся к числовым. Данные типа данных Boolean Данные типа «деньги» (Currency), «дата» (Date) относятся к числовым. Данные типа данных Boolean могут принимать только значения «истина» или «ложь» . Данные могут иметь тип объектов Excel (если программа создается в среде Excel). Кроме того, в программе на VBA можно создавать и использовать собственные типы данных (записи, классы), но об этом речь впереди.

Основные типы данных VBA Целочисленные данные Тип Byte Integer Размер 1 2 Long 4 Основные типы данных VBA Целочисленные данные Тип Byte Integer Размер 1 2 Long 4 Boolean 2 Диапазон 0. . 255 -32768. . 32767 -2147483648. . 2147483647 True или False

Основные типы данных VBA Вещественные данные Тип Single Размер Диапазон 4 от -3. 402823 Основные типы данных VBA Вещественные данные Тип Single Размер Диапазон 4 от -3. 402823 E+38 до -1. 4011298 E-45 (для отрицательных) от 1. 401298 E-45 до 3. 402823 E+38 (для положительных)

Тип Размер Диапазон Double 8 от-1. 79769313486232 E+308 до-4. 94065645841247 E-324 (для отрицательных) от Тип Размер Диапазон Double 8 от-1. 79769313486232 E+308 до-4. 94065645841247 E-324 (для отрицательных) от 4. 94065645841247 E-324 до 1. 79769313486232 E+308 (для положительных)

Тип Размер Диапазон Currency 8 от -922337203685477. 5808 до 922337203685477. 5807 Date 8 от Тип Размер Диапазон Currency 8 от -922337203685477. 5808 до 922337203685477. 5807 Date 8 от 1 января 100 г. до 31 декабря 9999 г.

Основные типы данных VBA Нечисловые данные Тип Размер Диапазон Object 4 Любая ссылка на Основные типы данных VBA Нечисловые данные Тип Размер Диапазон Object 4 Любая ссылка на объект String 10+длина От 0 до 2 миллиардов символов String длина От 0 до 65400 символов

Тип Размер Диапазон Variant 16 Любое числовое значение вплоть до границ диапазоне Double Variant Тип Размер Диапазон Variant 16 Любое числовое значение вплоть до границ диапазоне Double Variant 22+длина От 0 до 2 миллиардов символов User-defined Определяется пользователем

 Обратите внимание на гигантские диапазоны представления данных. Разумеется, в реальных задачах ответы типа Обратите внимание на гигантские диапазоны представления данных. Разумеется, в реальных задачах ответы типа «десять в 128 степени» невозможны. Денежные суммы, выражаемые предельными значениями диапазона для данных типа Currency также абсурдны. Количество значащих цифр в ответе также следует выводить, сообразуясь со здравым смыслом. Мы научимся это делать.

Основные компоненты программы Программы, которые мы будем изучать представляют собой запись алгоритмов на языке Основные компоненты программы Программы, которые мы будем изучать представляют собой запись алгоритмов на языке программирования VBA. Для записи программы используются ключевые слова языка VBA – набор слов (и словосочетаний), имеющих в тексте программы строго зафиксированный смысл.

 Процесс обработки данных, задаваемый программой состоит из отдельных элементов, называемых операторами. Оператор описывает Процесс обработки данных, задаваемый программой состоит из отдельных элементов, называемых операторами. Оператор описывает некоторое действие, совершаемое с данными.

 Это действие может быть относительно простым, например, сложение нескольких чисел или весьма сложным, Это действие может быть относительно простым, например, сложение нескольких чисел или весьма сложным, например, вычисление значения функции, требующее ее разложения в ряд Тейлора (это далеко не предел сложности).

 Для выполнения сложных действий мы можем воспользоваться готовыми программными средствами, а если таких Для выполнения сложных действий мы можем воспользоваться готовыми программными средствами, а если таких нет, то нам приходится создавать их самостоятельно. Обрабатываемые программой данные могут быть переменными или константами.

 Переменная величина в программировании – это символическое имя для области компьютерной памяти, в Переменная величина в программировании – это символическое имя для области компьютерной памяти, в которой хранятся данные. Эти данные могут сколько угодно раз изменяться в ходе выполнения программы. Размер отводимой памяти определяется типом переменной. Об этом речь пойдет дальше.

 Переменные в VBA содержат числа, строки, данные более сложных видов. При выполнении оператора, Переменные в VBA содержат числа, строки, данные более сложных видов. При выполнении оператора, в котором присутствует переменная используются данные, хранящиеся в той области памяти, которая связана с переменной. Каждая переменная должна иметь уникальное в данной программе имя. Длина имени переменной не должна превышать 255 символов.

 Первым символом в имени переменной должна быть буква, за которой могут следовать буквы, Первым символом в имени переменной должна быть буква, за которой могут следовать буквы, цифры, символ подчеркивания “_”. Любые иные символы недопустимы! Нельзя в качестве имен переменных использовать ключевые слова VBA (заметим, что если мы только попытаемся такое вытворить, эта попытка будет пресечена системой разработки).

 При написании имен переменных можно использовать как строчные, так и заглавные буквы. Система При написании имен переменных можно использовать как строчные, так и заглавные буквы. Система разработки их не различает. При использовании явного описания переменной (на чем я решительно настаиваю) во всей программе переменная было сделано при ее описании. Пример. Переменная описана Dim Weight_in_Grams as Long Если в тексте программы написать w. Ei. Ght_i. N_g. RAm. S, то система сама исправит написание на Weight_in_Grams.

 Современные версии VBA позволяют использовать в именах переменных буквы, не принадлежащие латинскому алфавиту. Современные версии VBA позволяют использовать в именах переменных буквы, не принадлежащие латинскому алфавиту. Например, мы можем назвать переменную Зарплата. Язык VBA не запрещает использовать в качестве имени переменной имя одной из встроенных функций. Не советую так поступать – толку никакого, а проблемы могут возникнуть.

Описание переменных Воспользуемся рассмотренным в начале лекции способом описания конструкций языка по Бэкусу-Науру. <Dim> Описание переменных Воспользуемся рассмотренным в начале лекции способом описания конструкций языка по Бэкусу-Науру. <имя_переменной> [ <Тип>] Ключевое слово Dim говорит о том, что будет описана переменная. Затем следует имя описываемой переменной.

 Затем указывается тип переменной. Указание типа не является обязательным. Но лучше тип указать Затем указывается тип переменной. Указание типа не является обязательным. Но лучше тип указать – будет больше порядка в программе! При описании переменной ей выделяется место в памяти в соответствии с ее типом.

 Также при описании автоматически задается информация о том, какие операции можно с переменной Также при описании автоматически задается информация о том, какие операции можно с переменной производить и какие значения она может иметь. Примеры: Dim Цена as Currency Dim Weight as Single

Константы При написании программы на VBA некоторые величины заведомо не могут изменяться в ходе Константы При написании программы на VBA некоторые величины заведомо не могут изменяться в ходе выполнения программы. Для работы с ними удобно использовать константы. В языке VBA используются литеральные и символические константы.

 Значение литеральной константы записывается прямо в тексте программы. Строчные литеральные константы записываются в Значение литеральной константы записывается прямо в тексте программы. Строчные литеральные константы записываются в кавычках, а числовые – без какого-либо дополнительного форматирования. Пример. Учебная_Дисциплина = “ОСАП” Количество_Часов = 108 “ОСАП” и 108 – литеральные константы.

 Символическая константа должна быть описана. Ее описание имеет вид: <Const> <имя_константы> [<As> <тип>]< Символическая константа должна быть описана. Ее описание имеет вид: <имя_константы> [ <тип>]< = > <значение> Итак, символическая константа имеет имя. Описание типа для нее не является обязательным, при его отсутствии тип определяется по присвоенному значению. Значение символической константе присваивается один раз при ее описании.

Примеры: Const Имя as String = “Катя” Const Cash as Currency = 3000 Const Примеры: Const Имя as String = “Катя” Const Cash as Currency = 3000 Const Доход AS Currency = 15000 Зачем нужны символические константы? На этот вопрос мы дадим ответ в следующих лекциях.

Замечание. Две знаменитые константы – число e и число «пи» не надо описывать в Замечание. Две знаменитые константы – число e и число «пи» не надо описывать в качестве констант. Для них существуют функции, о которых будет сказано далее.

 В языке VBA нет строгих правил определяющих, где в программе следует помещать описания В языке VBA нет строгих правил определяющих, где в программе следует помещать описания переменных и символических констант. Логика и здравый смысл подсказывают, что лучше всего их размещать компактно в начале программы. В этом случае текст программы будет проще читать и легче будет находить в нем ошибки.

Действия над переменными и константами. Арифметические операции Число 1 + Число 2 Число 1 Действия над переменными и константами. Арифметические операции Число 1 + Число 2 Число 1 - Число 2 -Число 1 * Число 2 Число 1 / Число 2 Число 1 Число 2 (Целочисленное деление) Число 1 Mod Число 2 (Остаток от деления) Число 1^Число 2 (Возведение в степень)

 Переменные и константы, используемые в операции, называются операндами. Операндами могут быть сложные выражения, Переменные и константы, используемые в операции, называются операндами. Операндами могут быть сложные выражения, взятые в скобки. Результат выполнения операции зависит от типа и значений операндов! В некоторых операция не может быть выполнена, например, нельзя возвести отрицательное число в нецелую степень.

Арифметические выражения <Арифметическое выражение> : : = [<>]<Операнд 1>[<Знак операции><Операнд 2>… <Знак операции>: : Арифметические выражения <Арифметическое выражение> : : = [<>]<Операнд 1>[<Знак операции><Операнд 2>… <Знак операции>: : =+|-|*|/||Mod|^ Приоритеты при выполнении операций обычные для математики. При необходимости приоритет указывается с помощью скобок.

Арифметический оператор присваивания <Имя переменной> = <Арифметическое выражение> Примеры: P = 1 P= P+1 Арифметический оператор присваивания <Имя переменной> = <Арифметическое выражение> Примеры: P = 1 P= P+1 D = B^2 – 4*A*C

 Арифметический оператор присваивания следует понимать, как приказ компьютеру вычислить выражение, находящееся справа от Арифметический оператор присваивания следует понимать, как приказ компьютеру вычислить выражение, находящееся справа от знака присваивания и поместить его в участок памяти, отведенный для переменной, находящейся слева от знака присваивания.

Проблема выравнивания порядков При работе с вещественными числами возникает проблема при сложении или вычитании Проблема выравнивания порядков При работе с вещественными числами возникает проблема при сложении или вычитании чисел, которые существенно отличаются по величине. Точнее, при сложении «очень большого» и «очень маленького» чисел сумма будет равна «очень большому» слагаемому, очень маленькое не будет учтено.

 Такой же эффект возникает и при вычитании из «очень большого» числа «очень маленького» Такой же эффект возникает и при вычитании из «очень большого» числа «очень маленького» числа. Рассмотрим пример. В одном лесу живет медведь, который весит 700 кг. В том же лесу живут 30000000 (тридцать миллионов) муравьев, каждый из которых весит 0. 01 грамма. Надо найти общую массу всех этих живых существ.

 Подход простой и глупый. Ставим медведя на весы (не пытайтесь попробовать!). Потом кладем Подход простой и глупый. Ставим медведя на весы (не пытайтесь попробовать!). Потом кладем на него одного муравья, записываем показания весов. Затем убираем первого муравья, кладем второго и опять записываем показания весов и т. д. Очевидно, что стрелка весов (или индикатор электронных весов) на одного муравья не отреагирует. Получится, что муравьи ничего не весят. А это – неправда!

 Более разумный подход состоит в том, что сначала надо найти суммарную массу всех Более разумный подход состоит в том, что сначала надо найти суммарную массу всех муравьев, и ее уже прибавить к массе медведя. Получим правильный ответ. Одновременно получим интересный вывод – в компьютерной арифметике могут нарушаться самые элементарные математические законы – перемена мест слагаемых может изменить сумму!

Глупая программа для нахождения суммы весов животных. Имя переменной Тип Mas_of_one_Bear_Grams Single Mas_of_one_Ant_Grams Single Глупая программа для нахождения суммы весов животных. Имя переменной Тип Mas_of_one_Bear_Grams Single Mas_of_one_Ant_Grams Single Total_Mas_Wrong_Grams Single Number_of_Ants Long I Long

 • • • • Sub Silly() Dim Mas_of_one_Bear_Grams As Single Dim Mas_of_one_Ant_Grams As • • • • Sub Silly() Dim Mas_of_one_Bear_Grams As Single Dim Mas_of_one_Ant_Grams As Single Dim Total_Mas_Wrong_Grams As Single Dim Number_of_Ants As Long Dim I As Long Mas_of_one_Bear_Grams = 700000 Mas_of_one_Ant_Grams = 0. 01 Number_of_Ants = 30000000 Total_Mas_Wrong_Grams = Mas_of_one_Bear_Grams For I = 1 To Number_of_Ants Total_Mas_Wrong_Grams = Total_Mas_Wrong_Grams + Mas_of_one_Ant_Grams Next I Msg. Box "Total biomas (wrong result): " & CStr(Total_Mas_Wrong_Grams) & " grams" End Sub

Программа не зря названа Silly. Она дает очень глупый ответ. Проверьте! А теперь напишем Программа не зря названа Silly. Она дает очень глупый ответ. Проверьте! А теперь напишем умную программу. Назовем ее Clever.

 • • • • • Sub Clever() Dim Mas_of_one_Bear_Grams As Single Dim Mas_of_one_Ant_Grams • • • • • Sub Clever() Dim Mas_of_one_Bear_Grams As Single Dim Mas_of_one_Ant_Grams As Single Dim Total_Mas_of_Ants_Grams As Double Dim Total_Mas_Grams As Single Dim Number_of_Ants As Long Dim I As Long Mas_of_one_Bear_Grams = 700000 Mas_of_one_Ant_Grams = 0. 01 Number_of_Ants = 30000000 Total_Mas_of_Ants_Grams = 0 For I = 1 To Number_of_Ants Total_Mas_of_Ants_Grams = Total_Mas_of_Ants_Grams + Mas_of_one_Ant_Grams Next I Total_Mas_Grams = Total_Mas_of_Ants_Grams + Mas_of_one_Bear_Grams Msg. Box "Total biomas : " & CStr(Total_Mas_Grams) & " grams" End Sub

 Эта программа дает правильный ответ. А в чем состоит разница между двумя программами? Эта программа дает правильный ответ. А в чем состоит разница между двумя программами? В программе Silly к массе медведя поочередно прибавляется масса каждого из муравьев. В результате такого сложения сумма останется равной первому слагаемому. В программе Clever сначала суммируются массы всех муравьев, а полученная сумма прибавляется к массе медведя. Оба слагаемых сопоставимы по величине. Получаем правильный результат.

Задания для самопроверки: • вспомните известные вам меры информации; • какое максимальное неотрицательное число Задания для самопроверки: • вспомните известные вам меры информации; • какое максимальное неотрицательное число может быть представлено с помощью 1 байта? ; • какое количество различных символов может быть закодировано с помощью 1 байта?

 • каково максимальное значение целого беззнакового длиной 4 байта; • запишите в нормализованной • каково максимальное значение целого беззнакового длиной 4 байта; • запишите в нормализованной форме числа -2. 23456, 0. 000876, -2345. 009 (целая часть числа отделена от дробной знаком «точка» ); • в программе Silly замените тип вещественных переменных – вместо Single установите тип Double. Что изменится?

Замечание Подход, при котором программа рассматривается в виде последовательности команд, отдаваемых исполнителю, получил название Замечание Подход, при котором программа рассматривается в виде последовательности команд, отдаваемых исполнителю, получил название императивное программирование. Этот подход не единственно возможный.

 Существует и успешно развивается декларативное программирование, в котором, в свою очередь, можно выделить Существует и успешно развивается декларативное программирование, в котором, в свою очередь, можно выделить логическое и функциональное программирование. В логическом программировании программа рассматривается в виде набора логических функций – предикатов.

 В функциональном программировании программа рассматривается, как совокупность, точнее – суперпозиция, вложенных функций. Кроме В функциональном программировании программа рассматривается, как совокупность, точнее – суперпозиция, вложенных функций. Кроме того, существуют языки программирования, в которых не применяются переменные. Например, язык функционального программирования Haskell. Рассмотрение этих интересных тем не входит в нашу программу.

Литература • Математические основы информатики. Эффективный курс: Учебное пособие / Е. В. Андреева, Л. Литература • Математические основы информатики. Эффективный курс: Учебное пособие / Е. В. Андреева, Л. Л. Босова, И. Н. Фалина – 2 -е изд. , испр. - М. : Бином. Лаборатория знаний, 2007. – 328 с. • Гарнаев А. Ю. EXCEL, VBA, INTERNET в экономике и финансах / А. Ю. Гарнаев. СПб. : БХВ-Петербург, 2003. – 816 с.