Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Помогите с задачей... Добавлено: 04.03.04 12:17  

Автор вопроса:  VB_kerish | Web-сайт: www.modules.by.ru | ICQ: 173991751 

Дана задача написать программу на VB:

Дано прямоугольное отверстие в стене и кирпич.

Пользователь вводит X,Y - размеры дыры и X,Y,Z размеры кирпича.

Вывести ответ пройдет ли кирпич в дыру или нет.

Причем проходить он может так "|" или так "-" , но не по диагонали.

Ответить

  Ответы Всего ответов: 5  

Номер ответа: 1
Автор ответа:
 Pashenko



ICQ: 176176951 

Вопросов: 14
Ответов: 655
 Профиль | | #1 Добавлено: 04.03.04 12:47

Text1, Text2 - размеры дыры

Text3, Text4, Text5 - размеры кирпича

Command1 - кнопка

 

Private Sub Command1_Click()
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-сайт: sapr7.by.ru
 Профиль | | #2
Добавлено: 05.03.04 23:54

Я немного не допонял приведенный ответ, и поэтому написал свой. Я думаю нет необходимости чего-либо сортировать.

Private Sub Command1_Click()
    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

2 Alex(S): твоё решение не верно.

Пример:

дыра 10x20

кирпич 15x16x17

Твоя программа говорит, что влезет  . Я конечно понимаю, как пихать

Ответить

Номер ответа: 4
Автор ответа:
 Alex(S)



Вопросов: 8
Ответов: 31
 Web-сайт: sapr7.by.ru
 Профиль | | #4
Добавлено: 10.03.04 00:11

Действительно, все зависит от того как пихать. Но вот вроде переделал код и вроде пихается нормалек.

Private Sub Command1_Click()
    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 _

Kirpich_XYZ(j) <= Min_stena Then
                    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

2 Alex(S): Согласен, результат достигнут, но какой ценой?

 

В твоём алгоритме, если не ошибаюсь, 22 оператора сравнения (при девяти итерациях).

У меня - 6 операторов сравнения при полном отсутствии циклов.

 

2 All: Господа, не изобретайте велосипед!!! Если есть оптимизированный алгоритм, зачем мучаться и писать "в лоб"?

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам