Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
1 / 1 / 0
Регистрация: 29.06.2016
Сообщений: 19

Вычисление стороны треугольника по теореме синусов

30.06.2016, 12:16. Показов 2324. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
даны углы треугольника и радиус описанной окружности
1. надо написать процедуру-функцию, которая вычисляет сторону треугольника а , по теореме синусов " a/sin a=2R " в параметрах процедуры естественно a и R.
2. написать код, в котором эта процедура используется три раза, для вычисления трёх сторон. то есть вводим углы треугольника и радиус окружности и на выходе получаем три стороны.
код, видимо, короткий, можно без комментариев - всё пойму.

Добавлено через 13 часов 24 минуты
upd. хоть в коде вычисление напишите. уж вывод на экран и привязку к кнопке сделаю.

Добавлено через 1 час 24 минуты
можен, возможно этот код "подрихтовать" под 6.0 из дот-нет?

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Public Class Form1
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
 
        Dim To_Radian As Double = Math.PI / 180.0R
 
        Dim Sin_Teorem =
        Function(alpha As Double, rad As Double) As Double
 
            Return Math.Sin(alpha) * 2.0R * rad
 
        End Function
 
        Dim a As Double = Val(InputBox("Введите a угол треугольника(градусы):", "Угол", "0.0")) * To_Radian
        Dim b As Double = Val(InputBox("Введите b угол треугольника(градусы):", "Угол", "0.0")) * To_Radian
        Dim c As Double = Val(InputBox("Введите c угол треугольника(градусы):", "Угол", "0.0")) * To_Radian
 
        Dim r As Double = Val(InputBox("Введите радиус описанной окружности:", "Радиус", "0.0"))
 
        MsgBox("Стороны в треугольнике такие:" & vbNewLine &
               Sin_Teorem(a, r).ToString & vbNewLine &
               Sin_Teorem(b, r).ToString & vbNewLine &
               Sin_Teorem(c, r).ToString & vbNewLine, MsgBoxStyle.Information)
 
    End Sub
 
End Class
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.06.2016, 12:16
Ответы с готовыми решениями:

Вычисление стороны треугольника по теореме синусов
даны углы треугольника и радиус описанной окружности 1. надо написать процедуру-функцию, которая вычисляет сторону треугольника а , по...

Найти стороны треугольника (по теореме синусов)
Очень нужна помощь. Задача на C++. Треугольник задан величинами своих углов и радиусом описанной окружности. Найти стороны треугольника...

Нахождение длины стороны треугольника по теореме косинусов
Написать код в VBA для нахождения длины стороны треугольника по теореме косинусов

15
Заблокирован
30.06.2016, 13:32
Цитата Сообщение от deadywwka Посмотреть сообщение
" a/sin a=2R " в параметрах процедуры естественно a и R
deadywwka!
Вчера ещё сразу попытался решить, но неудачно. Запутался в рассуждениях и сомнениях. Вроде на вид ерунда, но ничего не получается.
Не понимаю: почему Sin(90) по убеждениям Visual Basic 6. 0 равен 0.89…. Он упёрся как баран!

Прошу исправить мою ошибку. Что-то от расстройства совсем плохо соображаю.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Option Explicit
Private Sub Command1_Click()
Dim R As Single
Dim a As Single, b As Single, c As Single
Dim alfa As Single, beta As Single, gamma As Single
R = Val(Replace(InputBox("Введите R", "Ввод данных", 5.6), ",", "."))
alfa = 90
beta = 60
gamma = 30
 
a = Sin(alfa) * 2 * R
MsgBox ("a=" & Str(a))
b = Sin(beta) * 2 * R
MsgBox ("b=" & Str(b))
c = Sin(gamma) * 2 * R
MsgBox ("c=" & Str(c))
 
End Sub
Миниатюры
Вычисление стороны треугольника по теореме синусов  
1
1 / 1 / 0
Регистрация: 29.06.2016
Сообщений: 19
30.06.2016, 13:37  [ТС]
Цитата Сообщение от Infinity20_5 Посмотреть сообщение
deadywwka!
Вчера ещё сразу попытался решить, но неудачно. Запутался в рассуждениях и сомнениях. Вроде на вид ерунда, но ничего не получается.
Не понимаю: почему Sin(90) по убеждениям Visual Basic 6. 0 равен 0.89…. Он упёрся как баран!

Прошу исправить мою ошибку. Что-то от расстройства совсем плохо соображаю.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Option Explicit
Private Sub Command1_Click()
Dim R As Single
Dim a As Single, b As Single, c As Single
Dim alfa As Single, beta As Single, gamma As Single
R = Val(Replace(InputBox("Введите R", "Ввод данных", 5.6), ",", "."))
alfa = 90
beta = 60
gamma = 30
 
a = Sin(alfa) * 2 * R
MsgBox ("a=" & Str(a))
b = Sin(beta) * 2 * R
MsgBox ("b=" & Str(b))
c = Sin(gamma) * 2 * R
MsgBox ("c=" & Str(c))
 
End Sub
а можно все углы острые сделать и не мучить прямой. теоретически не сказано, какие углы, хоть все по 60.
0
Заблокирован
30.06.2016, 14:06
Цитата Сообщение от deadywwka Посмотреть сообщение
а можно все углы острые сделать и не мучить прямой. теоретически не сказано, какие углы, хоть все по 60
deadywwka!
А почему нельзя допускать описанный прямоугольный треугольник? Старался следовать строго условиям задачи: " a/sin a=2R ".
Не знаю как перевести его, Visual Basic 6. 0, от подсчёта в радианах к подсчёту в градусах. Вот в этой мелочи как раз скрыта "моя ошибка".

Эти: alfa = 90, beta = 60, gamma = 30 — тоже можно легко вводить через "InputBox". Несложно. Проблема чуть выше.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38195 / 21128 / 4309
Регистрация: 12.02.2012
Сообщений: 34,736
Записей в блоге: 14
30.06.2016, 14:19
Infinity20_5, это не VB баран, а кто-то другой. От веку во всех языках программирования аргументы тригонометрических функций должны задаваться в радианах, как принято в математике. Чтобы получить из градусов радианы, нужно разделить градусы на 180, а результат умножить на 3.1415926536 (это число называется "пи").

Добавлено через 2 минуты
Цитата Сообщение от deadywwka Посмотреть сообщение
Dim To_Radian As Double = Math.PI / 180.0R
'...
Return Math.Sin(alpha) * 2.0R * rad
- ты хочешь сказать, что эта фигня РАБОТАЛА?
0
Заблокирован
30.06.2016, 14:51
Цитата Сообщение от Catstail Посмотреть сообщение
Infinity20_5, это не VB баран, а кто-то другой.
Catstail!
Пусть я баран! Потратил три часа своего времени на эту задачу. Что толку с этого, ведь страдает deadywwka!

Catstail, Вы не тяните жилы с нас жилы, не пейте кровь. Лучше покажите, пожалуйста, как всё правильно расписать. Все будут Вам благодарны за урок (пример решения).
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38195 / 21128 / 4309
Регистрация: 12.02.2012
Сообщений: 34,736
Записей в блоге: 14
30.06.2016, 15:04
Цитата Сообщение от Infinity20_5 Посмотреть сообщение
Лучше покажите, пожалуйста, как всё правильно расписать.
- OK. Сейчас сделаю.
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38195 / 21128 / 4309
Регистрация: 12.02.2012
Сообщений: 34,736
Записей в блоге: 14
30.06.2016, 15:38
Лучший ответ Сообщение было отмечено deadywwka как решение

Решение

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Const Pi = 3.1415926536
 
Private Sub Command1_Click()
 
        r# = Abs(CDbl(Me.Text4.Text))
        
        If r# <= 0.00000001 Then
           MsgBox "Ошибочный радиус!"
           Exit Sub
        End If
 
        alpha# = Abs(CDbl(Me.Text1.Text)) * Pi / 180
        beta# = Abs(CDbl(Me.Text2.Text)) * Pi / 180
        gamma# = Abs(CDbl(Me.Text3.Text)) * Pi / 180
 
        If alpha# <= 0.00000001 Or beta# <= 0.00000001 Or gamma# <= 0.00000001 Or _
           (alpha# + beta# + gamma#) - 180 >= 0.00001 Then
           MsgBox "Один или более углов неверны!"
           Exit Sub
        End If
 
        a# = Dist(r#, alpha#)
        b# = Dist(r#, beta#)
        c# = Dist(r#, gamma#)
 
        Me.Text5.Text = Format$(a#, "000.00")
        Me.Text6.Text = Format$(b#, "000.00")
        Me.Text7.Text = Format$(c#, "000.00")
 
End Sub
 
Function Dist(r As Double, fi As Double) As Double
         Dist = 2 * r * Sin(fi)
End Function
Миниатюры
Вычисление стороны треугольника по теореме синусов  
Вложения
Тип файла: zip t124.zip (6.7 Кб, 7 просмотров)
1
Заблокирован
30.06.2016, 15:55
Цитата Сообщение от Catstail Посмотреть сообщение
Вложения
Тип файла: zip t124.zip (6.7 Кб, 0 просмотров)
Catstail!
Спасибо за идею! Понравилась! Потом переработаю код.
Вы уже стали "с Бэйсиком на ты", он простой парень.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38195 / 21128 / 4309
Регистрация: 12.02.2012
Сообщений: 34,736
Записей в блоге: 14
30.06.2016, 16:19
Цитата Сообщение от Infinity20_5 Посмотреть сообщение
Потом переработаю код.
- зачем? Пиши лучше свой. Не бери пример со "Шмидта"... Маяковский говорил: "Чем под кого-то, лучше под себя". И был прав.
1
Заблокирован
30.06.2016, 16:57
Цитата Сообщение от Catstail Посмотреть сообщение
зачем? Пиши лучше свой
Catstail!
Вы тоже наивный, если полагаете буду ворочать "стандартные мешки с теорией".
Творческий замысел: добавлю совсем короткий код, к своему (на который потратил три часа) и всё! Бейсик меня поймёт. Спасу студентов от мук. Самому интересно, иногда чувствую Бэйсика сердцем.
0
1 / 1 / 0
Регистрация: 29.06.2016
Сообщений: 19
30.06.2016, 17:09  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
Infinity20_5, это не VB баран, а кто-то другой. От веку во всех языках программирования аргументы тригонометрических функций должны задаваться в радианах, как принято в математике. Чтобы получить из градусов радианы, нужно разделить градусы на 180, а результат умножить на 3.1415926536 (это число называется "пи").

Добавлено через 2 минуты
- ты хочешь сказать, что эта фигня РАБОТАЛА?
эта фигня работала в vb.net - код оттуда. я предполагал, что по близкозти окда можно легко переделать или на нужную мысль натолкнуться. поскольку у самого опыт невелик, ну уровне true/false , visible/invisible , предположил что просто. не ожидал таких "баталий".
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38195 / 21128 / 4309
Регистрация: 12.02.2012
Сообщений: 34,736
Записей в блоге: 14
30.06.2016, 17:38
deadywwka, да, приношу извинения. Мне показалось, что был опущен код операции, а на самом деле это суффикс типа.

Добавлено через 13 минут
И поправочка: анализ правильности задания углов:

Visual Basic
1
2
3
4
5
        If alpha# <= 0.00000001 Or beta# <= 0.00000001 Or gamma# <= 0.00000001 Or _
           Abs((alpha# + beta# + gamma#) - Pi) >= 0.00001 Then
           MsgBox "Один или более углов неверны!"
           Exit Sub
        End If
0
Заблокирован
01.07.2016, 20:15
Цитата Сообщение от Infinity20_5 Посмотреть сообщение
Бейсик меня поймёт. Спасу студентов от мук.
На форму ставим только один элемент: Command1. Всё хорошо работает!
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Option Explicit
Private Sub Command1_Click()
Dim R As Single
Dim a As Single, b As Single, c As Single
Dim x As Single, y As Single, z As Single
Dim alpha As Double, beta As Double, gamma As Double
R = Val(Replace(InputBox("Введите R", "Ввод данных", 5.6), ",", "."))
x = Val(Replace(InputBox("Введите x", "Ввод данных", 90.1), ",", "."))
y = Val(Replace(InputBox("Введите y", "Ввод данных", 59.2), ",", "."))
z = Val(Replace(InputBox("Введите z", "Ввод данных", 30.7), ",", "."))
 
If (x + y + z <> 180) Then
  MsgBox "Ошибка! Сумма (x + y + z) не равна 180 градусам" ' & vbCrLf
  Exit Sub
End If
 
'pi = 3,1415926535897932384626433832795
 
alpha = x * 3.14159265358979 / 180    '90 градусов
beta = y * 3.14159265358979 / 180    '60 градусов
gamma = z * 3.14159265358979 / 180   '30 градусов
 
a = Sin(alpha) * 2 * R
MsgBox ("a=" & Str(a))
b = Sin(beta) * 2 * R
MsgBox ("b=" & Str(b))
c = Sin(gamma) * 2 * R
MsgBox ("c=" & Str(c))
 
End Sub
Миниатюры
Вычисление стороны треугольника по теореме синусов  
1
6644 / 1511 / 169
Регистрация: 09.01.2010
Сообщений: 4,298
01.07.2016, 22:27
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
pi = 4 * Atn(1)
 
R = Val(Replace(InputBox("R ---> "), ",", "."))
x = Val(Replace(InputBox("угол A --->"), ",", "."))
y = Val(Replace(InputBox("угол B --->"), ",", "."))
 
a = 2 * R * Sin(pi * x / 180)
b = 2 * R * Sin(pi * y / 180)
c = 2 * R * Sin(pi * (1 - x / 180 - y / 180))
 
MsgBox "a=" & a & vbLf & "b=" & b & vbLf & "c=" & c
1
Заблокирован
02.07.2016, 11:28
Цитата Сообщение от gaw Посмотреть сообщение
Visual Basic
Выделить код
pi = 4 * Atn(1)
gaw, спасибо! Ведь когда-то ранее знал про этот: pi = 4 * Atn(1) — важный момент для семейства Бэйсиков. Как до дела доходит, у меня мозги отнимаются напрочь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.07.2016, 11:28
Помогаю со студенческими работами здесь

Нахождение стороны треугольника через теорему синусов 'см. картинку'
Не могу понять что не так. Примерно должно получится 177. ...

Используя теорему синусов, найти две стороны треугольника
Дана длина стороны треугольника и значение прилегающих углов. Используя теорему синусов, найти две стороны треугольника. Расчет стороны и...

Даны стороны треугольника: a,b,c. Вычислить косинусы углов по теореме косинусов
Даны стороны треугольника: a,b,c. Вычислить косинусы углов по теореме косинусов

Длина стороны треугольника А, периметр равен P. длины двух других сторон равны между со6ой. Найти эти стороны
Длина стороны треугольника А, периметр равен P. длины двух других сторон равны между со6ой. Найти эти стороны

Ввести стороны равностороннего треугольника. Найти площадь этого треугольника и его высоту
В универе на первом курсе в первый день сразу задали лабораторную помогите решить на си задачу: Ввести стороны равностороннего...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru