Алгоритм линейной структуры

Алгоритмизация вычислительных процессов

Основные понятия об алгоритмизации задач

Этапы решения задач на компьютере

Процесс преобразования исходных данных в конечные результаты решения задачи (вычислительный процесс) включает следующие основные этапы:

Изучение поставленной задачи:

выбор и анализ математической модели;

анализ исходных данных и определение их имен;

определение имен конечного и промежуточного (если есть в этом необходимость) результатов, а для числового результата также их точности;

определение шагов решения задачи.

Описание алгоритма поставленной задачи.

Запись алгоритма на языке программирования высокого уровня.

Создание программы в среде программирования.

Запуск и отладка программы.

Анализ полученного результата.

Алгоритм и его свойства

Алгоритм (алгорифм) – любая конечная последовательность основных математических и логических действий, однозначно определяющих процесс преобразования исходных данных в конечные результаты решения задачи. Название «алгоритм» произошло от латинской формы арабского по имени хорезмийского математика аль-Хорезми – 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<=x<=5 с шагом h=0.1.

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 147 483 648 .. 2 147 483 647
Single(вещественный) -3,402823E38 ..- 1,401298E-45для отрицательных значений; 1,401298E-45 .. 3,402823E38 для положительных значений
Double 1,79769313486232 E 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 + y > z ;

Логические 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 = " ГРУППА"

MsgBox " A= " & A & (Chr(10) & Chr(13)) _ ‘ Вывод результата в окно

& " B= " & B & (Chr(10) & Chr(13)) _ ’ в трех строках

& " D= " & D, vbInformation, Date & C

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")

MsgBox " x= " & 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 имеются две формы записи условного оператора: полная и сокращенная. Формат записи оператора условного перехода:

If <условие > Then < инструкция _1 > [Else < инструкция р 2 >]

If( если ), Then(то), Else(иначе)- ключевые(служебные) слова.

Условие представляет собой выражение логического типа. Оператор If работает следующим образом: если условие истинно (имеет значение True), то выполняется инструкция _1(первая ветвь), в противном случае выполняется инструкция _2(вторая ветвь). Обе ветви могут содержать несколько , инструкций, разделенных двоеточием.

Примеры записи инструкции If.

If x>0 Then x=x+1 Else x=0

If x>0 Then x=x+1: MsgBox x Else x=0

If y>0 Then y=sqr(y)

Для организации разветвлений на три направления и более можно использовать несколько конструкций If, вложенных друг в друга. При этом каждое Else соответствует непосредственно предшествующему ему Then.

Формат конструкции :

If < условие> Then

< инструкции>

ElseIf < условие> Then

< инструкции>

ElseIf < условие > Then

…..

…..

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> ‘ вариант 1

< инструкция(и)_1 >

……………….

Case <список _выражений _n > ‘ вариант n

< инструкция(и)_n >

[Case Else

[<инструкция(и)_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 Is < 0.5

MsgBox “Перспективный спортсмен ”,VbInformation, _

“Тест - Пригодность” ’строка продолжена

Case 0.5 To 0.7

MsgBox “Пригоден, но потенциал средний ”, VbInformation, _

“Тест - Пригодность” ’строка продолжена

Case Is > 0.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<=10 ‘Начало цикла, Проверка условия

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<=x<=2 с шагом h=0.1

 

Sub FN()

Dim X, f, H As Single, S, S1

X = 1 ’Начальное значение параметра цикла

H = 0.1 ’Шаг изменения параметра цикла

While X <= 2 ’Проверка условия

F=Sin(X)

F=Format(F, ” ###0.000”)

S=S & Str (F)

S1=S1 & Str(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 <параметр цикла> = <S1> To <S2> [Step <S3>]

<Инструкции>

Next <параметр цикла>

где For … Next– заголовок цикла;

< параметр цикла> - числовая переменная, определяемая в заголовке цикла;

<инструкции> - тело цикла;

S1 и S2 – выражения, определяющие начальное и конечное значения параметра цикла;

S3 – выражение, определяющее шаг приращения значения выражения S1 до значения S2. При S3>0, должно выполняться условие, что S1<=S2, в случае, если S3<0 – S1>=S2 . Выражение S3 является необязательным параметром инструкции FOR, поэтому при его отсутствии шаг принимает значение +1.

Пример 1. Инструкция выводит в одной строке цифры от 1 до 10.

S=””

For I=1 To 10

S=S+Str (I)+” ”

Next I

MsgBox S & ” Цифры от 1 до 10”

Работа инструкции For осуществляется таким образом, что тело цикла выполняется последовательно с каждым значением параметра цикла от начального до конечного.

Когда значение параметра цикла превзойдет конечное значение <S2>, цикл завершится и будет выполняться инструкция, следующая за конструкцией 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 <идентификатор> ([<нижняя граница TO>] <верхняя граница>) 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=S & A(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)<0 THEN

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.

Результаты работы программы совпадают с ручны