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

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

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

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

Все используемые здесь операции и функции являются стандартными математическими. Если пишете макрос, то так и пишите.
Пример:
Код:
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
__________________
Скрипты PHP, VBA. Skype:ktmtramway Расписание электричек
Быстрый проверенный хостинг.

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

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

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, 18:48   #4
motorway
Профессионал
 
Регистрация: 28.06.2009
Сообщений: 1,950
Репутация: 196
По умолчанию

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

Цитата:
Сообщение от 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 в 08:58.
Юнлинг вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


23:11.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.