Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
266 / 217 / 54
Регистрация: 01.08.2016
Сообщений: 835

Создание методов

17.09.2018, 22:33. Показов 1000. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создал класс D. ab должно высчитываться интерполяцией. Через Public Sub не получается. Функция выдает только первое значение пр присваивании полю a любого значения. Помогите в написании функции.
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
Public Class D
Public a As Integer
Private Function ab() As Double
If a <= 5 Then ab = 10
        If a = 6 Then ab = 5.1
        If a = 9 Then ab = 3.8
        If a = 12 Then ab = 3.2
        If a = 15 Then ab = 2.8
        If a = 18 Then ab = 24
        If a = 24 Then ab = 2.2
        If a = 40 Then ab = 1.95
        If a = 100 Then ab = 1.5
        If a = 200 Then ab = 1.36
        If a = 400 Then ab = 1.27
        If a = 600 Then ab = 1.23
        If a = 1000 Then ab = 1.19
        If a > 1000 Then ab = 1.19
        If a > 6 And a < 9 Then ab = 3.8 + ((5.1 - 3.8) / 3 * (9 - a))
        If a > 9 And a < 12 Then ab = 3.2 + ((3.8 - 3.2) / 3 * (12 - a))
        If a > 12 And a < 15 Then ab = 2.8 + ((3.2 - 2.8) / 3 * (15 - a))
        If a > 15 And a < 18 Then ab = 2.6 + ((2.8 - 2.6) / 3 * (18 - a))
        If a > 18 And a < 24 Then ab = 2.2 + ((2.6 - 2.2) / 6 * (24 - a))
        If a > 24 And a < 40 Then ab = 1.95 + ((2.4 - 1.95) / 16 * (40 - a))
        If a > 40 And a < 60 Then ab = 1.7 + ((1.95 - 1.7) / 20 * (60 - a))
        If a > 60 And a < 100 Then ab = 1.5 + ((1.7 - 1.5) / 40 * (100 - a))
        If a > 100 And a < 200 Then ab = 1.36 + ((1.5 - 1.36) / 100 * (200 - a))
        If a > 200 And a < 400 Then ab = 1.27 + ((1.36 - 1.27) / 200 * (400 - a))
        If a > 400 And a < 600 Then ab = 1.23 + ((1.27 - 1.23) / 200 * (600 - a))
        If a > 600 And a < 1000 Then ab = 1.19 + ((1.23 - 1.19) / 400 * (1000 - a))
Return ab
End Function
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.09.2018, 22:33
Ответы с готовыми решениями:

Создание класса "Счет" и его методов
Сделал всё по заданию в программе Visual Paradigm создал и сгенерировал класс. Не пойму как сделать изменение счёта, если переменная...

Реализовать ввод исходных данных, расчет и вывод данных в виде методов класса. В Main только создание объектов и вызов методов
Всем привет) помогите пожалуйста с заданием &quot;Реализовать ввод исходных данных, расчет и вывод данных в виде методов класса. В Main только...

Создание методов в С++
Всем привет подскажите можно ли обьвлять методы в С++ что бы они были доступны в файле реализации но не выносить их прототипы в хедер?

9
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
17.09.2018, 23:44
VB.NET
1
2
Public Class D
Public  Function ab(a As Integer) As Double
А вообще - ужос .
0
4708 / 3661 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
18.09.2018, 00:14
andrsh, сам класс может выглядеть так
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
Public Class D
    Public Shared Function ab(ByVal a As Integer) As Double
        Dim tmp As Double
        If a <= 5 Then tmp = 10
        If a = 6 Then tmp = 5.1
        If a = 9 Then tmp = 3.8
        If a = 12 Then tmp = 3.2
        If a = 15 Then tmp = 2.8
        If a = 18 Then tmp = 24 'скорее всего 2.4
        If a = 24 Then tmp = 2.2
        If a = 40 Then tmp = 1.95
        If a = 100 Then tmp = 1.5 'пропущено а=60 tmp=1.7 (иначе результат всегда будет 0)
        If a = 200 Then tmp = 1.36
        If a = 400 Then tmp = 1.27
        If a = 600 Then tmp = 1.23
        If a >= 1000 Then tmp = 1.19
        If a > 6 And a < 9 Then tmp = 3.8 + ((5.1 - 3.8) / 3 * (9 - a))
        If a > 9 And a < 12 Then tmp = 3.2 + ((3.8 - 3.2) / 3 * (12 - a))
        If a > 12 And a < 15 Then tmp = 2.8 + ((3.2 - 2.8) / 3 * (15 - a))
        If a > 15 And a < 18 Then tmp = 2.6 + ((2.8 - 2.6) / 3 * (18 - a)) '???
        If a > 18 And a < 24 Then tmp = 2.2 + ((2.6 - 2.2) / 6 * (24 - a)) '???
        If a > 24 And a < 40 Then tmp = 1.95 + ((2.4 - 1.95) / 16 * (40 - a))
        If a > 40 And a < 60 Then tmp = 1.7 + ((1.95 - 1.7) / 20 * (60 - a))
        If a > 60 And a < 100 Then tmp = 1.5 + ((1.7 - 1.5) / 40 * (100 - a))
        If a > 100 And a < 200 Then tmp = 1.36 + ((1.5 - 1.36) / 100 * (200 - a))
        If a > 200 And a < 400 Then tmp = 1.27 + ((1.36 - 1.27) / 200 * (400 - a))
        If a > 400 And a < 600 Then tmp = 1.23 + ((1.27 - 1.23) / 200 * (600 - a))
        If a > 600 And a < 1000 Then tmp = 1.19 + ((1.23 - 1.19) / 400 * (1000 - a))
        Return tmp
    End Function
End Class
Обратите внимание на ошибки в условиях. Думаю, стоит подумать, как это все облагородить (хотя бы записать более коротко, логическая связь в этой арифметике прослеживается).
1
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
18.09.2018, 00: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
Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim dd As New D
        MsgBox(dd.ab(7)) 'проверка
    End Sub
End Class
 
Public Class D
    Public Function ab(ByVal a As Integer) As Double
        Dim aa() As Integer = {6, 9, 12, 15, 18, 24, 40, 100, 200, 400, 600, 1000}
        Dim bb() As Double = {5.1, 3.8, 3.2, 2.8, 2.4, 2.2, 1.95, 1.5, 1.36, 1.27, 1.23, 1.19}
        ab = 0
        Select Case a
            Case Is <= 5 : ab = 10
            Case Is > 1000 : ab = 1.19
            Case Else
                For i As Integer = 0 To aa.Length - 1
                    If a = aa(i) Then ab = bb(i) : Exit For
                    If i < aa.Length - 1 Then
                        If a > aa(i) And a < aa(i + 1) Then
                            ab = bb(i + 1) + ((bb(i) - bb(i + 1)) / aa(i) * (aa(i + 1) - a))
                            Exit For
                        End If
                    End If
                Next
        End Select
    End Function
End Class
1
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,150
Записей в блоге: 43
18.09.2018, 03:13
Подкину еще вариант. Разумеется с учетом того, что при a=18 выдавать, скорее всего, должно 2.6, и добавил 60->1.7.
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Public Class D
    Public Function ab(a As Integer) As Double
        Dim dict As New Dictionary(Of Integer, Double) From {
        {6, 5.1}, {9, 3.8}, {12, 3.2}, {15, 2.8}, {18, 2.6}, {24, 2.2}, {40, 1.95}, {60, 1.7},
        {100, 1.5}, {200, 1.36}, {400, 1.27}, {600, 1.23}, {1000, 1.19}}
        Dim calc = Function(l, h) dict(h) + ((dict(l) - dict(h)) / (h - l) * (h - a))
        If a <= 5 Then : Return 10
        ElseIf dict.ContainsKey(a) Then : Return dict(a)
        ElseIf a > 1000 Then : Return 1.19
        Else
            Dim keys = dict.Keys.OrderBy(Function(x) x)
            Return calc(keys.Last(Function(x) x < a), keys.First(Function(x) x > a))
        End If
    End Function
End Class
4
266 / 217 / 54
Регистрация: 01.08.2016
Сообщений: 835
18.09.2018, 09:22  [ТС]
diadiavova Я смотрю вы знакомы откуда я взял эти данные для интерполяции?

Добавлено через 11 минут
Из функции Function ab(a As Integer) нужно еще получить такие отдельные значения через функции:
ab*a ; ab() / 0.98 * Sin(Acos(0.98)); ab() // 1.73 / 0.38 / 0.98 может кто подскажет как это делается? Судя по ответам некоторые уже это делали это из СП 256.1325800.2016. Пожалуйста помогите.
Спасибо всем за помощь
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,150
Записей в блоге: 43
18.09.2018, 10:14
Цитата Сообщение от andrsh Посмотреть сообщение
Я смотрю вы знакомы откуда я взял эти данные для интерполяции?
Абсолютно нет. Просто для того, чтобы оптимизировать код, мне пришлось разобраться, что он делает. Разобравшись, я обнаружил, что кое-где не хватает данных, кое-где они не совпадают, а также мне было вполне понятно, откуда можно взять данные для восполнения пробелов.
Цитата Сообщение от andrsh Посмотреть сообщение
СП 256.1325800.2016
Понятия не имею, что это.

По поводу кода: я так подумал, было бы совсем не лишним в том месте где определяется фукнция calc явно указать типы параметров, а то при передаче интегоров будут выполняться операции как над интегерами, а при их делении результат потеряет дробную часть. Так что шестую строчку лучше записать так
VB.NET
1
Dim calc = Function(l As Double, h As Double) dict(h) + ((dict(l) - dict(h)) / (h - l) * (h - a))
Ну и протестировать не помешает.
Цитата Сообщение от andrsh Посмотреть сообщение
Из функции Function ab(a As Integer) нужно еще получить такие отдельные значения через функции:
ab*a ; ab() / 0.98 * Sin(Acos(0.98)); ab() // 1.73 / 0.38 / 0.98 может кто подскажет как это делается?
Не уверен, что я правильно понял вопрос, но, судя по всему певрые две функции будут выглядеть как-то так
VB.NET
1
2
3
4
5
6
7
8
9
    Function f1(a As Integer) As Double
        ' ab * a
        Return ab(a) * a
    End Function
 
    Function f2(a As Integer) As Double
        ' ab() / 0.98 * Sin(Acos(0.98))
        Return ab(a) / 0.98 * Math.Sin(Math.Acos(0.98))
    End Function
Что в третей я вообще не понял, возможно так, если под двойным слешем подразумевается обычное деление
VB.NET
1
2
3
4
    Function f3(a As Integer) As Double
        ' ab() // 1.73 / 0.38 / 0.98
        Return ab(a) / 1.73 / 0.38 / 0.98
    End Function
Кроме того, если уж нужно, что бы a не передавалось как аргумент функции, то можно сделать как было изначально, в виде свойства или передавать ее в конструкторе класса, но это уже детали.
0
266 / 217 / 54
Регистрация: 01.08.2016
Сообщений: 835
18.09.2018, 12:28  [ТС]
diadiavova, Код формы
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Public Class Form2
    Dim Nagrkv(10) As Nagrkvelplit
    Dim index As Integer = 1
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim index, kkv As Integer
        Dim pudkv, praskv, qkv, ikv As Double
        Dim namnagrkv As String
        Nagrkv(index) = New Nagrkvelplit
        kkv = CInt(TextBox6.Text)
        Nagrkv(index).kolkv = kkv
        pudkv = Nagrkv(index).[COLOR="yellow"]Pudkv[/COLOR]
        TextBox7.Text = Format(pudkv, "0.####")
        praskv = Nagrkv(index).[COLOR="Yellow"]Prashkv[/COLOR]
        TextBox2.Text = Format(praskv, "0.##")
        qkv = Nagrkv(index).[COLOR="yellow"]Qkvelp[/COLOR]l
        TextBox4.Text = Format(qkv, "0.##")
        ikv = Nagrkv(index).[COLOR="yellow"]Ikvart[/COLOR]
        TextBox5.Text = Format(ikv, "0.#")
        namnagrkv = CStr(TextBox1.Text)
        index = index + 1
        End Sub
Код класса
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
Imports System.Math
Public Class Nagrkvelplit
    Public Namenagrkv As String
    Public kolkv As Integer
    Public Function Pudkv(kolkv) As Double
        Dim dict As New Dictionary(Of Integer, Double) From {
       {6, 5.1}, {9, 3.8}, {12, 3.2}, {15, 2.8}, {18, 2.6}, {24, 2.2}, {40, 1.95}, {60, 1.7},
       {100, 1.5}, {200, 1.36}, {400, 1.27}, {600, 1.23}, {1000, 1.19}}
        Dim calc = Function(l, h) dict(h) + ((dict(l) - dict(h)) / (h - l) * (h - kolkv))
        If kolkv <= 5 Then : Return 10
        ElseIf dict.ContainsKey(kolkv) Then : Return dict(kolkv)
        ElseIf kolkv > 1000 Then : Return 1.19
        Else
            Dim keys = dict.Keys.OrderBy(Function(x) x)
            Return calc(keys.Last(Function(x) x < kolkv), keys.First(Function(x) x > kolkv))
        End If
    End Function
 
    [COLOR="lime"]Friend Function Ikvart() As Double
        Throw New NotImplementedException()
    End Function[/COLOR]
 
    [COLOR="lime"]Friend Function Qkvelpl() As Double
        Throw New NotImplementedException()
    End Function[/COLOR]
 
   [COLOR="Lime"] Friend Function Prashkv() As Double
        Throw New NotImplementedException()
    End Function[/COLOR]
 
   [COLOR="lime"] Friend Function Pudkv() As Double
        Throw New NotImplementedException()
    End Function[/COLOR]
 
    Public Function Prashkv(kolkv As Integer) As Double
        Return Pudkv(kolkv) * kolkv
    End Function
 
    Public Function Qkvelpl(kolkv As Integer) As Double
        Return Prashkv(kolkv) / 0.98 * Sin(Acos(0.98))
    End Function
 
    Public Function Ikvart(kolkv As Integer) As Double
        Return Prashkv(kolkv) / 1.73 / 0.38 / 0.98
    End Function
End Class
После написания предложенных вами функций программа в коде формы подчеркнула красным места выделенные желтым цветом и предложила создать функции выделенные зеленым . я так и сделал. Но после запуска возникает ошибка она показана в вложенном файле. Как быть дальше. Просьба помочь. Если не безвозмездно и в разумных пределах то я только за. Каждый труд должен быть оплачен и то что я хочу сделать то это только маленькая макушка айсберга.
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,150
Записей в блоге: 43
18.09.2018, 14:29
Цитата Сообщение от andrsh Посмотреть сообщение
После написания предложенных вами функций программа в коде формы подчеркнула красным места выделенные желтым цветом и предложила создать функции выделенные зеленым .
Ну правильно: у меня эти методы имеют один аргумент, а ты их вызываешь без аргументов. Я же написал, что если нужно, чтобы функции были без аргументов, а вместо этого использовалось свойств(поле) класса, то надо это малость переделать. Тогда класс будет выглядеть вот так, после создания экземпляра нужно инициировать свойство a, а методы уже вызывать без аргументов.
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
Public Class D
    Public Property a As Integer
 
    Public Function ab() As Double
        Dim dict As New Dictionary(Of Integer, Double) From {
        {6, 5.1}, {9, 3.8}, {12, 3.2}, {15, 2.8}, {18, 2.6}, {24, 2.2}, {40, 1.95}, {60, 1.7},
        {100, 1.5}, {200, 1.36}, {400, 1.27}, {600, 1.23}, {1000, 1.19}}
        Dim calc = Function(l As Double, h As Double) dict(h) + ((dict(l) - dict(h)) / (h - l) * (h - a))
        If a <= 5 Then : Return 10
        ElseIf dict.ContainsKey(a) Then : Return dict(a)
        ElseIf a > 1000 Then : Return 1.19
        Else
            Dim keys = dict.Keys.OrderBy(Function(x) x)
            Return calc(keys.Last(Function(x) x < a), keys.First(Function(x) x > a))
        End If
    End Function
 
    Function f1() As Double
        ' ab * a
        Return ab() * a
    End Function
 
    Function f2() As Double
        ' ab() / 0.98 * Sin(Acos(0.98))
        Return ab() / 0.98 * Math.Sin(Math.Acos(0.98))
    End Function
 
    Function f3() As Double
        ' ab() // 1.73 / 0.38 / 0.98
        Return ab() / 1.73 / 0.38 / 0.98
    End Function
End Class
1
266 / 217 / 54
Регистрация: 01.08.2016
Сообщений: 835
18.09.2018, 14:48  [ТС]
Вот теперь все ОК СПС
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.09.2018, 14:48
Помогаю со студенческими работами здесь

Создание методов в классе
Всем привет! Создал класс, в классе два метода: Vm(); n(); В методе Vm() используется простая формула, а метод n() зависит от результата,...

Создание методов в классе
Доброго времени суток. Давно не садилась за яву (знала ее плохо, сразу говорю) и практически все забыла. Заступорилась на создании методов....

Создание методов в классе
Здравствуйте все. Ребята помогите создать метод ввода, и вывода ступенчатого массива double DoubleArray. Такой вывод проканает? ...

Создание методов с циклами for, while
Реализовать в виде класса набор методов для выполнение следующих операций с целыми числами: 1 метод - Дано число N. Определить кол-во...

Создание однотипных методов
Имеется 7 похожих классов (sheetWork, sheetOtherSensors и т.д.). У каждого из них есть несколько похожих методов (таких как...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru