3.2 Программирование алгоритмов линейной структуры
Тексты программ в VBA хранятся в мáкросах . Макрос на языке VBA должен содержать хотя бы одну подпрограмму, которая называется Главной. От всех остальных она отличается тем, что ей передается управление при вызове макроса.
Подпрограммы не могут быть вложенными. Подпрограмма начинается оператором заголовка, например:
Далее следуют строки, состоящие из операторов. Они составляют тело программы. В одной строке может находиться один или несколько операторов. Один оператор от другого отделяется знаком двоеточия. Один оператор может занимать несколько строк. В этом случае символом продолжения служит последовательность пробел-подчеркивание (_).
Последним оператором в подпрограмме должен быть оператор
Оператор — это минимальная конструкция языка, задающая описание некоторого действия.
Оператор, c помощью которого с клавиатуры в режиме диалога присваивается значение переменной величине, называется оператором ввода.
В программе ввод начальных данных производится в диалоговое окно, которое вызываются при помощи стандартной функции VBA InputBox. Синтаксис оператора ввода:
Имя_Переменной = InputBox(“Текст подсказки”, “Заголовок окна”)
Как только в программе встречается оператор ввода, компьютер вызывает диалоговое окно и ждет, когда пользователь введет с клавиатуры соответствующее значение. После нажатия кнопки ОК или клавиши enter, переменная примет соответствующее значение. Выполнение программы продолжается с оператора следующего за оператором ввода. Например:
a = InputBox(«Введите значение расстояния a», «Окно ввода»)
Результатом вызова функции InputBox является значение, введённое в текстовое поле, которое присваивается переменной а (рис.22).
Рис. 22 Диалоговое окно ввода данных с помощью функции InputBox
Оператор вывода результатов Debug.Print [список_вывода] осуществляет вывод результатов работы программы в окно Immediate.
Вызов этого окна выполняется командой меню Вид /Прямое окно (View/Immediate).
Переменные из списка вывода могут отделяться друг от друга запятой или точкой с запятой, что влияет на форму печати. Если в качестве разделителя используется запятая, то печать позиционированная, при которой строка разбивается на зоны по 14 позиций в каждой зоне. При использовании в качестве разделителя выводного списка точки с запятой числа печатаются подряд через один пробел. Такая форма печати получила название — уплотненная печать.
— если значение А=0.75, а В=-178, то на экране дисплея эти значения будут выведены в следующем виде:
_0,75 _ _ _ _ _ _ _ _ _ -178
— если значение А=0.75, а В=-178, то на экране дисплея эти значения будут выведены в следующем виде:
Если оператор Debug.Print записан без списка переменных, то при печати будет пропускаться одна пустая строка.
В операторе Debug.Print можно использовать функцию TAB(n). Функция TAB используется как один из элементов в списке вывода оператора Debug.Print. Она обеспечивает вывод следующего за ней элемента в позицию n, номер которой задан как аргумент функции TAB (рис.23). Например:
— в 0-ую позицию выводится Sum=, а в 15-ую – число
Рис. 23 Результаты позиционированного вывода в окно Immediate
Если аргумент функции TAB меньше текущей позиции строки, то вывод результата осуществляется в следующей строке экрана.
Программа линейной структуры может содержать только операторы ввода, вывода и присваивания.
Оператор присваивания служит для присваивания переменной значения арифметического выражения и имеет вид:
Переменная = Выражение
При выполнении этого оператора вычисляется значение Выражения и присваивается Переменной, при этом тип выражения должен совпадать с типом переменной. Тип выражения определяется типом операндов, входящих в него, и зависит от операций, выполняемых над ними. Например,
X = (Y + Z) / (2 + Z * 10) — 1/3 — вещественный тип
Для записи арифметических выражений используются знаки операций (сложение, умножение, вычитание, деление, возведение в степень), функции, круглые скобки.
Таблица 6 – Встроенные математические функции
Лекция 3 Алгоритмы линейной структуры и их программирование
Линейными называют алгоритмы, в которых операции выполняются последовательно одна за другой, в естественном и единственном порядке.
Рассмотрим реализацию простейшего линейного алгоритма и приведем полный текст программы на языке Тurbo-Рascal. В таких алгоритмах все блоки имеют последовательное соединение логической связью передачи информационных потоков. В них могут использоваться все блоки, за исключением блоков проверки условия и модификации. Линейные алгоритмы, как правило, являются составной частью любого алгоритмического процесса.
Пример 3 Вычислить значение функции:
.
Очевидно, что функцию Y целесообразно вычислять в такой последовательности: предварительно введя исходные данные a, b, c и присвоив значение переменной х, вначале найдем значение выражения, которое обозначим переменной z, и далее определим выражение Y. Используя общепринятые символы блоков (рисунок 1), изобразим схему разрабатываемого алгоритма (рисунок 2) и составим программу: при значении аргумента x = 1,5 и произвольных значениях переменных a,b,c.
.
WRITELN(‘ВВЕДИТЕ A,B,C’); READLN(A,B,C);
Рисунок 2 – Схема алгоритма линейной структуры примера 3
После запуска программы на выполнение вводим численные значения исходных данных a, b, c с клавиатуры, разделяя числа пробелами. После выполнения программы на экране появится результат вычислений.
Рассмотрим реализацию простейшего линейного алгоритма на языке ТР и приведем полный текст программы.
Пример 4. Вычислить значение функции Y по формуле
Y = sina 2 + 4ax 3 + |a – b| для заданных значений переменных a, x, b (a = 1,5, x = 2, b = 5).
WRITELN (‘ВВЕДИТЕ A, B, X’);
Рисунок 3 – Схема алгоритма линейной структуры примера 4
После запуска программы на выполнение вводим численные значения исходных данных A, B, X с клавиатуры, разделяя числа пробелами: 1.5 2 5.
После выполнения программы на экране появится результат вычислений в виде: Y= 52.2781.
Лекция 4 Программирование разветвляющихся алгоритмов
1. Схемы алгоритмов разветвляющейся структуры
2. Оператор безусловного перехода GOTO
3. Оператор условного перехода IF
Оператор безусловного перехода GOTO
Общий вид оператора: GOTO ;.
Метка ставится перед оператором, которому передается управление и отделяется от него двоеточием. Метка должна быть описана в разделе LABEL. Например:
Необходимо помнить, что оператор, следующий непосредственно за GOTO, всегда должен иметь метку, в противном случае он никогда не будет выполняться.
Оператор условного перехода IF
Для программирования разветвляющихся алгоритмов используются операторы перехода, которые позволяют изменять последовательность выполнения операторов программы. Операторы перехода, обеспечивающие выполнение той или иной ветви алгоритма в зависимости от выполнения некоторого условия, называются условными.
Условный оператор IF записывается в виде:
Оператор условного перехода IF может быть представлен схемой (рисунок 4). Если логическое выражение истинно, то выполняется оператор 1, если нет – оператор 2. В качестве операторов 1, 2 могут использоваться другие операторы IF. В этом случае каждое ELSE относится к ближайшему слева IF. Рекомендуется слово ELSE писать под соответствующим ему словом THEN для удобства восприятия программы. Перед ELSE “;” никогда не ставится.
Рисунок 4 – Схема оператора условного перехода IF
В логических выражениях используются операции отношения (таблица 4). Результатом вычисления логического выражения могут быть только два значения: истина (TRUE) или ложь (FALSE).
Таблица 4 – Операции отношения алгоритмического языка ТР
1.3 Алгоритмы линейной структуры и используемые в них операторы
Алгоритм называется линейным, если все операции в нем выполняются последовательно друг за другом.
Оператор присваивания позволяет изменить текущее значение переменной. Вид оператора приведен в таблице D1. Вычисляется выражение, стоящее справа от знака «:=» («присвоить»), полученный результат присваивается переменной, стоящей в левой части оператора. При этом старое значение, хранившееся в ней, безвозвратно пропадает. Например, Р:= 5; (в переменную Р запишется число 5).
Для ввода данных и вывода результатов используются процедуры ввода и вывода (таблица D1). Существуют форматный и бесформатный способы вывода.
1.4 Пример алгоритма и программы линейной структуры
Даны переменные a и b. Найти
При составлении алгоритма необходимо выделить однотипные выражения (здесь a 2 +b 2 ), которые достаточно посчитать один раз, а затем использовать результат вычислений. Желательно разбить сложные вычисления одного выражения на более простые (например, отдельно вычислить числитель и знаменатель дроби) для того, чтобы в алгоритме не было громоздких формул. На рисунке 1.1 представлен вариант блок-схемы алгоритма и программа.
Рисунок 1.1 — Блок-схема алгоритма и программа линейной структуры
Вычисление значения Z производится в следующей последовательности:
- в блоке 2 вводятся исходные данные – значения a и b;
- в блоке 3 вычисляется арифметическое выражение a2+b2 и результат запоминается в переменной c;
- в блоках 4-6 вычисляются первое слагаемое, числитель и знаменатель второго слагаемого;
- в блоке 7 производится окончательный расчет Z;
- в блоке 8 выводятся исходные данные и результат.
В программе действия блоков 3-7 записываются операторами присваивания, блоки 2 и 8 реализуются операторами ввода/вывода. Ввод осуществляется с запросом, поэтому сначала записан оператор Write, а затем Read. Вывод осуществляется форматным способом. Все переменные, участвующие в программе, объявляются в разделе Var ее описательной части. 1.5 Варианты заданий Составить блок-схему и программу вычисления значений функции при заданных значениях аргумента.
1) | 2) |
3) | 4) |
5) | 6) |
7) | 8) |
9) | 10) |
11) | 12) |
13) | 14) |
15) | 16) |
17) | 18) |
19) | 20) |
21) | 22) |
23) | 24) |
25) | 26) |
27) | 28) |
29) | 30) |
1.6 Контрольные вопросы 1 Назовите основные этапы подготовки и решения задач на ПК? 2 Что такое алгоритмический язык? 3 Что такое алгоритм? Назовите основные свойства алгоритмов. 4 Что понимается под «блок-схемой»? Назовите элементы блок-схемы. 5 Опишите структуру простейшей Паскаль-программы. 6 Какие типы данных используются в Паскале? 7 Какой алгоритм называется линейным? Опишите оператор присваивания. 8 Каких правил следует придерживаться при составлении арифметических выражений? 9 Подумайте как можно представить в Паскале функции tgx, ctgx, lgx ? 10 Какие операторы используются для ввода и вывода данных в Паскале? 11 Как осуществляется форматный и бесформатный выводы в Паскале? 12 Как осуществляется вывод с комментарием в Паскале? Лабораторная работа №2. Программирование алгоритмов разветвленной структуры Цель работы – ознакомление с особенностями программирования алгоритмов разветвленной структуры, а также использования различных операторов перехода. 2.1 Алгоритмы разветвленной структуры. Операторы перехода и выбора Ветвящимся (разветвленным) называется алгоритм, в котором в зависимости от исходных данных или промежуточных результатов вычисления реализуется по одному из нескольких заранее предусмотренных (возможных) направлений, называемых ветвями вычислений. Оператор условного перехода реализует разветвление алгоритма и применяется, когда в зависимости от условия необходимо выполнить либо одно, либо другое действие. В качестве условий используются логические отношения. Логические отношения представляют собой записи равенств и неравенств: , =, =,<> (не равно), AND (логическое «и»), OR (логическое «или»). В Паскале оператор условного перехода имеет две конструкции (таблица D1). В Паскале принят порядок выполнения операторов согласно их следованию в программе. Если необходимо обойти какую-то группу операторов, то используется оператор безусловного перехода, который в блок-схеме отображается в виде стрелки, а не отдельного блока (таблица D1). Метка, используемая в операторе, показывает, что дальнейшая работа должна проводиться в другой части программы, с той строки, на которую она указывает и должна быть предварительно описана в разделе Label (например, GotoNM;). Этот оператор используется только в исключительных ситуациях, поскольку такие переходы разрушают связи между структурой программы и структурой вычислений, что приводит к потере ясности программы и затрудняет задачу верификации (доказательства правильности составления программы). Кроме оператора безусловного перехода, в Турбо Паскале 7.0 иногда используются четыре безусловные функции: — Break – позволяет досрочно закончить цикл; — Continue – позволяет начать новую итерацию цикла, не дожидаясь окончания предыдущей итерации; — Exit – позволяет завершить работу текущего программного блока (программу, процедуру); — Halt(n) – позволяет завершить работу программы с кодом завершения n. К операторам разветвляющейся структуры относится также оператор выбора (варианта), позволяющий программировать сложные ветвления, когда имеется несколько (обычно равновероятных) вариантов действия (таблица D1).