ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ
МОСКОВСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
СВЯЗИ И ИНФОРМАТИКИ
Кафедра информатики
Лабораторная работа
по теме: «4.3. Структур VB-программ, классы и процедуры. Средства программирования алгоритмов линейной структуры»
Реализация 1-го задания
Задание
Создать приложение (решение), состоящее из трех проектов для вычисления арифметического выражения:
В каждом проекте для вычисления заданного арифметического выражения необходимо реализовать одну из следующих процедур: процедуру-функцию с формальными параметрами, процедуру-подпрограмму с формальными параметрами и процедуру без параметров (передача данных в соответствующем проекте будет осуществляться через глобальные объекты).
Формализация и уточнение задания
Для формализации и уточнения задания запишем арифметическое выражение на языке программирования:
f = ((5.2 ^ 3) * Log(x + y)) / (x - (1 / (0.45 * Sin(x - 8 * y)))) + 0.5
В соответствии с требованиями задания разобьем решение задачи на несколько отдельных задач и создадим три процедуры пользователя, вычисляющие заданное арифметическое выражения: процедуру-функцию func() с двумя формальными параметрами, необходимыми для вычисления выражения и передающимися по значению как входные аргументы; процедуру-подпрограмму proc1() с тремя формальными параметрами, из которых два необходимы для вычисления выражения и передаются по значению как входные аргументы и один является результатом и передается по ссылке; процедуру-подпрограмму proc2() без параметров, в которой два необходим для вычисления выражения аргумента, а результат передаются через глобальные объекты.
Реализация 2-го задания
Задание
Вычисление площади n-угольника по заданному радиусу R описанной окружности.
Формализация и уточнение задания
Для решения задачи существуют известные формулы:
S = ½ * a * n * r
a = 2*R*sin(180/n) r = R*cos(180/n)
Где а – сторона правильного n-угольника, а r – радиус вписанной окружности.
Выбор типа процедуры (Function или Sub) определяется следующими критериями. Процедуры-функции Function предназначены для вычислений и могут быть частью выражения. Результатом выполнения процедуры-Function является значение какой-либо одной величины числового, строкового или логического типа, которое функция возвращает или через свое имя, или оператором Return. Следовательно, ДлинаОтрезка( ) и vvod( ) – это процедуры типа Function.
Если же процедура должна вычислить и возвратить несколько величин (PS()), или просто выполнить определенные действия, не возвращая никаких значений (vivod()), то такую процедуру следует оформить как процедуру-Sub.
Программный код
Option Strict On
Option Explicit On
Imports System.Math
Public Class Form1
Function stor(ByVal r1 As Double, ByVal nn1 As Double) As Double
Return CDbl(2 * r1 * Sin(PI / nn1))
End Function
Function area(ByVal r1 As Double, ByVal nn As Double, ByVal aa As Double) As Double
Return CDbl((aa * nn * r1 * Cos(PI / nn) / 2))
End Function
Sub vivod(ByVal w As Double, ByVal T As TextBox)
T.Text = CStr(w)
End Sub
Function vvod(ByVal T As TextBox) As Double
Return CDbl(Val(T.Text))
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim r, n, n1, n2, n3, a1, a2, a3, s1, s2, s3 As Double
r = vvod(TextBox4)
n1 = vvod(TextBox1)
n2 = vvod(TextBox2)
n3 = vvod(TextBox3)
a1 = stor(r, n1)
a2 = stor(r, n2)
a3 = stor(r, n3)
s1 = area(r, n1, a1)
s2 = area(r, n2, a2)
s3 = area(r, n3, a3)
vivod(a1, TextBox5)
vivod(a2, TextBox6)
vivod(a3, TextBox7)
vivod(s1, TextBox8)
vivod(s2, TextBox9)
vivod(s3, TextBox10)
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Application.Exit()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
TextBox1.Clear()
TextBox2.Clear()
TextBox3.Clear()
TextBox4.Clear()
TextBox5.Clear()
TextBox6.Clear()
TextBox7.Clear()
TextBox8.Clear()
TextBox9.Clear()
TextBox10.Clear()
End Sub
End Class
Блок-схема
Доказательство правильности результата
Введем R=70, тогда при n1=10 сторона а=2*R*sin18 =>
a≈ 2*70*0,3090169944≈ 43,262379
r=R*cos18 => r≈ 70*0,951056516≈ 66,57395612
S = (½)*a*n*r => S≈ 14400, 738668
~