Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/12: Рейтинг темы: голосов - 12, средняя оценка - 4.67
 Аватар для WMC
86 / 86 / 1
Регистрация: 15.11.2011
Сообщений: 192

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

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

Студворк — интернет-сервис помощи студентам
В стене существует, прямоугольное отверстие NxM см (задаются пользователем через окно ввода). Имеется кирпич с размерами a,b,c (задаются пользователем через окно ввода). Одновременно с заданием указанных выше размеров на форме появляется изображение стены с отверстием введённых размеров и рядом кирпич с определёнными параметрами (приблизительно в изометрии). Определить, пройдёт кирпич в отверстие или нет, если подавать его можно только параллельно стенкам отверстия. Выдать соответствующее сообщение.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.02.2013, 21:59
Ответы с готовыми решениями:

Определить, пройдет ли кирпич через отверстие
Помогите составить блок-схему, и написать програму в VBA?!?!?! Заданы размеры А, В прямоугольного отверстия и размеры X, Y, Z кирпича....

Определить, пройдет ли кирпич через отверстие
1.Заданы размеры A, B прямоугольного отверстия и размеры X, Y, Z кирпича. Определить, пройдет ли кирпич через отверс*тие 2.Два...

Пройдет ли кирпич с ребрами a,b,c в прямоугольное отверстие со сторонами x и y
Здравствуйте, помогите пожалуйста написать программу в Qbasic. Составьте программу, которая проверяет, пройдет ли кирпич с ребрами a,b,c...

5
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
23.02.2013, 00:08
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
Вложения
Тип файла: rar BrickWall.rar (7.7 Кб, 31 просмотров)
1
6644 / 1511 / 169
Регистрация: 09.01.2010
Сообщений: 4,298
23.02.2013, 01:02
кирпич 10х10х1000 можно как то пропихнуть в проем 10х10?
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
23.02.2013, 01:04
Цитата Сообщение от gaw Посмотреть сообщение
кирпич 10х10х1000 можно как то пропихнуть в проем 10х10?
Конечно, если проталкивать его вдоль длинной оси.
1
 Аватар для Андрэич
2842 / 774 / 41
Регистрация: 20.05.2012
Сообщений: 2,055
23.02.2013, 02:33
Цитата Сообщение от 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
6644 / 1511 / 169
Регистрация: 09.01.2010
Сообщений: 4,298
24.02.2013, 23:56
еще вариант
Вложения
Тип файла: rar Project1.rar (9.3 Кб, 27 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.02.2013, 23:56
Помогаю со студенческими работами здесь

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

Определить пройдет ли кирпич
Определить пройдет ли кирпич с размерами a, b, c в отверстие с размерами a1, b1, c1

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

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru