Страница: 1 |
Дана задача написать программу на VB: Дано прямоугольное отверстие в стене и кирпич. Пользователь вводит X,Y - размеры дыры и X,Y,Z размеры кирпича. Вывести ответ пройдет ли кирпич в дыру или нет. Причем проходить он может так "|" или так "-" , но не по диагонали.
Text1, Text2 - размеры дыры Text3, Text4, Text5 - размеры кирпича Command1 - кнопка Private Sub Command1_Click() 'Сортируем размеры по убыванию 'Максимальный размер кирпича можно исключить из рассмотрения, 'Пытаемся засунуть кирпич в дыру Я немного не допонял приведенный ответ, и поэтому написал свой. Я думаю нет необходимости чего-либо сортировать. Private Sub Command1_Click() Исходные данные такие же. 2 Alex(S): твоё решение не верно. Пример: дыра 10x20 кирпич 15x16x17 Твоя программа говорит, что влезет . Я конечно понимаю, как пихать Действительно, все зависит от того как пихать. Но вот вроде переделал код и вроде пихается нормалек. Private Sub Command1_Click() Kirpich_XYZ(j) <= Min_stena Then 2 Alex(S): Согласен, результат достигнут, но какой ценой? В твоём алгоритме, если не ошибаюсь, 22 оператора сравнения (при девяти итерациях). У меня - 6 операторов сравнения при полном отсутствии циклов. 2 All: Господа, не изобретайте велосипед!!! Если есть оптимизированный алгоритм, зачем мучаться и писать "в лоб"? Страница: 1 |
Вопрос: Помогите с задачей...
Добавлено: 04.03.04 12:17
Автор вопроса: VB_kerish | Web-сайт:
Ответы
Всего ответов: 5
Номер ответа: 1
Автор ответа:
Pashenko
ICQ: 176176951
Вопросов: 14
Ответов: 655
Профиль | | #1
Добавлено: 04.03.04 12:47
Dim DMax As Integer, DMin As Integer 'max и min размеры дыры
Dim KMax As Integer, KMid As Integer, KMin As Integer 'max, средний и min размеры кирпича
If CInt(Text1) > CInt(Text2) Then
DMax = CInt(Text1)
DMin = CInt(Text2)
Else
DMax = CInt(Text2)
DMin = CInt(Text1)
End If
If CInt(Text3) > CInt(Text4) Then
KMax = CInt(Text3)
KMin = CInt(Text4)
Else
KMax = CInt(Text4)
KMin = CInt(Text3)
End If
If CInt(Text5) > KMax Then
KMid = KMax
KMax = CInt(Text5)
Else
If CInt(Text5) < KMin Then
KMid = KMin
KMin = CInt(Text5)
Else
KMid = CInt(Text5)
End If
End If
'Проверяем, что получилось
MsgBox "Дыра: " & DMax & ", " & DMin & vbCrLf & "Кирпич: " & KMax & ", " & KMid & ", " & KMin
'т.к. кирпич всегда можно повернуть так, чтобы максимальное измерение
'кирпича было перпендикулярно плоскости дыры
If DMax >= KMid And DMin >= KMin Then
MsgBox "Влезет"
Else
MsgBox "Не влезет"
End If
End Sub
Номер ответа: 2
Автор ответа:
Alex(S)
Вопросов: 8
Ответов: 31
Web-сайт:
Профиль | | #2
Добавлено: 05.03.04 23:54
Dim stena_XY(0 To 1) As Double
Dim Kirpich_XYZ(0 To 2) As Double
Dim Max_stena As Double
Dim i As Byte
Dim Message As Boolean
Message = False
stena_XY(0) = CDbl(Text1)
stena_XY(1) = CDbl(Text2)
Kirpich_XYZ(0) = CDbl(Text3)
Kirpich_XYZ(1) = CDbl(Text4)
Kirpich_XYZ(2) = CDbl(Text5)
If stena_XY(0) < stena_XY(1) Then
Max_stena = stena_XY(1)
Else
Max_stena = stena_XY(0)
End If
For i = 0 To 2
If Kirpich_XYZ(i) <= Max_stena Then
Message = True
End If
Next i
If Message Then
MsgBox "Ee?ie? i?ieaao"
Else
MsgBox "Ee?ie? ia i?ieaao"
End If
End Sub
Номер ответа: 3
Автор ответа:
Pashenko
ICQ: 176176951
Вопросов: 14
Ответов: 655
Профиль | | #3
Добавлено: 09.03.04 10:51
Номер ответа: 4
Автор ответа:
Alex(S)
Вопросов: 8
Ответов: 31
Web-сайт:
Профиль | | #4
Добавлено: 10.03.04 00:11
Dim stena_XY(0 To 1) As Double
Dim Kirpich_XYZ(0 To 2) As Double
Dim Max_stena, Min_stena As Double
Dim i, j As Byte
Dim Message As Boolean
Message = False
stena_XY(0) = CDbl(Text1)
stena_XY(1) = CDbl(Text2)
Kirpich_XYZ(0) = CDbl(Text3)
Kirpich_XYZ(1) = CDbl(Text4)
Kirpich_XYZ(2) = CDbl(Text5)
If stena_XY(0) < stena_XY(1) Then
Max_stena = stena_XY(1)
Min_stena = stena_XY(0)
Else
Max_stena = stena_XY(0)
Min_stena = stena_XY(0)
End If
For i = 0 To 2
For j = 0 To 2
If i <> j Then
If Kirpich_XYZ(i) <= Max_stena And _
Message = True
End If
End If
Next j
Next i
If Message Then
MsgBox "Êèðïè÷ ïðîéäåò"
Else
MsgBox "Êèðïè÷ íå ïðîéäåò"
End If
End Sub
Номер ответа: 5
Автор ответа:
Pashenko
ICQ: 176176951
Вопросов: 14
Ответов: 655
Профиль | | #5
Добавлено: 10.03.04 16:41