powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Посмотрите код, где ошибка?
6 сообщений из 6, страница 1 из 1
Посмотрите код, где ошибка?
    #37744411
Anekto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задание в комментариях в начале, где ошибаюсь?
Код: vbnet
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.
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        '11.	В стае из КС собак если самая сильная собака сильнее второй не более, чем на 1%, то они дерутся. 
        '    При этом побеждает сильнейшая собака, но они обе теряют по 10% силы каждая. 
        '    Сколько будет драк в стае, если i-я собака имеет силу в Сi ?
        Randomize()
        Dim Dogs(20) As Integer
        For i = 0 To 20
            Dogs(i) = 100 * Rnd() + 1
        Next
        Dim maxStr1, maxStr2 As Integer
        maxStr1 = Dogs(0)
        maxStr2 = Dogs(0)
        Dim a, b, c As Integer
        b = 0
        Do
            c = b
            For i = 1 To 20
                If maxStr1 < Dogs(i) Then
                    maxStr1 = Dogs(i)
                    a = i
                End If
            Next
            For i = 1 To 20
                If i <> a Then 'Проверяет, совпадает ли индекс текущей с индексом прошлой самой сильной собаки с целью ее исключить
                    If maxStr2 < Dogs(i) Then
                        maxStr2 = Dogs(i)
                    End If
                End If
            Next
            If Math.Abs(maxStr1 - maxStr2) = 1 Or maxStr1 - maxStr2 = 0 Then
                maxStr1 = maxStr1 - 10
                maxStr2 = maxStr2 - 10
                b = b + 1
            End If
        Loop Until c = b Or b = 0
    End Sub
End Class
...
Рейтинг: 0 / 0
Посмотрите код, где ошибка?
    #37744428
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anektoгде ошибаюсь?а с чего вы взяли, что ошибаетесь? Может для начала изложите суть выявленной ошибки?
...
Рейтинг: 0 / 0
Посмотрите код, где ошибка?
    #37744496
Anekto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Ну мне нужно, посчитать кол-во драк в стае между самой сильной и второй самой сильной, если разница в их силе не более 1%

Я выводил начальные значения на листбокс и переменную b в текстбокс с целью отследить, и получается не то что я ожидал, в массиве есть некоторые значения подходящие или даже одинаковые, но переменная b не изменяется.
...
Рейтинг: 0 / 0
Посмотрите код, где ошибка?
    #37744499
Anekto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хотя я неправильно понял суть задачи, сейчас в отладке проверю.
...
Рейтинг: 0 / 0
Посмотрите код, где ошибка?
    #37744518
Anekto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все, переделал, вроде работает как надо, но теперь у меня другой вопрос. Как можно минимизировать этот код? мне кажется он слишком большой, может можно как-то это дело упростить?
Код: vbnet
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.
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        '11.	В стае из КС собак если самая сильная собака сильнее второй не более, чем на 1%, то они дерутся. 
        '    При этом побеждает сильнейшая собака, но они обе теряют по 10% силы каждая. 
        '    Сколько будет драк в стае, если i-я собака имеет силу в Сi ?
        Randomize()
        Dim Dogs(40) As Integer
        For i = 0 To 40
            Dogs(i) = 150 * Rnd() + 1
        Next
        Dim maxStr1, maxStr2 As Integer
        maxStr1 = 0
        maxStr2 = 0
        Dim b, c As Integer
        b = 0
        Do
            c = b
            For i = 1 To 40
                If Dogs(maxStr1) < Dogs(i) Then
                    maxStr1 = i
                End If
            Next
            For i = 1 To 40
                If i <> maxStr1 Then 'Проверяет, совпадает ли индекс текущей с индексом прошлой самой сильной собаки с целью ее исключить
                    If Dogs(maxStr2) < Dogs(i) Then
                        maxStr2 = i
                    End If
                End If
            Next
            Dim x,z As double
            x = (Dogs(maxStr1) * 100) / 150 'Находим процентную часть от максимума каждой из сильнейших
            z = (Dogs(maxStr2) * 100) / 150
            If Math.Abs(x - z) <= 1 Then
                Dogs(maxStr1) = Dogs(maxStr1) - 10
                Dogs(maxStr2) = Dogs(maxStr2) - 10
                b = b + 1
            End If
        Loop Until c = b Or b = 0
        TextBox1.Text = b
    End Sub
End Class
...
Рейтинг: 0 / 0
Посмотрите код, где ошибка?
    #37744550
QValD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anekto, если метод полностью помещается на 1 экране, то он не большой.
А так, если уж очень не терпится, то либо меняй алгоритм, либо разбивай на функции.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Посмотрите код, где ошибка?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]