Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 19.08.2015
Сообщений: 20
.NET 4.x

Неверно вычисляется арксинус

07.12.2015, 00:53. Показов 725. Ответов 9

Студворк — интернет-сервис помощи студентам
Прошу помочь найти ошибки. Написал код для проверки,он здесь не весь, позже хотел найти арксинусы на углы, но решил проверить, что выдает программа, а она выдает нули.
Где допустил ошибки?
________________________________________ ________________________________
Задание следующее: определить углы треуголника, длины сторон которого a, b,c. Назначение процедуры: Применить теорему половинного угла: tg(y/2)=sqrt(((p-a)*(p-b))/(p*(p*c))), где p=(a+b+c)/2
y - угол, противолежащий стороне С
________________________________________ ___________________________

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
Option Strict On
Option Explicit On
Imports System.Math
 
Public Class Form1
 
    'Функция ввода результата в TextBox
    Function vvod(ByVal T As TextBox) As Single
        Return CSng(Val(T.Text))
    End Function
 
    'Процедура вывода результата в TextBox
    Sub vivod(ByVal Z As Single, ByVal T As TextBox)
        T.Text = CStr(CSng(Z))
    End Sub
 
    'Функция вычисления полупериметра
    Function plr(ByVal a As Single, ByVal b As Single, ByVal c As Single) As Single
        Return CSng((a + b + c) / 2)
    End Function
 
    'Площадь треугольника
    Function plz(ByVal a As Single, ByVal b As Single, ByVal c As Single) As Single
        Dim P As Single
        P = plr(a, b, c)
        a = vvod(TextBox1)
        b = vvod(TextBox2)
        c = vvod(TextBox3)
        Return CSng(Sqrt(P * ((P - a) * (P - b) * (P - c))))
    End Function
 
    'Нахождение углов
    Sub ugol(ByVal H As Single, ByVal I As Single, ByVal J As Single)
        Dim a, b, c, S As Single
        S = plz(H, I, J)
        H = CSng((2 * S) / (a * b))
        I = CSng((2 * S) / (b * c))
        J = CSng((2 * S) / (a * c))
 
    End Sub
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim a, b, c, p, H, I, J, s As Single
        a = vvod(TextBox1)
        b = vvod(TextBox2)
        c = vvod(TextBox3)
 
        p = plr(a, b, c)
        vivod(p, TextBox7)
        s = plz(H, I, J)
        vivod(s, TextBox8)
 
        vivod(CSng(H), TextBox4)
        vivod(CSng(I), TextBox5)
        vivod(CSng(J), TextBox6)
 
    End Sub
 
 
    'Остальные кнопки
 
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Application.Exit()
    End Sub
 
    Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
        TextBox1.Clear()
        TextBox2.Clear()
        TextBox3.Clear()
        TextBox4.Clear()
        TextBox5.Clear()
        TextBox6.Clear()
        TextBox7.Clear()
    End Sub
End Class
Добавлено через 2 часа 22 минуты
Разобрался с задачей.
Кто понимает, проверьте меня, верно ли решил.
Спасибо заранее
Вот код:
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Option Strict On
Option Explicit On
Imports System.Math
 
Public Class Form1
 
    'Функция ввода результата в TextBox
    Function vvod_sng(ByVal T As TextBox) As Single
        Return CSng(Val(T.Text))
    End Function
 
    'Процедура вывода результата в TextBox
    Sub vivod(ByVal Z As Single, ByVal T As TextBox)
        T.Text = CStr(Format(Z, "0.000"))
    End Sub
 
    'Функция вычисления полупериметра
    Public Function plr(ByVal a As Single, ByVal b As Single, ByVal c As Single) As Single
        Return CSng((a + b + c) / 2)
    End Function
 
    Public Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim a, b, c As Single
        Dim p, u1, u2, u3 As Single
 
        'ввод исходных  данных
        a = vvod_sng(TextBox1)
        b = vvod_sng(TextBox2)
        c = vvod_sng(TextBox3)
 
        'Вызов функции полупериметра
        p = plr(a, b, c)
        'Нахождение углов
        If a > p Or b > p Or c > p Then
            MsgBox("Треугольник не существует!")
        Else
            u1 = CSng(360 / PI * Atan(Sqrt((p - b) * (p - c) / (p * p - p * a))))
            u2 = CSng(360 / PI * Atan(Sqrt((p - a) * (p - b) / (p * p - p * c))))
            u3 = 180 - u1 - u3
        End If
        vivod(u1, TextBox4) 'Угол противолежащий стороне А - угол β
        vivod(u2, TextBox5) 'угол противолежащий стороне С - угол γ
        vivod(u3, TextBox6) 'угол противолежащий стороне В - угол α
 
    End Sub
 
 
    'Остальные кнопки
 
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Application.Exit()
    End Sub
 
    Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
        TextBox1.Clear()
        TextBox2.Clear()
        TextBox3.Clear()
        TextBox4.Clear()
        TextBox5.Clear()
        TextBox6.Clear()
 
    End Sub
End Class
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.12.2015, 00:53
Ответы с готовыми решениями:

Неверно вычисляется функция
Ребята, нужно сделать функцию, программа работает, ответ выдает, но препод говорит что неправильно, где ошибка? Private Sub...

Неверно вычисляется среднее
Написать программу, которая вычисляет среднее арифметическое последовательности дробных чисел, вводимых с клавиатуры. После того, как будет...

Сумма вычисляется неверно
program zd1; uses crt; const x=2.4; var N,k: integer; S:real; begin clrscr; readln(e); N:=20; S:=0;

9
Модератор
Эксперт .NET
 Аватар для Yury Komar
4359 / 3429 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
07.12.2015, 06:50
VeLiaR, почитайте про арксинус:
Math.Asin - метод (Double)

Параметры
d - Число, представляющее синус, где значение параметра d должно быть больше или равно -1, но меньше или равно 1.

Возвращаемое значение
Type: System.Double
Угол θ, измеренный в радианах, такой что -π/2 ≤θ≤π/2

-или-

значение NaN, если d < -1, d > 1 или значение параметра d равно NaN.

Заметки
Положительное возвращаемое значение представляет угол против часовой стрелки от оси x; отрицательное значение, возвращаемое представляет по часовой стрелке.

Возвращаемое значение умножается на 180-Math.PI для перевода радианов в градусы.

https://msdn.microsoft.com/ru-... .asin.aspx

Добавлено через 2 минуты
или так
VB.NET
1
2
3
4
5
6
7
Public Function Arcsin(X As Double) As Double
If (Math.Sqrt(1 - X * X) <= 0.000000000001) And (Math.Sqrt(1 - X * X) >= -0.000000000001) Then
Return Math.PI / 2
Else
Return Math.Atan(X / Math.Sqrt(-X * X + 1))
End If
End Function
0
0 / 0 / 0
Регистрация: 19.08.2015
Сообщений: 20
10.12.2015, 22:26  [ТС]
спасибо за ответ. У меня, кстати, формула работает правильно. Вот еще хочу спросить, а можно ли мою формулу переделать в процедуру или в функцию?
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4359 / 3429 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
10.12.2015, 22:36
Цитата Сообщение от VeLiaR Посмотреть сообщение
мою формулу переделать в процедуру или в функцию
что именно вы хотите переделать? покажите?
0
0 / 0 / 0
Регистрация: 19.08.2015
Сообщений: 20
10.12.2015, 22:42  [ТС]
Цитата Сообщение от VeLiaR Посмотреть сообщение
VB.NET
1
2
3
4
5
6
7
8
9
10
If a > p Or b > p Or c > p Then
  MsgBox("Треугольник не существует!")
  Else
     u1 = CSng(360 / PI * Atan(Sqrt((p - b) * (p - c) / (p * p - p * a))))
     u2 = CSng(360 / PI * Atan(Sqrt((p - a) * (p - b) / (p * p - p * c))))
     u3 = 180 - u1 - u3
 End If
 vivod(u1, TextBox4) 'Угол противолежащий стороне А - угол ОІ
 vivod(u2, TextBox5) 'угол противолежащий стороне С - угол Оі
 vivod(u3, TextBox6) 'угол противолежащий стороне В - угол О±
Возможно ли вот эту формулу записать в виде процедуры?
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4359 / 3429 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
10.12.2015, 23:05
Можно конечно.
А что означает vivod?
0
0 / 0 / 0
Регистрация: 19.08.2015
Сообщений: 20
10.12.2015, 23:34  [ТС]
vivod это отображение результата
vivod(u1, TextBox4) - отображает результат первого угла в текст бокс 4
часто используют метод
If бла бла бла Then
бла бла
Else
vivod(то-то то-то)
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4359 / 3429 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
11.12.2015, 08:16
Так а этот самый vivod он существует? Или это просто ваша идея так написать?
0
0 / 0 / 0
Регистрация: 19.08.2015
Сообщений: 20
11.12.2015, 09:23  [ТС]
Цитата Сообщение от VeLiaR Посмотреть сообщение
VB.NET
1
2
3
4
'Процедура вывода результата в TextBox
  Sub vivod(ByVal Z As Single, ByVal T As TextBox)
     T.Text = CStr(CSng(Z))
  End Su
b
Да, конечно существует. Это процедура вывода. Вначале идет процедура ввода, а в конце - процедура вывода
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4359 / 3429 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
11.12.2015, 11:31
VeLiaR, ну можно вот так решить вопрос ваш:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        vivod(vvod(1, 2, 3, 4)(0), TextBox4) 'Угол противолежащий стороне А - угол ОІ
        vivod(vvod(1, 2, 3, 4)(1), TextBox5) 'угол противолежащий стороне С - угол Оі
        vivod(vvod(1, 2, 3, 4)(2), TextBox6) 'угол противолежащий стороне В - угол О±
    End Sub
 
    Public Function vvod(a As Single, b As Single, c As Single, p As Single) As List(Of Single)
        Dim arr As New List(Of Single)
        If a > p Or b > p Or c > p Then
            MsgBox("Треугольник не существует!")
        Else
            arr.Add(CSng(360 / Math.PI * Math.Atan(Math.Sqrt((p - b) * (p - c) / (p * p - p * a)))))
            arr.Add(CSng(360 / Math.PI * Math.Atan(Math.Sqrt((p - a) * (p - b) / (p * p - p * c)))))
            arr.Add(180 - arr(0)) ' - arr(2))
        End If
        Return arr
    End Function
 
 
    Sub vivod(ByVal Z As Single, ByVal T As TextBox)
        T.Text = CStr(CSng(Z))
    End Sub
только в строке "15" вы уверены в правильности записи расчетов? я закомментировал то что вызывает ошибку расчетов, так как на момент расчета "u3" его еще нет, но он фигурирует в фомуле...
Изображения
 
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.12.2015, 11:31
Помогаю со студенческими работами здесь

Неверно вычисляется выражение
Не до конца сделал программу.Суть в том в &quot;sbichne&quot; выводиться 0 в любом случае.До некоторых изменений всегда выводилось &quot;1&quot;...В...

Неверно вычисляется выражение
Помогите пожалуйста с примером! Console.WriteLine(&quot;Здравствуйте!&quot;); double x, y, z, a, b, s; ...

Факториал числа вычисляется неверно
Почему-то показывает всегда нуль.Что-то не так или очень быстро это делается? do { ...

Неверно вычисляется среднее число миль/галон
Введите расход бензина (-1, если ввод закончен): 12.8 Введите пройденный путь: 287 Для этой заправки получено миль/галлон 22.421875 ...

Как поделить арксинус на арксинус
Как поделить арксинус на арксинус?


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru