Прошу извинить за молчание - подхватил дикий насморк (
2 Теньотцагамлета:
Как я и говорил, в программе нет "программистких" ошибок, только логические. Постараюсь это показать.
Логика "хромает" здесь:
'___совмещаем выбранный напёрсток с содержимым_____
If A1 = 1 Then 'Если выбран напёрсток A
A2 = A 'то под A2 содержимое напёрстка A
ElseIf B1 = 1 Then 'Если выбран напёрсток B
A2 = B 'то под A2 содержимое напёрстка B
ElseIf C1 = 1 Then 'Если выбран напёрсток C
A2 = C 'то под A2 содержимое напёрстка C
End If
'__________убираем пустой напёрсток____________________
If A2 = 0 Then 'Если шарика нет под выбранным напёрстком
B2 = 1 ' то он под оставшимся
End If
В чем можно убедиться двояко.
1. Чуть поменяем:
'__________убираем пустой напёрсток____________________
If A2 = 1 Then 'Если шарик под выбранным напёрстком
B2 = 0 ' то его нет под оставшимися
End If
Логика вроде бы та же и "железная": Если шарик под выбранным напёрстком
то его нет под оставшимися
Но результат неприятно удивляет ;-)
Или, еще лучше, танцуем от "невыбранного" шарика:
Dim A, B, C As Integer 'Напёрстки
Dim A1, B1, C1, B4, C4 As Integer 'Bыбор
Dim A2, B2 As Integer 'Оставшиеся напёрстки
Dim X, y As Integer 'Для случайных чисел
Dim Won As Double 'Выигранные игры
Dim Steps As Double 'Количество игр
Private Sub CommandButton1_Click() ' Пуск программы
Won = 0 ' Обнулить счетчик побед
Steps = TextBox1.Text ' Загрузить количество игр
Do While Steps > 0 ' Inner loop.
Steps = Steps - 1 ' Increment Steps.
'________________Обнуление ________
A = 0: B = 0: C = 0: A1 = 0: B1 = 0: C1 = 0: A2 = 0: B2 = 0:
'________________ заряжаем напёрсток шариком ________
Randomize
X = Int((3 * Rnd) + 1) 'Случайное число 1-2-3
If X = 1 Then
A = 1 'Шарик под напёрстком A
B = 0
C = 0
ElseIf X = 2 Then
B = 1 'Шарик под напёрстком B
A = 0
C = 0
ElseIf X = 3 Then
C = 1 'Шарик под напёрстком C
B = 0
A = 0
End If
'________________ выбираем один из трёх ________
X = Int((3 * Rnd) + 1) 'Случайное число 1-2-3
If X = 1 Then
A1 = 1 'Выбран напёрсток A
ElseIf X = 2 Then
B1 = 1 'Выбран напёрсток B
ElseIf X = 3 Then
C1 = 1 'Выбран напёрсток C
End If
'__________убираем пустой напёрсток____________________
' ищем оставшийся невыбранный
y = 1 'убрали или нет
If A1 = 1 And B = 0 Then
C4 = 1
y = 0 ' убрали
End If
If A1 = 1 And C = 0 And y = 1 Then
B4 = 1
y = 0
End If
If B1 = 1 And A = 0 And y = 1 Then
C4 = 1
y = 0
End If
If B1 = 1 And C = 0 And y = 1 Then
A4 = 1
y = 0
End If
If C1 = 1 And A = 0 And y = 1 Then
B4 = 1
y = 0
End If
If C1 = 1 And B = 0 And y = 1 Then
A4 = 1
y = 0
End If
If A4 = 1 Then ' если остался неубранным A
If A = 1 Then ' если шарик под ним
A2 = 0
B2 = 1
Else
A2 = 1
B2 = 0
End If
End If
If B4 = 1 Then
If B = 1 Then
A2 = 0
B2 = 1
Else
A2 = 1
B2 = 0
End If
End If
If C4 = 1 Then
If C = 1 Then
A2 = 0
B2 = 1
Else
A2 = 1
B2 = 0
End If
End If
'____________________делаем второй выбор_____________________
If Abs(OptionButton1.Value) = 1 Then 'Не менять выбор
Won = Won + A2
End If
If Abs(OptionButton2.Value) = 1 Then 'Поменять выбор
Won = Won + B2
End If
If Abs(OptionButton3.Value) = 1 Then 'Случайный выбор
X = Int((2 * Rnd) + 1) 'Случайное число 1-2
If X = 1 Then
Won = Won + A2 'Выбираем один из
Else
Won = Won + B2 'двух напёрстков
End If
End If
Loop
TextBox2.Text = Won 'Показать количество побед
End Sub
Результат - противоположный первоначальному.
Что и доказывает, что правильная логика только по опции 3... |