Алгоритмизация вычислительных процессов
Основные понятия об алгоритмизации задач
Этапы решения задач на компьютере
Процесс преобразования исходных данных в конечные результаты решения задачи (вычислительный процесс) включает следующие основные этапы:
Изучение поставленной задачи:
выбор и анализ математической модели;
анализ исходных данных и определение их имен;
определение имен конечного и промежуточного (если есть в этом необходимость) результатов, а для числового результата также их точности;
определение шагов решения задачи.
Описание алгоритма поставленной задачи.
Запись алгоритма на языке программирования высокого уровня.
Создание программы в среде программирования.
Запуск и отладка программы.
Анализ полученного результата.
Алгоритм и его свойства
Алгоритм (алгорифм) – любая конечная последовательность основных математических и логических действий, однозначно определяющих процесс преобразования исходных данных в конечные результаты решения задачи. Название «алгоритм» произошло от латинской формы арабского по имени хорезмийского математика аль-Хорезми – Algorithmi. Алгоритм – одно из основных понятий математики и информатики.
нельзя понимать в узком смысле, т. е. только для цифровых вычислений. Исходными данными и результатами алгоритма могут служить самые разнообразные объекты. Это открывает возможность широкого применения понятия алгоритма. Например, можно говорить об алгоритмах перевода с одного языка на другой, об алгоритмах управления (диспетчеризация поездов, самолетов, городского транспорта, функционирования предприятий и.д.)
Основные свойства алгоритмов:
1. Понятность для исполнителя — исполнитель алгоритма должен знать, как его выполнять.
2. Дискретность — прерывность, раздельность. Алгоритм должен представлять процесс решения задачи как последовательное выполнение простых шагов (этапов).
3. Определенность — каждое правило алгоритма должно быть четким, однозначным и не оставлять места для произвола. Благодаря этому свойству выполнение алгоритма носит механический характер и не требует никаких дополнительных указаний или сведений о решаемой задаче.
4. Результативность (конечность). Это свойство состоит в том, что алгоритм должен приводить к решению задачи за конечное число шагов.
5. Массовость — означает, что алгоритм решения задачи разрабатывается в общем виде, т.е. он должен быть применим для некоторого класса задач, различающихся лишь исходными данными.
Формы представления алгоритмов
На практике наиболее распространены следующие формы представления алгоритмов:
- Словесная – запись на естественном языке;
- в псевдокодах – полуформализованное описание алгоритма на условном алгоритмическом языке, включающее в себя как элементы языка программирования, так и фразы естественного языка, общепринятые математические обозначения и т.д.;
- табличная;
- графическая – с помощью графических символов;
- программная – запись на искусственном языке (языке программирования).
Словесный способ не имеет широкого применения по следующим причинам:
- Описания не строго формализуемы;
- Страдают многословностью записей;
- Допускают неоднозначность толкования отдельных предписаний.
Псевдокод представляет собой систему обозначений и правил, предназначенную для единообразной записи алгоритмов. Единого или формального определения псевдокода не существует, поэтому возможны различные псевдокоды, отличающиеся набором служебных слов и основных(базовых конструкций).
Графическое представление алгоритма является наиболее компактным и наглядным по сравнению со словесным и псевдокодами. При графическом представлении алгоритм изображается в виде последовательности связанных между собой функциональных блоков, каждый из которых соответствует выполнению одного или нескольких действий. Такое графическое представление называется схемой алгоритма или блок-схемой. В блок-схеме каждому типу действий (вводу исходных данных, вычислению значений выражений, проверке условий, управлению повторением действий, окончанию обработки и т.п.) соответствует геометрическая фигура, представленная в виде блочного символа.
Блочные символы соединяются линиями переходов, определяющими очередность выполнения действий. В таблице 1 приведены наиболее часто употребляемые символы.
Таблица 1
Графические символы алгоритмов
Название символа | Обозначение | Пояснение |
Процесс | Вычислительное действие или последовательность действий | |
Решение | Проверка условий | |
Модификация | Начало цикла | |
Предопределенный процесс | Вычисления по подпрограмме, стандартной подпрограмме | |
Ввод/Вывод | Ввод/Вывод данных в общемвиде | |
Пуск — Останов | Начало, конец алгоритма, вход в подпрограмму и выход из нее | |
Документ | Вывод результатов на печать |
Блок «процесс» применяется для обозначения действия или последовательности действий, изменяющих значение, форму представления или размещения данных. Иногда для улучшения наглядности схемы несколько отдельных блоков объединяют в один блок.
Блок « решение» используется для обозначения переходов управления по условию. В каждом таком блоке должны быть указаны вопрос, условие или сравнение, которые он определяет.
Блок « модификация — видоизменение, преобразование» используется для организации циклических структур. Внутри блока записывается параметр цикла, для которого указывается его начальное значение, граничное условие и шаг изменения параметра цикла для каждого повторения.
Блок « предопределенный процесс» служит для указания обращений к вспомогательным алгоритмам, существующим автономно в виде некоторых самостоятельных модулей, и для обращения к библиотечным подпрограммам.
Разновидности структур алгоритмов
Алгоритм любой задачи можно описать, используя следующие типы управляющих структур, включающих вышеперечисленные блоки:
- Линейной;
- Разветвляющейся;
- Циклической
- Предопределенный процесс.
Конечным продуктом разработки алгоритма и реализации его на ПК является программа, записанная на языке программирования высокого уровня.
Алгоритм линейной структуры — объединение нескольких, следующих друг за другом блоков « процесс» и блоков « ввода/ вывода», в котором каждое последующее действие – операция выполняется строго за предыдущим, рис. 1.
Алгоритм разветвляющейся структуры. В нем данные влияют на ход выполнения алгоритма. В алгоритме заложены разные пути следования, по ходу действия выбирается один из возможных вариантов, образуя разветвленную структуру. В зависимости от результата проверки условия выполняются только действия ветви «да» (действия 1 и 2) или ветви «нет» ( действия 3 и 4). Такая структура разветвления носит название полный выбор (полная альтернатива) рис.2. а). В другом случае в зависимости от результата проверки условия либо выполняются действия ветви «да» (например действия 1 и 2), либо пропускаются, рис. 2. б), образуя неполный выбор (неполную альтернативу).
В следующем случае от результата выбора будет выполнено одно из перечисленных действий, рис. 3.
Алгоритмы циклических структур
Обеспечивают выполнение отдельных фрагментов алгоритма заданное или конечное (но неопределенное число раз) до получения результата при выполнении некоторого условия.
На рис. 4. а) и б) представлены блок-схемы цикла с предварительным условием (предусловием) и постусловием соответственно.
Если условие выполняется, то выполняются действия 1..n(тело цикла) ветви «да», иначе тело цикла не выполнится ни разу (рис. 4. а).Тело цикла в данном блоке может выполниться хотя бы один раз (рис. 4. б).
Блок цикла с заданным числом повторений представлен на рис. 5.,
где V – имя параметра цикла;
V1 – начальное значение параметра цикла (имя или константа);
V2 – конечное значение параметра цикла (имя или константа);
V3 – шаг изменения параметра цикла (имя или константа);
Тело цикла выполняется столько раз, сколько разных значений примет параметр в заданных пределах.
Примечание. Блоки разветвления и циклов могут содержать внутри себя другие разветвления и циклы (вложенные блоки). Схемы «собирают» из блоков.
На рис. 6. представлен блок обращения к подпрограмме «предопределенный процесс»).
Примеры блок-схем алгоритмов
Алгоритм линейной структуры
Пример 1. Определение длины окружности и площади круга по формулам:
Обозначения: S — площадь круга;
r — радиус;
pi — константа;
l — длина окружности.
Алгоритмы разветвленной структуры
Пример 2.
Вычисление функции F(x)=sinx/x, при х не равном нулю и F(x)=1, при х равном нулю.
Обозначения: F=F(x); sin(x)=sinx
Пример 3. Определить принадлежность двух точек к одной окружности с центром в начале координат, если заданы координаты этих точек x1, y1, x2, y2.
Алгоритмы циклической структуры
Пример 4. Найти сумму S значений i^2, где i меняется от 1 до 5 с шагом 1. Использовать цикл с заданным числом повторений.
Пример 5. Алгоритм вычисления значений функций y=sin2x при 4
3.2 Краткие сведения об основах программирования. Введение в язык программирования высокого уровня Visual Basic for Applications(VBA)
Сначала разрабатывается алгоритм действий поставленной задачи, а затем он записывается на одном из языков программирования. Язык программирования – искусственный язык. Он опирается на словарь служебных слов и команд, а также систему правил записи конструкций языка. С помощью языка программирования создается исходный текст программы. Программа – полное и четкое описание алгоритма на языке программирования. Чтобы программа работала, ее нужно перевести в машинный код. Этим занимаются специальные программы – компиляторы и интерпретаторы. Интерпретаторы просматривают и сразу выполняют инструкции языка, содержащиеся в тексте программы, подробно информируя разработчика программы о возникающих проблемах.
Среди множества языков программирования высокого уровня Visual Basic по популярности стоит на первом месте во всем мире, используется в качестве учебного языка из-за простоты в изучении.
Работа в среде Windows с ее приложениями, решающими практические задачи, значительно облегчается с использованием языка Visual Basic for Applications. Visual Basic for Applications – объектно — ориентированный язык высокого уровня. Основным достоинством этого языка является относительная простота и доступность в изучении. Будучи языком, встроенным в какое-либо приложение Microsoft Office, он улучшает возможности данного приложения. В учебном курсе по изучению языка рекомендуется начинать свои первые шаги в программировании в среде Excel независимо от ее версии, поскольку Excel обладает достаточно простой объектной моделью.
Алфавит. Алфавит языка включает следующие символы:
53 буквы – прописные () и строчные буквы латинского алфавита и знак подчеркивания(_);
10 цифр(0 — 9);
23 специальных символа (+ — * / . , : ; =‘ “ ( ) [ ]$ @ ^ пробел \);
составные символы ( = );
Неделимые последовательности знаков алфавита образуют слова, отделяемые друг от друга разделителями и несущие определенный смысл в программе. Разделителями могут служить пробел, двоеточие, точка и другие специальные символы и их комбинации.
Слова подразделяются на:
Ключевые;
Стандартные идентификаторы;
Идентификаторы пользователя.
Ключевые (зарезервированные) слова имеют фиксированное написание и однозначно определенный смысл, который не может быть изменен. Например, Until, Goto, If, Loop, For и т. д.
Идентификаторы пользователя применяются для обозначения имен констант, переменных, процедур и функций, типов данных, меток. Имена задаются программистом и должны отвечать следующим правилам:
Длина имени не должна превышать 255 символов;
Имя не может содержать знаков точки, пробела, % ,, ! , #, @, $;
Имя может состоять из любой комбинации букв, цифр и других символов, начинающейся с буквы;
Нельзя использовать имена, совпадающие с именами встроенных функций и процедур и ключевыми словами;
Имена должны быть уникальны внутри области, в которой они определены;
Регистр букв (верхний или нижний) не имеет значения, но для большей наглядности текста программы и облегчения ее понимания следует умело сочетать верхний и нижний регистры. Например, вместо имени товар лучше написать Товар, или вместо процентная_ставка написать Процентная_Ставка.
Переменные, константы и стандартные функции
Переменная обозначается идентификатором, определяющим некоторую область в памяти, в которой хранится ее значение. Это значение может изменяться в процессе выполнения программы. Каждая переменная принадлежит к определенному типу данных, и поэтому должна быть объявлена в разделе описаний до выполнения каких- либо действий с нею.
Описание переменных
Для описания типа переменных на уровне процедуры используется инструкция Dim следующего формата:
Dim [As Тип],[As Тип],…
Где –
Dim — ключевое слово;
Имя переменной (идентификатор) — имя, удовлетворяющее стандартным правилам VBA;
Тип – один из допустимых типов данных VBA,табл. 9.1.
Типы данных в VBA
Тип данных определяет множество допустимых значений, которое может принимать указанная переменная.
Тип данных | Размер(байт) | Диапазон значений |
Byte(байт) | 0..255 | |
Boolean(логический) | Trueили False | |
Integer(целый) | -32 768 .. 32 767 | |
Long(целый-длинный) | -2 147483 648 .. 2 147 483 647 | |
Single(вещественный) | -3,402823E38 ..- 1,401298E-45для отрицательных значений; 1,401298E-45.. 3,402823E38 для положительных значений | |
Double | 1,79769313486232E 308 | |
Currency(сфиксированной десят. точкой) | От22337203685477,58 до 922337203685477,58 | |
Date | ОтJanuary 1, 100 доDecember 31,9999 | |
String(символьныйпеременной длины) | 10 байт+длина строки | От 0 до 2000000000 символов |
String(символьныйфиксированной длины) | 1 байт на 1 символ | От 0 до 2000000000 символов |
Variant | ||
Variant | 22+длина строки | Как для строки String переменной длины |
Object | Любой указатель объекта | |
Тип данных, определяемый пользователем с помощьюключевого слова Type | Объем определяется элементами | Диапазон каждого элемента определяется его типом данных |
Если тип переменной не задан, то она по умолчанию получает тип Variant и далее результат зависит от ее значения.
После ключевого слова Dim следуют объявления переменных разделенных запятыми. Например, следующая инструкция описывает A и B, как переменные целого типа(Integer), а C – как переменную вещественного типа (Single). Dim A AS Integer, B AS Integer, C As Single.
Константы – элементы данных, значения которых, в процессе выполнения программы не меняются. Константы в программе могут быть заданы явно своим значением или обозначены именем. Если константа обозначена именем, то она должна быть описана в разделе описаний. Описание начинается со служебного слова Const и имеет следующий формат записи:
Const[AS Тип] = ,
Где
Имя константы — имя, удовлетворяющее стандартным правилам VBA;
Тип – один из допустимых типов данных VBA,табл.1..
Выражение – литерал, другая константа или любое сочетание, включающее арифметические или логические операции, за исключением Is.
Пример объявления констант с именами Фирма и Процентная_ставка.
Const Фирма = «Бескрайние просторы»
Const Процентная_ставка As Single = 0.2
Встроенные функции
В VBA имеется большой набор встроенных функций и процедур, упрощающих программирование, которые можно разделить на следующие категории:
Математические;
Функции проверки типов;
Функции обработки строк;
Функция форматирования;
Функции преобразования форматов;
функции даты и времени.
Математические функции
Abs (x) — модуль аргумента x
Cos(x) — косинус аргумента x
Exp(x) — возведение основания натурального логарифма в степень x
Log(x) — логарифм натуральный аргумента х
Rnd — случайное число из интервала [0,1]
Sin(x) — синус аргумента x
Sqr(x) — квадратный корень из х
Atn(x) — арктангенс от х
Tan(x) – тангенс от х
Sgn(x) – знак х
Fix(x) и Int(x) обе функции отбрасывают дробную часть числа и возвращают целое значение. Разница между этими функциями состоит для отрицательных значений аргумента. Int(x) возвращает ближайшее отрицательное целое число, меньшее или равное х, а Fix(x) – ближайшее отрицательное целое число, большее или равное х.
Функции проверки типов
Функция | Проверка — является ли переменная: |
IsArray(переменная) | массивом |
IsDate(переменная) | датой |
IsError(переменная) | Кодом ошибки |
IsNull(переменная) | Пустым значением |
IsNumeric(переменная) | Числовым значением |
IsObject(переменная) | объектом |
Функция форматирования возвращает значение типа Variant(String ),содержащее выражение, оформленное согласно синтаксиса функции:
Format(Выражение[,Формат [,Первый день недели[,Первая Неделя Года]]]), где:
Выражение – обязательный аргумент(любое допустимое выражение – комбинация ключевых слов, операторов, переменных и констант, результатом которой является строка, число или объект);
Формат – необязательный параметр(любое допустимое именованное или определенное пользователем выражение формата).
Если к имени функции добавляется знак $, то функция возвращает значение типа String.
При создании собственного числового формата можно использовать следующие символы:
0 – резервирует позицию цифрового разряда. Отображает цифру или нуль. Если у форматируемого числа есть какая-нибудь цифра в этой позиции разряда, где в строке формата находится 0, функция отображает эту цифру, если нет, то в этой позиции отображается нуль.
# — действие данного символа аналогично действию 0 с той лишь разницей, что незначащие нули не отображаются.
. – резервирует позицию десятичного разделителя, определяет, сколько разрядов необходимо отображать слева и справа от десятичной точки.
% — резервирует процентное отображение числа.
. – разделяет сотни от тысяч.
Если в формате стоит “FIXED”,то число форматируется до двух знаков после точки.
Пример.
Функция Format(Z, ###0.0) возвращает переменной Z числовое значение в формате, указанном в кавычках.
Функции преобразования форматов
Val(строка) – возвращает числа, содержащиеся в строке, как числовое значение соответствующего типа.
Str(число) – возвращает значение типа Variant (String), являющееся строковым представлением числа.
Кроме функций Val и Str имеется ряд функций по преобразованию типов выражений.
Функции обработки строк
Среди множества функций можно выделить следующие:
Chr(код) – преобразует ASCII – код в строку. Например, Chr(10) осуществляет переход на новую строку, Chr(13) – возврат каретки.
Mid(string, pos[,length]) – возвращает подстроку строки, содержащую указанное число символов, где
String – строковое выражение, из которого извлекается подстрока;
Pos – позиция символа в строке String, с которого начинается нужная подстрока;
Length – число возвращаемых символов подстроки.
Len(строка) –возвращает число символов строки.
Функции времени и даты
Возвращают значение типа Variant, содержащее системную дату, текущее время и т. д. Например функция Date возвращает значение, содержащее системную дату.
Выражения
При выполнении программы осуществляется обработка данных, в ходе которой с помощью выражений вычисляются и используются различные значения. Выражение представляет конструкцию, определяющую состав данных, операции и их порядок выполнения над данными. Выражения могут включать:
Операнды;
Знаки операций;
Круглые скобки.
В простейшем случае выражение может состоять из одной переменной или константы.
Операнды представляют собой данные, над которыми выполняются действия. В качестве операндов могут быть использованы константы, переменные, элементы массивов и функции. Операции определяют действия, которые выполняются над операндами. Круглые скобки используются для указания порядка выполнения операций.
В зависимости от типов операций и операндов выражения могут быть арифметическими, логическими и строковыми.
В выражениях допускается использовать следующие операции над данными:
Арифметические — выполняются над числами и их результатом являются числа.
Отношения — выполняются над числами и их результатом являются логические значения True (истина) или False (ложь), например
x + yz ;
Логические True или False – используются в логических выражениях и их результатом являются логические значения, например A Or B, где A и B – переменные логического типа. Результат этой операции может быть True или False, и это зависит от того, какие значения имеют переменные A и B.
Операции над строками – используются в выражениях над строками и их результатом является строка символов.
Арифметические операции – сложение (+), вычитание (-), умножение (*), деление (/), целочисленное деление (\), возведение в степень (^), остаток от деления по модулю (mod).
Операции отношения – равно (=), не равно (), меньше или равно (=), меньше (), сравнение двух строковых выражений (Like).
Логические операции – логическое умножение(And), логическое сложение(Or), логическое отрицание(Not), исключающее Or (Xor).
Операции над строками – соединение двух строк (+), предпочтительнее использовать знак .
Примеры записи выражений:
Математическая запись. Запись на VBA.
2ав+х 2*а*в+х^2
sqr(x+a)
еexp(x)
lntgx Log(Tan(x))
Sinx Sin(x)
Rnd+2a Rnd+2*a
Структура программы на языке VBA
Исходный текст программы состоит из последовательности строк, каждая из которых может начинаться с любой позиции. Структура программы включает:
заголовок программы;
раздел описаний (последовательность инструкций описаний — объявлений);
исполняемую часть (последовательность исполняемых инструкций);
Конец записи программы.
Заголовок программы находится в начале программы и имеет вид: Sub ()
Раздел описаний содержит описание элементов программы.
Исполняемая часть является основной частью («телом» программы), в которой над объявленными объектами производятся определенные действия, позволяющие получить требуемый результат.
Структура программы на VBA с использованием констант, простых переменных выглядит следующим образом:
Sub Prim1() ’заголовок программы
{Инструкции описания —
Const’ описание констант
Dim As Тип,…} ’описание переменных
{Исполняемая часть –
,
}
End Sub ’конец записи программы
При создании программ необходимо помнить:
Описания данных должны предшествовать описанию действий и содержать упоминание всех объектов, используемых в инструкциях.
В одной строке программы может быть записана одна или несколько инструкций, разделенных знаком двоеточия. A=A+B и X=Sin(x) : Y=Y^2
Возможно использование переноса строк:
Одна инструкция может быть записана в нескольких строках, при этом допускается не более семи продолжений одной и той же строки. Признаком продолжения является расположение знаков ” Пробел “ и “Знак подчеркивания” в конце разбиваемой строки(начиная с Win 95).
Нельзя разбивать переносом строковую константу.
Для пояснения текста программ можно использовать комментарии. Комментарии это фрагменты пояснительного текста в программе — любой набор допустимых в данном языке символов, которые не являются программным кодом и поэтому не компилируются. Комментарии могут быть расположены в любом месте программы. Признаком комментария является расположенный перед ним знак апострофа « ‘ » или ключевое слово Rem .
Комментарии позволяют выполнить две функции:
Делают программу легко читаемой, поясняя смысл ее инструкций;
Отключают фрагменты программы при ее отладке.
Примеры комментария.
‘Заголовок процедуры общего вида с именем Prim1
SUB Prim1()
‘Объявление переменной C целого типа
Dim C As Integer
3.3 Порядок работы с программами VBA
. Visual Basic for Applications представляет единую законченную среду редактирования, схожую со средой автономной версии Visual Basic 5.0. Среда редактирования Visual Basic включает редактор кода, иерархическое средство просмотра объектов, многооконный отладчик, окно отображения свойств и средство просмотра проектов для управления кодом и объектами проекта.
Для того чтобы начать работать с языком, необходимо вставить модуль, поскольку все процедуры и функции могут быть созданы только в теле модуля
Запуск редактора
Запуск редактора. После запуска приложения (Excel, Word)
необходимо войти в меню «Сервис», выбрать команду «Макрос» и из предложенного меню выбрать команду «Редактор Visual Basic».
Вставка модуля в редакторе VBA
Вставка модуля. Для вставки модуля необходимо выбрать меню «Вставка», а затем выбрать команду «Модуль».Самыми первыми словами в модуле должны быть слова Option Explicit. Эта инструкция проверяет, описана ли переменная или константа, которая участвует в программе в разделе описания процедуры, или нет. Если пользователь забыл это сделать, то с помощью данной инструкции компилятор языка выдаст сообщение об ошибке. Применение инструкции Option Explicit позволит исключить достаточно много ошибок при программировании, особенно у начинающих программистов.
Начало работы с модулем. При работе с модулем важно знать назначение основных кнопок на панели инструментов. После создания текста программы ее необходимо откомпилировать для проверки синтаксиса и семантики написанного текста. Для этого служит специальный значок на панели инструментов. Иногда при запуске редактора VBA этот значок отсутствует. Его необходимо поместить на панель инструментов. Для этого в меню «Вид» нужно выбрать команду «Настройка». В открывшемся диалоговом окне выбрать вкладку «Команды», найти категорию «Отладка», выделить значок «Компилировать проект» и, не отпуская нажатую клавишу мыши, поместить этот значок на панель инструментов. При успешной компиляции выполнить запуск программы, как показано ниже.
Отладка программ. При написании и создании программы неизбежно появляются ошибки:
Компиляции;
Выполнения;
Логические.
Ошибки компиляции возникают при некорректном вводе числа скобок, неправильном имени, неполном вводе инструкции и т. д. Некоторые ошибки появляются при завершении набора строки и нажатия клавиши Enter. Строка, в которой обнаружена ошибка, выделяется красным цветом, и на экране появляется диалоговое окно с сообщением о возможной причине ошибки.
Как упоминалось ранее, инструкция Option Explicit , с которой должен начинаться модуль, позволяет достаточно легко отслеживать ошибки, связанные с использованием переменных, не объявленных явно, и своевременно их устранять.
Ошибки выполнения. Появляются после успешного завершения компиляции программы уже на стадии выполнения. Причиной этому может быть некорректный ввод данных, например вместо числа вводится строка знаков. Ошибка может возникнуть также из-за некорректных данных при выполнении операции деления, например деление на ноль.
Сообщение об ошибке при компиляции программы
Сообщение об ошибке при выполнении программы
Логические ошибки. Распознаются наиболее сложно, так как они не приводят к прерыванию программы, но при этом при выполнении программы выдаются неверные результаты. Причиной тому чаще всего является некорректный алгоритм.
Демонстрационный пример программы на VBA
Sub DEMOLB9()
Dim A As Single ‘ описание переменной A вещественного типа
Dim B As Integer ‘ описание переменной B целого типа
Dim C AS String ‘описание переменной C строкового типа
Dim D As Single ‘ описание переменной D вещественного типа
A = Rnd ‘переменной A присваивается случайное число из [0,1]
A = A + 12.7
B = Int(A) ‘переменной B присваивается целая часть числа A
D = -123.56
D = Fix(D) ‘переменной D присваивается целая часть числа D
C =ГРУППА
MsgBoxA= A(Chr(10)Chr(13)) _ ‘ Вывод результата в окно
B= B(Chr(10)Chr(13)) _ ’ в трех строках
D= D, vbInformation, DateC
End Sub
3.4 Программирование алгоритмов линейной структуры
Основные сведения о программировании алгоритмов линейной структуры
Под алгоритмом линейной структуры понимается последовательность действий, которые выполняются в порядке их записи
Реализация алгоритмов линейной структуры
Инструкции присваивания
Формат записи:
[Let] (или =, где:
, — конструкции, построенные по правилам VBA.
Выражение — выражение того же типа, что и составляющие его операнды.
Инструкция вычисляет значение выражения и присваивает это значение переменной или константе.
В частных случаях выражение может принимать значение константы, переменной или функции. Например:
Y=Sqr(X)
A=22.5
D=Exp(A)
S=S+R
F=X^2
В результате выполнения двух следующих операторов присваивания x=5 : x=x+2 переменной x будет присвоено значение 7.
Ввод и вывод информации
Для ввода и вывода информации в VBA используются две разновидности диалоговых окон (ДО):
окна ввода (InputBox);
окна сообщений (MsgBox);
Ввод информации осуществляется с помощью функции Inputbox. Функция InputBox осуществляет следующие действия:
выводит на экран диалоговое окно, рис.10.1.а),б) , содержащее заголовок, зону сообщения, поле ввода, значение по умолчанию ;
устанавливает режим ожидания ввода текста пользователем или нажатия кнопки;
возвращает значение типа String, содержащее текст, введенный в поле.
Формат записи функции:
Inputbox(сообщение[, заголовок окна][,поле ввода][,значение по умолчанию][,…]) , где
Сообщение – строковое выражение, отображаемое как текст сообщения в ДО. Сообщение может состоять из нескольких строк. Для их разделения допускается использование символа возврата каретки(Chr(13)), символа перевода строки(Chr(10)) или комбинации этих символов (Chr(13))(Chr(10)).
Заголовок окна – строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот аргумент опущен, в строку заголовка помещается имя приложения.
Поле ввода – вводимое строковое выражение (строка знаков).
Помимо указанных аргументов в формате функции InputBox могут использоваться параметры[,…], регулирующие положение диалогового окна на экране, и имя файла справки о данном окне.
Пример записи операторов присваивания и задания переменным A и B значений, возвращаемых функцией InputBox, открывающей диалоговые окна для ввода.
A=InputBox(“Вычисление остатка”, “Bвод A”)
B= InputBox (“Вычисление остатка ”,” Bвод B”)
Поле ввода |
Диалоговые окна ввода
В приведенных окнах «Ввод А» и «Ввод В» расположены в строке заголовка окна, в зоне сообщения – «Вычисление остатка», а в поле ввода – 22 и 7.
Инструкция и функция MsgBox выводит простейшие сообщения пользователю в диалоговом окне.
Формат инструкции MsgBox:
MsgBox (Строковое выражение_1 [, числовое выражение или имена констант][, строковое выражение_2][,…]), где:
Строковое выражение_1 – сообщение, отображаемое в диалоговом окне;
числовое выражение – представляет число и тип отображаемых кнопок или тип используемого значка, табл.1.1.
строковое выражение_2 – строковое выражение, отображаемое в строке заголовка диалогового окна.
Значения аргументов процедуры MsgBox, определяющих информационные значки в диалоговом окне.
Константа Значение Значок сообщения
VbCritical 16
VbQuestion 32
VbExclamation 48
VbInformation 64
Помимо указанных аргументов в формате MsgBox могут использоваться параметры, регулирующие положение диалогового кна на экране, и имя файла справки о данном окне[,…]
Следующая инструкция вывода демонстрирует расположение параметров MsgBox в диалоговом окне вывода.
MsgBox ”C=A MOD B”(Chr(13))(C(10))_
“При:”” A= ”A ” B= ”B(Chr(13)Chr(10))“Остаток:”“ C= ”C,
_ Vbinformation,”Сегодня: ”Date“ Выполнила Ким.”
Где:
Знак операциииспользуется для слияния строк;
комбинация функций (Chr(13)Chr(10)) — для перевода строки и возврата каретки, чтобы результаты вычислений были напечатаны в три строки
Диалоговое окно вывода.
Примеры программы алгоритма линейной структуры
Выполнить вычисления по формулам:
T=(1-x)/(3*x-2*y)
P=x*(X-y/(1+x))/2
Z=T-P
Sub primLin()
Dim X, Y, T, P, Z As Single
X = InputBox(Окно ввода, Ввести значение Х)
Y = InputBox
T = (1 + X) / (3 * X — 2 * Y)
T = Format(T, ###0.0)
P = X * ((X — Y) / (1 + X)) / 2
P = Format(P, ###0.0)
Z = T — P
Z = Format(Z, ###0.0)
MsgBoxx= X y= Y(Chr(10)Chr(13))_
T= T P= P Z= Z, _
vbInformation, Расчет по формулам: Date
End Sub
3.5 Программирование алгоритмов разветвляющейся структуры
Порядок выполнения инструкций в разветвляющихся вычислительных процессах зависит от условий, которые проверяются по ходу вычислений, и реализуется вследствие этого по одному из нескольких заранее предусмотренных (возможных) направлений. Каждое отдельное направление называется ветвью вычислений. Разветвляющийся вычислительный процесс схематически представлен различными структурами, рис.8.2.а).- рис. 8.2.б). Такие структуры можно реализовать в программах с помощью инструкций условного перехода (If …Then … Else) и выбора по значению(Select Case … EndSelect). Изменить порядок выполнения программы можно также с помощью инструкции GOTO , называемой безусловным переходом . Инструкция безусловного перехода используется в тех случаях, когда необходимо выполнить не следующую по порядку инструкцию в программе, а, инструкцию помеченную меткой. Формат записи безусловного перехода:
Goto
Примечание. Во избежание зацикливания оператор Gotoцелесообразнее использовать в операторе If, если необходим безусловный переход к помеченному оператору.
Условный оператор If
В VBA имеются две формы записи условного оператора: полная и сокращенная. Формат записи оператора условного перехода:
IfThen[Else ]
If( если ), Then(то), Else(иначе)- ключевые(служебные) слова.
Условие представляет собой выражение логического типа. Оператор If работает следующим образом: если условие истинно (имеет значение True), то выполняется инструкция _1(первая ветвь), в противном случае выполняется инструкция _2(вторая ветвь). Обе ветви могут содержать несколько , инструкций, разделенных двоеточием.
Примеры записи инструкции If.
If x0 Then x=x+1 Else x=0
If x0 Then x=x+1: MsgBox x Else x=0
If y0 Then y=sqr(y)
Для организации разветвлений на три направления и более можно использовать несколько конструкций If, вложенных друг в друга. При этом каждое Else соответствует непосредственно предшествующему ему Then.
Формат конструкции :
IfThen
ElseIfThen
ElseIfThen
…..
…..
Else
End If
Примечание. Из-за возможных ошибок следует избегать большой вложенности условных конструкций.
Примеры алгоритмов разветвляющейся структуры и соответствующих им программ с использованием If
Пример 1.
Sub условие()
Dim a, b, c
‘ Даны три числа: a, b, c. Определить, можно ли
‘ построить треугольник, если интерпретировать a, b, c
‘ как длины сторон треугольника.
a=Val( InputBox(“Введите 1 число ”))
b= Val( InputBox(“Введите 2 число ”))
c= Val( InputBox(“Введите 3 число ”))
If (a+b)c And (a+c)b And (b+c)a Then
MsgBox “ треугольник построить можно”
Else
MsgBox “ треугольник построить нельзя”
End If
End Sub
При: а=8, в=5, с=4 а=10, в=5, с=4
Пример 2. Вычисление остатка
Используя функцию IsNumeric — проверки значений переменных A и B, вычислить и напечатать остаток C= A MOD B, если значение проверки условия True, иначе напечатать “Переменная не является числом”.
Sub Ostatok()
Dim A,B,C As Integer
A= Val(InputBox(“Вычисление остатка”, “Bвод A”))
B= Val(InputBox (“Вычисление остатка ”,” Bвод B”))
If IsNumeric (A) And IsNumeric (B) THEN
C=A MOD B
MsgBox ”C=A MOD B”(Chr(13))(C(10))_
“При:”” A= ”A ” B= ”B(Chr(13)Chr(10))“Остаток:”“ C= ”C, _
Vbinformation,”Сегодня: ”Date“ Выполнила Ким.”
Else
MsgBox “Переменная не является числом”
End Sub
Инструкция выбора Select Case
Инструкция выбора является обобщением условного перехода и позволяет сделать выбор из произвольного числа имеющихся вариантов, то есть организовать разветвления на произвольное число направлений. Select Case применяется в тех случаях, когда одна величина участвует в нескольких логических сравнениях и определяет, какой блок инструкций будет выполняться.
Формат записи Select Case:
Select Case
Case‘ вариант 1
……………….
Case‘ вариант n
[Case Else
[]]
End Select
Инструкция выбора состоит из выражения, называемого селектором, списка выражений вариантов, начинающихся словом Case, и необязательной ветви Else, имеющей то же значение, что и в условном операторе. Каждый вариант представляет список выражений и оператор или группу операторов, следующих за списком. Список выражений может включать:
- Константы;
- Интервал значений;
- Функцию Is.
Инструкции Else (необязательная часть) выполняются в том случае , если выражение — селектор не совпадает ни с одним из предложений Case.
Оператор выполняется следующим образом:
- Вычисляется значение выражения — селектора;
- Просматриваются последовательно варианты на предмет совпадения выражения — селектора с константами и значениями из диапазонов соответствующего списка;
- Если для очередного варианта получено совпадение, то выполняется оператор данного варианта. После этого выполнение оператора выбора заканчивается и осуществляется переход к и, следующей за End Select.
- Если все проверки оказались безуспешными, то выполняется инструкция после слова Else (при его наличии), иначе осуществляется переход к инструкции, следующей за End Select.
Пример1. Определить пригодность спортсмена к некоторому виду спорта.
Sub Sport_Пригодность()
Dim X, Y, Z As Single
X=InputBox(“Ввести кол — во ударов сердца /мин после нагрузки”)
Y= InputBox (“Ввести кол — во ударов сердца /мин через 10 мин после отдыха”)
Z=Y/X
Select Case Z
Case Is0.5
MsgBox “Перспективный спортсмен ”,VbInformation, _
“Тест — Пригодность” ’строка продолжена
Case 0.5 To 0.7
MsgBox “Пригоден, но потенциал средний ”, VbInformation, _
“Тест — Пригодность” ’строка продолжена
Case Is0.7
MsgBox “Заниматься этим видом спорта не рекомендуется ”, VbInformation , _
“Тест — Пригодность” ’строка продолжена
End Select
End Sub
Тест: при х=90, у = 80, z= 0.89; x=90, y=60 , z=0.66
x=100 y=49 z=0.49
3.6 Программирование алгоритмов циклической структуры
С помощью инструкций присваивания и условного перехода можно реализовать сколь угодно сложный алгоритм. Однако на практике выполнение часто повторяющихся последовательностей действий и обработку массивов целесообразнее выполнять с помощью специальных инструкций цикла. Циклы являются основой алгоритмизации задач при их решении на компьютере. Циклы бывают двух видов: с фиксированным числом повторений и циклы с условием — с неизвестным числом повторений. Каждый цикл состоит из заголовка цикла и тела цикла – повторяемого блока операторов. Тело цикла может состоять из одного или нескольких инструкций. В циклах с условием необходимо задавать начальное значение параметра цикла до входа в цикл и его изменение в теле цикла.
В VBA применяются следующие способы организации таких циклов:
Do While- Loop
Синтаксис:
Do While
[Exit Do]
Loop
Цикл выполняется до тех пор, покаистинно.
— логическое выражение, принимающее значение True(истина) или False(ложь).
Необязательная инструкция Exit Do предназначена для прекращения цикла и передачи управления Loop — конец цикла. Цикл с такой организацией называют также циклом с предусловием. Минимальное число повторений этого цикла – 0. Выполнение цикла с предусловием состоит из следующих шагов:
Проверяется . Еслиимеет значение True, то выполняются инструкции, составляющие тело цикла (до оператора Loop) столько раз, пока не примет значение False.
Как толькополучит значение False, осуществится выход из цикла, т. е. переход к оператору, следующему за Loop.
Пример 1. Вычислить N!, при N =10
Текст программы
Sub Factorial_1()
Dim N, Fact As Long ‘ Объявление переменных N и Fact
Fact=1 ‘Начальное значение переменной Fact
N=1 ’ Начальное значение параметра цикла
Do While N
Fact= Fact *N
MsgBox Fact, Vbinformation,”Вывод текущего значения”
N=N+1 ’ Изменение параметра цикла
Loop ‘ конец цикла
MsgBox “fact=”fact, Vbinformation, “Результат”
End Sub
Цикл структуры Do — Loop Until
Do
[Exit Do]
Loop Until
Цикл повторяется, пока условие ложно. Как только условие станет истинным, цикл прекращается. Цикл с такой организацией называют также циклом с постусловием, рис.8.4.б)
В циклах с постусловием выполняются все инструкции тела цикла, а затем проверяется условие, поэтому цикл выполнится хотя бы один раз.
Рассмотрим предыдущий пример с новой организацией цикла.
Пример 2. Вычислить и напечатать N! Для N =10.
Текст программы
Sub Factorial_2()
‘Объявление переменных N,Fact
Dim N,Fact As Long
Fact = 1 ‘Начальное значение факториала
N = 1 ‘Начальное значение параметра цикла n
Do
Fact = Fact * N ‘Вычисление факториала
‘Вывод текущего значения факториала
MsgBox Fact,vbInformation, Вывод текущего значения
N = N + 1 ‘Изменение параметра цикла
Loop Until N = 10
‘Вывод результата
MsgBox fact=fact,vbInformation, Результат
End Sub
Помимо рассмотренных структур имеются их модификации:
с предусловием Do Until – Loop
Синтаксис структуры
_ Do Until
[Exit Do]
Loop
Until указывает на то, что цикл выполняется до тех пор, пока условие не станет истинным. Минимальное число повторений цикла 0.
С постусловием Do — Loop While
Синтаксис структуры
Do
[Exit Do ]
Loop While
Цикл выполняется хотя бы один раз, проверкавыполняется в конце цикла
While- Wend.
Синтаксис структуры
While
Wend
Выполняется последовательность инструкций, пока заданное условие имеет значение True.
Пример 3. Вычислить значение функции f(x) = sin(x) при 1
Sub FN()
Dim X, f, H As Single, S, S1
X = 1 ’Начальное значение параметра цикла
H = 0.1 ’Шаг изменения параметра цикла
While X
F=Sin(X)
F=Format(F, ” ###0.000”)
S=SStr (F)
S1=S1Str(X)
X = X + H ’Изменение параметра цикла
X=Format (X, “###0.0”)
MsgBox “X = ”S1“ ”(Chr(10)Chr(13)) _
“F = ”S“ ”(Chr(10)Chr(13)) _
, VbInformation,” Значения аргумента Х и функции F”
Wend
End Sub
3.7 Массивы и типовые алгоритмы их обработки
Программирование алгоритмов циклической структуры с заданным числом повторений
Инструкция цикла For — Next
В случаях, когда заранее известно число повторений некоторого процесса, пользуются инструкцией цикла с параметром. Формат записи этой инструкции следующий:
For=To[Step ]
Next
где For … Next– заголовок цикла;
— числовая переменная, определяемая в заголовке цикла;
— тело цикла;
S1 и S2 – выражения, определяющие начальное и конечное значения параметра цикла;
S3 – выражение, определяющее шаг приращения значения выражения S1 до значения S2. При S30, должно выполняться условие, что S1
Пример 1. Инструкция выводит в одной строке цифры от 1 до 10.
S=””
For I=1 To 10
S=S+Str (I)+” ”
Next I
MsgBox S” Цифры от 1 до 10”
Работа инструкции For осуществляется таким образом, что тело цикла выполняется последовательно с каждым значением параметра цикла от начального до конечного.
Когда значение параметра цикла превзойдет конечное значение , цикл завершится и будет выполняться инструкция, следующая за конструкцией For.
Пример 2. Фрагмент программы с инструкциями For для определения суммы квадратов значений от 0 до 2 с шагом 0,5 и MsgBoxдля вывода на экран этого значения.
K=0
For x=0 To 2 Step 0.5
K=K+x^2
Next X
MSGBOX “сумма квадратов значений от 0 до 2 с шагом 0,5 К = ” К
Инструкция цикла For — Each – Next
Формат записи:
For Each Элемент In Группа
[Инструкции]
[Exit For ]
[Инструкции]
Next [Элемент]
Повторяет выполнение группы инструкций для каждого элемента массива (или семейства, лаб. работа 15).
Массивы
Понятие массива и его описание
Часто возникает необходимость решения задачи с большим, но конечным числом однотипных упорядоченных данных. Удобно описывать такой упорядоченный набор перенумерованных компонент одним идентификатором (именем). Для этого в языке VBA предусмотрен отдельный тип данных, называемый массивом. Массив – это структурированный тип данных, состоящий из фиксированного числа элементов, имеющих один и тот же тип. Тогда для указания той или иной компоненты можно использовать имя массиваи порядковый номернужнойкомпонентыв этом массиве. Этот номер называется индексом массива.
Таким образом, для задания массива необходимо указать тип элементов массива и их количество. Тип элементов массива называется базовым.
Формат описания массива следующий:
Dim([] ) As
где- имя массива;
— необязательный параметр, предназначенный для определения индекса первого элемента массива.
— индекс последнего элемента массива. При использовании массивов не следует забывать, что в VBA индексирование по умолчанию начинается с нуля, т.е. индекс 0 обозначает первый элемент массива, индекс 1 – второй и т.д. Если есть необходимость изменить базу индекса, то в начале листа модуля записывают инструкцию Option Base 1или другой способ изменения базы – использование слова To при объявлении массивов,
Пример3.
Описание одномерного массива, состоящего из 10 вещественных чисел
Dim A(9) As Single
Описание одномерного массива, состоящего из 5 элементов целых значений
Dim A(1 TO 5) As Byte
Иногда в процессе выполнения программы требуется изменить размер массива. В этом случае первоначально массив объявляют как динамический. Для этого при объявлении массива не указывают его размерность, например:
В программе следует вычислить необходимый размер массива и связать его с некоторой переменной m, затем изменить размер массива с помощью ReDim.
Пример 4.
Dim C() As Single
m=InputBox(“Ввести конечное число элементов массива”,”Ввод _ числа”)
ReDim C(m)
Действия над элементами массивами
После объявления массивов в разделе описания можно обработать каждый элемент массива в исполняемой части программы, указав имя массива и индекс элемента в круглых скобках. Например, второй элемент одномерного массива с именем A записывается как A(2).
Индексированные элементы массива являются переменными базового типа и могут быть использованы так же, как простые переменные. В частности, им можно присваивать любые значения, соответствующие их типу.
Обработка элементов массива, как правило, производят в цикле For таким образом, чтобы параметр (индекс) цикла использовался для индексирования массива. По мере изменения индекса от нижней границы до верхней, обрабатываются один за другим все элементы массива.
Типовые алгоритмы обработки массивов
Рассмотрим основные действия над массивами и их элементами на примере следующих массивов.
Dim A(10) As Single, D(10) As Single
Dim I As Integer, J As Integer, K As Integer,VS As Single
Обнуление массива
For I=0 To 10
A(I)=0
Next I
Ввод-вывод массива
Ввод массива
For I=0 To 10”
A(I)=InputBox (“I=“+STR(I),” Ввод значений массива A”)
Next I
Вывод массива
S=””
For I=1 To 10
S=SA(I)” ”
Next I
MsgBox S,,”Массив A из 10 элементов”
Копирование массива
For I=0 To 10
D(I)=A(I)
Next I
Поиск в массиве по условию
Поиск всегда осуществляется с использованием дополнительной переменной. Пусть требуется определить К — количество нулевых и N – количество отрицательных элементов массива A. Фрагмент программы будет иметь следующий вид.
K=0
N=0
For I=0 To 10
IF A(I)=0 Then
K=K+1
ElseIf A(I)
N=N+1
End If
Next I
Перестановка
Перестановка значений массива осуществляется с помощью дополнительной переменной того же типа, что и базовый тип массива.
Пусть требуется поменять местами значения двух соседних элементов массива A, тогда соответствующий фрагмент программы с использованием промежуточной переменной X:
X=A(i): A(i)= A(i+1): A(i+1)=X
Типовые алгоритмы нахождения суммы и произведения в одномерном массиве представлены ниже структурными схемами.
Структурные схемы нахождения суммы а) и произведения б) элементов одномерного массива.
3.8 Демонстрационные примеры
Пример 1. Вычислить на ПК наибольший элемент массива X, состоящего из 10 элементов вещественного типа, и его индекс.
Структурная схема алгоритма приведена ниже.
Структурная схема алгоритма нахождения наибольшего элемента массива
Текст соответствующей программы:
Sub Primer1()
Dim X(9) As Single, MAX As Single, IMAX As Byte
Dim S As String
For I=0 To 9
X(I)=InputBox (“I=”+Str (I),,”Значения элементов массива X”)
Next I
MAX=X(9)
IMAX=0
For I=0 To 9
If X(I)MAX Then
MAX=X(I)
IMAX=I
EndIf
Next I
S=“Максимальный элемент массива “+Str (MAX)
S=S+” его порядковый номер “+Str (IMAX)
MsgBox S,,”РЕЗУЛЬТАТ”
End Sub
Выполним тестирование программы для следующих исходных данных:
X(0)=10 X(1)=-1 X(2)=0 X(3)=0.5 X(4)=1.5 X(5)=1 X(6)=-0.1 X(7)=0.1 X(8)=0.35 X(9)=-1.5
Тогда максимальный элемент должен быть равен 10, его порядковый номер 1.
Результаты работы программы совпадают с ручны
Статьи к прочтению:
- Алгоритм, записанный на «понятном» компьютеру языке программирования, называется программой.
- Алматинского университета энергетики и связи
Тема 2 Программирование линейных и разветвляющихся структур алгоритмов
Похожие статьи:
-
Алгоритмы циклической структуры
Алгоритмы, отдельные действия в которых многократно повторяются, называются алгоритмами циклической структуры (повторение). Совокупность действий…
-
Алгоритмы со структурой вложенных циклов
Любой цикл, содержащий внутри себя один или несколько других циклов, называется вложенным. Цикл, охватывающий другие циклы, называется внешним а…