Скачиваний:
18
Добавлен:
06.11.2017
Размер:
196.43 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ

МОСКОВСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

СВЯЗИ И ИНФОРМАТИКИ

Кафедра информатики

Лабораторная работа

по теме: «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

~ 6 ~