Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Посмотрите код, где ошибка? / 6 сообщений из 6, страница 1 из 1
09.04.2012, 00:01
    #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
09.04.2012, 00:59
    #37744428
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посмотрите код, где ошибка?
Anektoгде ошибаюсь?а с чего вы взяли, что ошибаетесь? Может для начала изложите суть выявленной ошибки?
...
Рейтинг: 0 / 0
09.04.2012, 07:48
    #37744496
Anekto
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посмотрите код, где ошибка?
Shocker.Pro,

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

Я выводил начальные значения на листбокс и переменную b в текстбокс с целью отследить, и получается не то что я ожидал, в массиве есть некоторые значения подходящие или даже одинаковые, но переменная b не изменяется.
...
Рейтинг: 0 / 0
09.04.2012, 07:58
    #37744499
Anekto
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посмотрите код, где ошибка?
Хотя я неправильно понял суть задачи, сейчас в отладке проверю.
...
Рейтинг: 0 / 0
09.04.2012, 08:28
    #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
09.04.2012, 09:10
    #37744550
QValD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посмотрите код, где ошибка?
Anekto, если метод полностью помещается на 1 экране, то он не большой.
А так, если уж очень не терпится, то либо меняй алгоритм, либо разбивай на функции.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Посмотрите код, где ошибка? / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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