Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/10: Рейтинг темы: голосов - 10, средняя оценка - 4.60
WMC
86 / 86 / 1
Регистрация: 15.11.2011
Сообщений: 192
1

Стена и кирпич, пройдёт или нет

22.02.2013, 21:59. Просмотров 1805. Ответов 5
Метки нет (Все метки)

В стене существует, прямоугольное отверстие NxM см (задаются пользователем через окно ввода). Имеется кирпич с размерами a,b,c (задаются пользователем через окно ввода). Одновременно с заданием указанных выше размеров на форме появляется изображение стены с отверстием введённых размеров и рядом кирпич с определёнными параметрами (приблизительно в изометрии). Определить, пройдёт кирпич в отверстие или нет, если подавать его можно только параллельно стенкам отверстия. Выдать соответствующее сообщение.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.02.2013, 21:59
Ответы с готовыми решениями:

Выяснить, пройдёт ли кирпич в прямоугольное отверстие
12. Даны действительные положительные числа a, b, c, x, y. Выяснить, пройдёт ли кирпич с рёбрами a,...

Выяснить пройдёт ли кирпич с ребрами a,b,c в прямоугольное отверстие со сторонами x и y
Никак не могу разобраться с задачей. Решил её несколькими способами, но сомнения на счет...

Выяснить пройдёт ли кирпич с ребрами a, b, c в прямоугольное отверстие со сторонами x и y
задача: найти сумму первых N членов последовательности: -х^3, x^5, -x^7, x^9, ... . решение:...

Выяснить, пройдёт ли кирпич с рёбрами a, b, c в прямоугольное отверстие со сторонами x и y
Даны действительные положительные числа a, b, c, x, y. Выяснить, пройдёт ли кирпич с рёбрами a, b,...

Пройдёт ли кирпич с рёбрами А, В, С в прямоугольное отверстие со сторонами X и Y? (разветвление, выбор)
Создать проект, который будет проверять пройдёт ли кирпич с рёбрами А, В, С в прямоугольное...

5
The trick
Модератор
8100 / 2816 / 776
Регистрация: 22.02.2013
Сообщений: 3,956
Записей в блоге: 77
23.02.2013, 00:08 2
Visual Basic
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
Private Type Point
    X As Single
    Y As Single
    Z As Single
End Type
Dim HoleW As Single, HoleH As Single
Dim BrickW As Single, BrickH As Single, BrickD As Single
Dim Mov As Single
Private Sub Form_Load()
    HoleW = 10: HoleH = 10
    BrickD = 10: BrickH = 10: BrickW = 10
    Redraw
End Sub
Private Sub Redraw()
    Dim Mx As Single
    picDisplay.Cls
    If HoleW < 20 And HoleH < 20 Then picDisplay.Scale (-20, 20)-(20, -20) _
    Else Mx = IIf(HoleW > HoleH, HoleW, HoleH): picDisplay.Scale (-Mx * 2, Mx * 2)-(Mx * 2, -Mx * 2)
    ' Рисуем оси
    picDisplay.Line (-picDisplay.ScaleWidth / 2.2, picDisplay.ScaleHeight / 2.3)- _
                        Step(0, -picDisplay.ScaleHeight / 4), vbBlue: picDisplay.Print " H"
    picDisplay.Line (-picDisplay.ScaleWidth / 2.2, picDisplay.ScaleHeight / 2.3)- _
                        Step(picDisplay.ScaleWidth / 4, 0), vbRed: picDisplay.Print " D"
    picDisplay.Line (-picDisplay.ScaleWidth / 2.2, picDisplay.ScaleHeight / 2.3)- _
                        Step(picDisplay.ScaleWidth / 8, -picDisplay.ScaleHeight / 8), vbGreen: picDisplay.Print " W"
    ' Рисуем стену
    DrawBox Pt(-3, 0, 0), 0.3, picDisplay.ScaleWidth / 2, picDisplay.ScaleWidth
    ' Рисуем отверстие
    DrawHole Pt(-3, 0, 0), 0.3, HoleH, HoleW
    ' Проходит ли?
    If BrickW <= HoleW Then
        If BrickH <= HoleH Then DrawBox Pt(BrickD + Mov, 0, 0), BrickD, BrickH, BrickW: Exit Sub
        If BrickD <= HoleH Then DrawBox Pt(BrickH + Mov, 0, 0), BrickH, BrickD, BrickW: Exit Sub
    ElseIf BrickH <= HoleW Then
        If BrickD <= HoleH Then DrawBox Pt(BrickW + Mov, 0, 0), BrickW, BrickD, BrickH: Exit Sub
        If BrickW <= HoleH Then DrawBox Pt(BrickD + Mov, 0, 0), BrickD, BrickW, BrickH: Exit Sub
    ElseIf BrickD <= HoleW Then
        If BrickH <= HoleH Then DrawBox Pt(BrickW + Mov, 0, 0), BrickW, BrickH, BrickD: Exit Sub
        If BrickW <= HoleH Then DrawBox Pt(BrickH + Mov, 0, 0), BrickH, BrickW, BrickD: Exit Sub
    End If
    picDisplay.ForeColor = vbRed
    DrawBox Pt(BrickD + 1, 0, 0), BrickD, BrickH, BrickW
    picDisplay.ForeColor = vbBlack
End Sub
Private Sub DrawBox(Pos As Point, W As Single, H As Single, D As Single)
    picDisplay.Line (Pos.X - W / 2 - D / 4, Pos.Y + H / 2 - D / 4)-Step(W, -H), , B
    picDisplay.Line -Step(D / 2, D / 2)
    picDisplay.Line -Step(0, H)
    picDisplay.Line -Step(-D / 2, -D / 2)
    picDisplay.Line (Pos.X - W / 2 - D / 4, Pos.Y + H / 2 - D / 4)-Step(D / 2, D / 2)
    picDisplay.Line -Step(W, 0)
End Sub
Private Sub DrawHole(Pos As Point, W As Single, H As Single, D As Single)
    picDisplay.Line (Pos.X - D / 4 + W / 2, Pos.Y + H / 2 - D / 4)-Step(0, -H)
    picDisplay.Line -Step(D / 2, D / 2)
    picDisplay.Line -Step(0, H)
    picDisplay.Line -Step(-D / 2, -D / 2)
    picDisplay.Line (Pos.X - D / 4 + W / 2, Pos.Y - H / 2 - D / 4 + W)-Step(D / 2 - W, D / 2 - W)
    picDisplay.Line -Step(W, 0)
    picDisplay.Line -Step(-W, 0)
    picDisplay.Line -Step(0, H - (3 * W) / 4)
End Sub
Private Function Pt(ByVal X As Single, ByVal Y As Single, ByVal Z As Single) As Point
    Pt.X = X: Pt.Y = Y: Pt.Z = Z
End Function
 
Private Sub Timer_Timer()
    Redraw
    Mov = Mov - 1
    If Mov < -40 Then Mov = 0
End Sub
 
Private Sub txtBrickW_Change()
    If IsNumeric(txtBrickW.Text) Then BrickW = CSng(txtBrickW.Text): Redraw
End Sub
Private Sub txtBrickW_Validate(Cancel As Boolean)
    If IsNumeric(txtBrickW.Text) Then BrickW = CSng(txtBrickW.Text): Redraw
End Sub
Private Sub txtBrickH_Change()
    If IsNumeric(txtBrickH.Text) Then BrickH = CSng(txtBrickH.Text): Redraw
End Sub
Private Sub txtBrickH_Validate(Cancel As Boolean)
    If IsNumeric(txtBrickH.Text) Then BrickH = CSng(txtBrickH.Text): Redraw
End Sub
Private Sub txtBrickD_Change()
    If IsNumeric(txtBrickD.Text) Then BrickD = CSng(txtBrickD.Text): Redraw
End Sub
Private Sub txtBrickD_Validate(Cancel As Boolean)
    If IsNumeric(txtBrickD.Text) Then BrickD = CSng(txtBrickD.Text): Redraw
End Sub
Private Sub txtHoleW_Change()
    txtHoleW_Validate False
End Sub
Private Sub txtHoleW_Validate(Cancel As Boolean)
    If IsNumeric(txtHoleW.Text) Then HoleW = CSng(txtHoleW.Text): Redraw
End Sub
Private Sub txtHoleH_Change()
    txtHoleH_Validate False
End Sub
Private Sub txtHoleH_Validate(Cancel As Boolean)
    If IsNumeric(txtHoleH.Text) Then HoleH = CSng(txtHoleH.Text): Redraw
End Sub
1
Вложения
Тип файла: rar BrickWall.rar (7.7 Кб, 26 просмотров)
gaw
6636 / 1503 / 169
Регистрация: 09.01.2010
Сообщений: 4,290
23.02.2013, 01:02 3
кирпич 10х10х1000 можно как то пропихнуть в проем 10х10?
0
The trick
Модератор
8100 / 2816 / 776
Регистрация: 22.02.2013
Сообщений: 3,956
Записей в блоге: 77
23.02.2013, 01:04 4
Цитата Сообщение от gaw Посмотреть сообщение
кирпич 10х10х1000 можно как то пропихнуть в проем 10х10?
Конечно, если проталкивать его вдоль длинной оси.
1
Андрэич
2837 / 769 / 41
Регистрация: 20.05.2012
Сообщений: 2,056
23.02.2013, 02:33 5
Цитата Сообщение от WMC Посмотреть сообщение
В стене существует, прямоугольное отверстие NxM см (задаются пользователем через окно ввода). Имеется кирпич с размерами a,b,c (задаются пользователем через окно ввода). Одновременно с заданием указанных выше размеров на форме появляется изображение стены с отверстием введённых размеров и рядом кирпич с определёнными параметрами (приблизительно в изометрии). Определить, пройдёт кирпич в отверстие или нет, если подавать его можно только параллельно стенкам отверстия. Выдать соответствующее сообщение.
Только в миллиметрах:
Visual Basic
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
'X - высота отверстия
'Y - ширина отверстия
'lX и lY - швы 
 
Function HoleBrickSize( _
            ByVal X As Integer, _
            ByVal Y As Integer, _
            ByVal lX As Integer, _
            ByVal lY As Integer) As Boolean
 
Const h = 65     ' высота кирпича (65 мм)
Const w = 250    ' ширина кирпича (250 мм)
Dim s As String
 
'Проверяем высоту:
    Select Case h + lX
        Case Is > X
            s = "Ширина отверстия - меньше на " & _
                Format(h + lX - X) & " мм" & vbNewLine
        Case Is < X
            s = "Ширина отверстия - больше на " & _
                Format(X - h + lX) & " мм" & vbNewLine
    End Select
'Проверяем ширину:
    Select Case w + lY
        Case Is > Y
            s = s & "Высота отверстия - меньше на " & _
                Format(w + lY - Y) & " мм" & vbNewLine
        Case Is < Y
            s = s & "Высота отверстия - больше на " & _
                Format(Y - lY + w) & " мм" & vbNewLine
    End Select
MsgBox IIf(Len(Nz(s)) > 0, s, "Точный размер")
End Function
Вызов:
Visual Basic
1
HoleBrickSize 75,260,10,10
(ЗЫ: только в редакторе не проверял...)
0
gaw
6636 / 1503 / 169
Регистрация: 09.01.2010
Сообщений: 4,290
24.02.2013, 23:56 6
еще вариант
0
Вложения
Тип файла: rar Project1.rar (9.3 Кб, 22 просмотров)
24.02.2013, 23:56
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.02.2013, 23:56

попал кирпич в дырку или нет
Объясните как решить задачу Условие: Нам дан кирпич с тремя параметрами высота(a) ширина(b)...

Выяснить, пройдёт ли кирпич с заданными рёбрами в прямоугольное отверстие с заданными сторонами
Даны вещественнные положительные числа aa, bb, cc, xx, yy. Выяснить, пройдёт ли кирпич с рёбрами...

При условиях, что существует кирпич(а,b,c) и отверстие (x,y) и кирпич должен быть параллелен или перпендикулярен отверстию в момент прохождения
//--------------------------------------------------------------------------- #pragma hdrstop...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.