Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > Microsoft Office и VBA > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 18.12.2009, 17:59   #1
Kuzia
 
Регистрация: 18.12.2009
Сообщений: 4
По умолчанию Как рассчитать периметр фигуры

Дана трапеция с основаниями А,В, высотой h, углами k,l.
Данные вводятся в Userform произвольные.
Периметр рассчитывается по формуле
P = (A + B) + h * ((1 / sin(k)) + 1 / sin(l))
Углы вводятся в форму в градусах. Для расчетов их надо перевести в радианы: k= значение в градусах*Пи/180.
Как написать эту формулу в VB? Через какие функции и т.п.???
Kuzia вне форума Ответить с цитированием
Старый 18.12.2009, 18:41   #2
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Все используемые здесь операции и функции являются стандартными математическими. Если пишете макрос, то так и пишите.
Пример:
Код:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

A = 1
B = 1
h = 1
k = 3.1415 / 2
l = k

P = (A + B) + h * ((1 / Sin(k)) + 1 / Sin(l))
MsgBox (P)

End Sub

Последний раз редактировалось motorway; 18.12.2009 в 18:45.
motorway вне форума Ответить с цитированием
Старый 23.12.2009, 17:16   #3
Kuzia
 
Регистрация: 18.12.2009
Сообщений: 4
По умолчанию Как рассчитать периметр фигуры

не совсем понятно.
У меня макрос получается такой:

Private Sub cmdStart_Click()
Dim A As Integer, B As Integer, h As Integer, k As Double, l As Double
A = Val(txtA.Text)
B = Val(txtB.Text)
h = Val(txth.Text)
If (A <> B) And ((k + l) < 180) And (k <= 90) And (l <= 90) Then
P = (A + B) + h * ((1 / sin(k)) + 1 / sin(l))
S = ((A + B) * h) / 2
txtP.Text = Str(P)
txtS.Text = Str(S)
Else
MsgBox "Îøèáêà!" + Chr(13) + "Äàííàÿ ôèãóðà íå ÿâëÿåòñÿ òðàïåöèåé", vbCritical + vbOKOnly, "Îøèáêà!!!"
txtA.Text = ""
txtB.Text = ""
txth.Text = ""
txtk.Text = ""
txtl.Text = ""
txtA.SetFocus
End If
End Sub
А куда вставить строчку про углы k и l? И как их описать в радианах?
Kuzia вне форума Ответить с цитированием
Старый 23.12.2009, 17:48   #4
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Моя строчка про углы была только для примера. А для радианов умножьте углы на пи и разделите на 180, это надо вставить перед функцией синуса.
motorway вне форума Ответить с цитированием
Старый 24.12.2009, 07:51   #5
Юнлинг
Форумчанин
 
Регистрация: 17.10.2008
Сообщений: 239
По умолчанию

Цитата:
Сообщение от Kuzia Посмотреть сообщение
не совсем понятно.
У меня макрос получается такой:

Private Sub cmdStart_Click()
Dim A As Integer, B As Integer, h As Integer, k As Double, l As Double
A = Val(txtA.Text)
B = Val(txtB.Text)
h = Val(txth.Text)
If (A <> B) And ((k + l) < 180) And (k <= 90) And (l <= 90) Then
P = (A + B) + h * ((1 / sin(k)) + 1 / sin(l))
S = ((A + B) * h) / 2
txtP.Text = Str(P)
txtS.Text = Str(S)
Else
MsgBox "Îøèáêà!" + Chr(13) + "Äàííàÿ ôèãóðà íå ÿâëÿåòñÿ òðàïåöèåé", vbCritical + vbOKOnly, "Îøèáêà!!!"
txtA.Text = ""
txtB.Text = ""
txth.Text = ""
txtk.Text = ""
txtl.Text = ""
txtA.SetFocus
End If
End Sub
А куда вставить строчку про углы k и l? И как их описать в радианах?
Я уже один раз Вам отвечал. Повторюсь.
По данным в вашей программе не возможно расчитать периметр не хватает хотя бы одного угла. Для расчета с использованием двух углов все просто - дабавляете еще два поля в своей UserFormе. в этом случае ваша прога будет иметь другой вид
Код:
    Private Sub cmdStart_Click()
    Dim A As Integer, B As Integer, h As Integer, k As Double, l As Double
    A = Val(txtA.Text)
    B = Val(txtB.Text)
    h = Val(txth.Text)
    k = Val(txtk.Text)
    l = Val(txtl.Text)
    If (A <> B) And ((k + l) < 180) And (k <= 90) And (l <= 90) And (k>0) And (l>0) Then
    k=k*3.14/180
    l=l*3.14/180
    P = (A + B) + h * ((1 / sin(k)) + 1 / sin(l))
    S = ((A + B) * h) / 2
    txtP.Text = Str(P)
    txtS.Text = Str(S)
    Else
        MsgBox "Îøèáêà!" + Chr(13) + "Äàííàÿ ôèãóðà íå ÿâëÿåòñÿ òðàïåöèåé", vbCritical + vbOKOnly, "Îøèáêà!!!"
    txtA.Text = ""
    txtB.Text = ""
    txth.Text = ""
    txtk.Text = ""
    txtl.Text = ""
    txtA.SetFocus
    End If
End Sub
Но наличие двух углов - избыточное условия. Можно провести расчет вводя только один угол - прилежащий к меньшей стороне.
Тогда ваш макрос будет иметь следующий вид
Код:
    Private Sub cmdStart_Click()
    Dim A As Integer, B As Integer, h As Integer, k As Double
    Dim l As Variant
    A = Val(txtA.Text)
    B = Val(txtB.Text)
    h = Val(txth.Text)
    k = Val(txtk.Text)
    k=k*3.14/180
    l = h/(sqrt((sqrt((a-b)^2)-h*ctg(h))^2)+h^2)
    If (A <> B) And ((k + l) < 180) And (k <= 1.57) And (l <= 1) And (k>0) And (l>0) Then
    P = (A + B) + h * ((1 / sin(k)) + 1 / l)
    S = ((A + B) * h) / 2
    txtP.Text = Str(P)
    txtS.Text = Str(S)
    Else
        MsgBox "Îøèáêà!" + Chr(13) + "Äàííàÿ ôèãóðà íå ÿâëÿåòñÿ òðàïåöèåé", vbCritical + vbOKOnly, "Îøèáêà!!!"
    txtA.Text = ""
    txtB.Text = ""
    txth.Text = ""
    txtk.Text = ""
    txtl.Text = ""
    txtA.SetFocus
    End If
End Sub
где l- синус второго угла.

Обратите внимание на существенное дополнение Вашего условия, а именно
Код:
And (k>0) And (l>0)
Это необходимо чтобы избежать деления на 0

Последний раз редактировалось Юнлинг; 24.12.2009 в 07:58.
Юнлинг вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как рассчитать значения в табеле? fs444 Microsoft Office Excel 2 16.11.2009 13:10
как рассчитать какой тренд-убывающий или возрастающий? kate158 Microsoft Office Excel 3 06.09.2009 04:36
как с помощью html рисовать геометрические фигуры 1100100011000101 HTML и CSS 3 01.05.2009 18:17
3D фигуры, как реализовать? Nikiforov Помощь студентам 2 22.02.2008 00:24


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS