Программирование линейного алгоритма
Лабораторная работа №2
Программирование алгоритмов линейной структуры
Цель:
Научиться составлять простые программы. Изучить правила записи оператора присваивания и организации ввода/вывода.
Результат обучения:
После успешного завершения занятия пользователь должен:
ü конструировать Windows-окно на основе метки, редактора ввода, кнопки;
ü уметь переключаться между окнами интегрированной среды;
ü уметь компилировать программу и запускать на выполнение;
ü записывать операторы присваивания в соответствии с правилами языка VBA;
ü организовывать ввод и вывод информации в программе.
Типы данных
Тип данных определяет множество допустимых значений, которое может принимать указанная переменная, а также действия, производимые с переменной. В VBA имеются следующие типы данных: Byte, Boolean (логический), Integer (целое), Long (длинное целое), Single (с плавающей точкой обычной точности), Double (с плавающей точкой двойной точности), Currency (денежный), Decimal (масштабируемое целое), Date (дата и время), Object (объект), String (строка), Variant (тип, используемый по умолчанию), тип данных, определяемый пользователем, а также специфические типы объектов.
В VBA переменная используется для временного хранения данных в оперативной памяти, т.е. она идентифицирует область памяти, где хранится некоторая информация. Переменная должна быть объявлена прежде, чем ее можно использовать. Объявление производится при помощи операторов Dim, Private, Static или Public. Эти инструкции определяют разные области видимости переменных (о чем будет идти речь в следующих лабораторных работах). Следующая инструкция объявляет целую переменную:
Dim N As Integer
Если описание (объявление) переменной опущено, то по умолчанию переменная получает тип Variant.
Для обязательного объявления всех переменных в начале модуля, в так называемой области модуля General Declaration, надо поместить директиву Option Explicit.
Комментарии
Текст, следующий в программе за символом ‘ (апостроф) до конца строки, игнорируется компилятором и представляет собой комментарий. Комментарии поясняют текст программы. Примеры комментариев:
Dim a As Integer
‘***************************
‘* a – сторона прямоугольника *
‘***************************
‘ b= sin(2)’ – этот оператор отключен
Оператор присваивания
Основным оператором процедурного языка программирования является оператор присваивания. Синтаксис оператора:
<Переменная>=<Выражение>
Переменная и выражение должны иметь один и тот же тип. Примеры:
S = (a + b+ c)/3
S и соответствующее выражение в правой части имеют вещественный тип.
L = (S>0) OR (P<100)
L и выражение в правой части имеют логический тип.
Выражение записывается в строку, поэтому программист должен следить за последовательностью вычислений. Приоритет арифметических действий такой же, как в алгебре. Для изменения последовательности действий необходимо использовать скобки. В операторе присваивания используются стандартные функции. Со стандартными функциями VBA можно познакомиться, вызвав справочную систему интегрированной среды.
Пусть необходимо записать оператор присваивания для выражения
Оператор присваивания:
F = (x*x + 2 * y – (COS(x))^2)/(y * y + SQR(2 * x * x + 1)) ?
Еще один пример:
Оператор присваивания:
k = EXP(x+y)/(2*x+3*y)*SIN(x*x*x)^2
Ввод данных
Ввести данные в программу можно с помощью редактора TextBox, как это делалось в предыдущей лабораторной работе. Для ввода используется свойство Text текстового редактора.
Х = TextBox1.Text
В результате такого действия в переменную Х будет записана строковая величина, введенная в окно редактора. Если ввести требуется число, то необходимо преобразовать строку в число. Для этого можно воспользоваться функцией Val.
Х = Val(TextBox1.Text)
Ввести данные можно с помощью функции InputBox. Функция InputBox выводит на экран диалоговое окно, содержащее сообщение, поле ввода и две кнопки Ok и Cancel. Она устанавливает режим ожидания ввода текста пользователем и нажатия кнопки. При нажатии на кнопку Ok возвращает значение типа String, содержащее текст, введенный в поле ввода. При нажатии кнопки Cancel возвращается пустая строка.
InputBox(Promt [, Title] [, Default] [, Xpos] [,Ypos] [, Helpfile, Context])
Promt — строковое выражение, отображаемое как сообщение в диалоговом окне.
Title — строковое выражение, отображаемое в строке заголовка диалогового окна.
Default — строковое выражение, отображаемое в поле ввода как используемое по умолчанию.
Xpos,Ypos — позиции вывода окна.
Helpfile, Context — имя справочного файла и номер раздела справочной службы.
То, что записано в квадратных скобках, можно опускать. Пример:
Dim N As String, D As Single
N = InputBox(«Введите пароль»)
D = Val(InputBox(«Введите диаметр»))
Вывод данных
Вывести данные можно в компоненты Label, TextBox. Для этого используются свойства Caption и Text, например,
Label1.Caption = “Программа на VBA”
Label1.Caption = Str (X)
TextBox1.Text = “Программа на VBA”
TextBox1.Text = Str (X)
Вывести данные можно в диалоговое окно. Процедура MsgBox выводит на экран диалоговое окно, содержащее сообщение.
MsgBox (Promt [, Buttons] [,Title] [, Helpfile, Context])
Promt —строковое выражение, отображаемое как сообщение в диалоговом окне.
Buttons — числовое выражение, определяющее количество и тип отображаемых кнопок.
Title — текст в заголовке.
Helpfile, Context — определяет файл справочной системы и номер соответствующего раздела.
Пример:
MsgBox Str(a + b) + " , Пример", , "Заголовок"
Здесь выводится сумма двух переменных и слово пример. Слово «Заголовок» выводится в строке заголовка окна.
Пример обработчика события, содержащего процедуру MsgBox | Рабочее окно | Окно процедуры MsgBox |
Private Sub CommandButton1_Click() a = Val(TextBox1.Text) b = Val(TextBox2.Text) MsgBox Str(a + b) + " , Пример" , , "Заголовок" End Sub |
Программирование линейного алгоритма
Алгоритм, в котором все действия выполняются последовательно одно за другим, называется линейным. Приведем пример программы, в которой реализуем линейный алгоритм.
Пример.
Условие задачи:
Какого роста цен за год можно ожидать, если правительство гарантирует, что инфляция в новом году составит р%?
Если за каждый месяц цены возрастут в 1 + р/100 раз, то за год рост цен составит (1+р/100)12 раз или прирост в процентах
Поясним формулу. За один месяц цены возрастут на р/100 и составят 1 + р/100. Для того чтобы сократить изложение, обозначим эту величину за Х.
Х = 1 + р/100
Единица — это условная цена единица товара. В следующем месяце цены возрастут на тот же процент, но уже от имеющихся цен на остаток месяца: Х* р/100. Цены будут иметь значение Х + Х * р/100 или Х*(1 + р/100).
Х*(1 + р/100) = Х2
В следующем (третьем месяце) цены будут иметь значение:
Х2 + Х2*р/100 = Х2*(1+р/100) = Х3
И так далее. В конце 12-го месяца года цена единицы товара будет равна Х12 или(1 + р/100)12. Очевидно, что рост цены будет равен (1 + р/100)12 – 1.
Чтобы получить прирост в процентах, необходимо умножить на 100%.
Схема алгоритма:
Разработка пользовательской формы
Форма | На форму установлены компоненты |
Label1 — свойство Caption = «Введите процент месячной инфляции». TextBox1 — все свойства без изменений. Label2 — свойство Caption = «Годовой рост цены». Label1 — свойство Caption очищено. CommandButton1 — свойство Caption = «Ok». |
Обработчик события (Click для CommandButton1)
Рабочее окно | Обработчик события |
Private Sub CommandButton1_Click() ‘Заголовок процедуры Dim p, a As Single , s As Single ‘ Описание переменных ‘ p — процент инфляции в месяц. ‘a — кратность роста цен. S — рост цен за год в процентах. p = Val(TextBox1.Text) ‘Ввод числа из окна редактора a = (1 + p / 100) ^ 12 ‘Оператор присваивания s = (a - 1) * 100 ‘Оператор присваивания Label3.Caption = Str(s) ‘Вывод в метку End Sub |
Самостоятельная работа
Составить схему алгоритма, написать и отладить программу в соответствии с вариантом. Не забывайте о комментариях!
№ | Условие | Примеч. |
Определить функцию Y. , где ; | ||
Определить функцию Y. , где ; | ||
Определить функцию Y. , где ; | ||
Определить функцию r. | ||
Определить функцию u. ; | ||
Определить функцию v. ; ; | ||
Определить функцию t. ; ; | ||
Определить функцию Y. , где ; | ||
Определить функцию h. ; ; | ||
Определить функцию Y. , где ; | ||
Определить функцию r. | ||
Определить функцию h. ; ; | ||
Определить функцию t. ; ; | ||
Определить функцию u. ; | ||
Определить функцию К. ; ; |
Домашняя работа
№ | Задача | Примечание |
1 верста = 500 саженей; 1 сажень = 3 аршина; 1 аршин = 16 вершков; 1 вершок = 44,45 мм. Длина некоторого отрезка составляет р метров. Перевести ее в русскую неметрическую систему. | ||
В равнобедренном прямоугольном треугольнике известна высота h, опущенная на гипотенузу. Найти стороны треугольника. | Гипотенуза = 2h; 2a2=4h2 a=hÖ2 | |
Заданы действительная и мнимая части комплексного числа Z = X + I Y. Преобразовать его в тригонометрическую форму и напечатать в виде выражения: Z = r(cos j + i sin j). | ||
Заданы уравнения двух пересекающихся прямых на плоскости: y = k1 + b1; y = k2 + b2. Найти (в градусах и минутах) угол между ними. | ||
Владелец автомобиля приобрел новый карбюратор, который экономит 50% топлива, новую систему зажигания, которая экономит 30% топлива, и поршневые кольца, экономящие 20% топлива. Найти фактическую экономию топлива. |
Дополнительные задания:
1. Заданы моменты начала и конца некоторого промежутка времени в часах, минутах и секундах (в пределах одних суток). Найти продолжительность этого промежутка в тех же единицах измерения.
2. Коммерсант, имея стартовый капитал k рублей, занялся торговлей, которая ежемесячно увеличивает капитал на р%. Сколько лет ему понадобится для накопления суммы S, достаточной для покупки собственного магазина.
3. Длина отрезка задана в дюймах (1дюйм = 2,54см). Перевести значение длины в метрическую систему, то есть выразить ее в метрах, сантиметрах и миллиметрах. Например, 21 дюйм = 0 м 53 см 3,4 мм
4. Угол a задан в градусах, минутах и секундах. Найти его величину в радианах.