Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
1 / 1 / 0
Регистрация: 06.01.2014
Сообщений: 64
1

Можно ли из круглой заготовки радиуса r вырезать две прямоугольные пластинки с размерами a ´ b и c ´ d

09.11.2016, 22:16. Просмотров 848. Ответов 6
Метки нет (Все метки)


Вот собственно задача:
-Можно ли из круглой заготовки радиуса r вырезать две прямоугольные пластинки с размерами a ´ b и c ´ d?
Помогите с алгоритмом. Не могу понять.
Нашел задачи на Паскале и на С++, но не могу интерпретировать в VB6.
Если вам лень писать код, то буду благодарен хотя бы с алгоритмом решения, а код как нить сам попытаюсь написать.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.11.2016, 22:16
Ответы с готовыми решениями:

Можно ли из круглой заготовки радиуса r вырезать две прямоугольные пластинки с размерами а*б и с*д?
Можно ли из круглой заготовки радиуса r вырезать две прямоугольные пластинки с размерами а*б и с*д?

Можно ли из круглой заготовки радиуса r вырезать две прямоугольные пластинки с размерами a*b и c*d
можно ли из круглой заготовки радиуса r вырезать две прямоугольные пластинки с размерами a*b и c*d

Можно ли из круглой заготовки радиуса r вырезать две прямоугольные пластинки с размерами a x b и c x d
Можно ли из круглой заготовки радиуса r вырезать две прямоугольные пластинки с размерами a x b и...

Можно ли из круглой заготовки радиуса r вырезать две прямоугольные пластины с размерами a×b и c×d?
Нужно составить программы для двух задач, используя операторы ветвления. Задача жестянщика....

__________________
Помогаю в написании студенческих работ здесь.
6
es geht mir gut
11222 / 4699 / 1178
Регистрация: 27.07.2011
Сообщений: 11,426
09.11.2016, 23:30 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
Dim lines(1 To 4) As Double
 
Sub setLines(n As Integer, k As Double, l As Double)
    If k > l Then
       lines(n) = k
       lines(n + 1) = l
    Else
       lines(n) = l
       lines(n + 1) = k
    End If
End Sub
 
Sub main()
    Dim R As Double, a As Double, b As Double, c As Double, d As Double, x As Double, y As Double
    Dim ok As Boolean
    R = 1500
    a = 60
    b = 30
    c = 80
    d = 40
   ' Выбираем прямоугольник с большей стороной
    If ((a > c) And (a > d)) Or ((b > c) And (b > d)) Then
       Call setLines(1, a, b)
       Call setLines(3, c, d)
    Else
       Call setLines(3, a, b)
       Call setLines(1, c, d)
    End If
  
    If lines(1) >= 2 * R Then
       ok = False
    Else
      ' Берем самую длинную сторону и строим хорду
      x = Sqr(R ^ 2 - (lines(1) / 2) ^ 2)
      ' Вычитаем вторую сторону прямоугольника
      x = x - lines(2)
      ' К первому прямоугольнику прикладываем второй
      ' вычитаем меньшую сторону второго прямоугольника
      x = x - lines(4)
      ' Вычисляем длину хорды в этой точке
      ' если это возможно
      If Abs(x) > R Then
          ok = False
      Else
          y = Sqr(R ^ 2 - x ^ 2) * 2
         ' Второй прямоугольник поместится если хорда < стороны
          ok = lines(3) <= y
      End If
    End If
    If ok Then MsgBox "можно вырезать" Else MsgBox "нельзя вырезать"
End Sub
 
Private Sub Command1_Click()
    main
End Sub
0
1 / 1 / 0
Регистрация: 06.01.2014
Сообщений: 64
09.11.2016, 23:31  [ТС] 3
как сложно то
0
es geht mir gut
11222 / 4699 / 1178
Регистрация: 27.07.2011
Сообщений: 11,426
09.11.2016, 23:33 4
Цитата Сообщение от Lenar89 Посмотреть сообщение
как сложно то
Почему сложно, это перевод с Паскаля.

В Паскале получилось 68 строк, а в Барсике 55
0
1 / 1 / 0
Регистрация: 06.01.2014
Сообщений: 64
10.11.2016, 07:41  [ТС] 5
Спасибо за перевод!
Просто очень много букв. Просто я от первого вопроса препода поникну. Мы не проходили все это(

Добавлено через 8 часов 1 минуту
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
Sub setLines(n As Integer, k As Double, l As Double)
    If k > l Then
       lines(n) = k
       lines(n + 1) = l
    Else
       lines(n) = l
       lines(n + 1) = k
    End If
End Sub
 
Sub main()
    Dim R As Double, a As Double, b As Double, c As Double, d As Double, x As Double, y As Double
    Dim ok As Boolean
    R = 1500
    a = 60
    b = 30
    c = 80
    d = 40
   ' Выбираем прямоугольник с большей стороной
    If ((a > c) And (a > d)) Or ((b > c) And (b > d)) Then
       Call setLines(1, a, b)
       Call setLines(3, c, d)
    Else
       Call setLines(3, a, b)
       Call setLines(1, c, d)
    End If
Для чего здесь это?
0
es geht mir gut
11222 / 4699 / 1178
Регистрация: 27.07.2011
Сообщений: 11,426
10.11.2016, 09:28 6
Цитата Сообщение от Lenar89 Посмотреть сообщение
Для чего здесь это?
Что "это"?

Добавлено через 20 минут
Если Вас смущает процедура setLines (ввод значений в массив в порядке убывания), то можно сделать сортировку.
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
Sub SortLines(ByRef a() As Double)
    Dim i As Integer, j As Integer, t As Double
     For j = 1 To 4
        For i = 1 To 3
            If a(i) < a(i + 1) Then t = a(i): a(i) = a(i + 1): a(i + 1) = t
        Next i
     Next j
End Sub
Sub main()
    Dim lines(1 To 4) As Double, ok As Boolean, R As Double, x As Double, y As Double
    R = 100: lines(1) = 60: lines(2) = 30: lines(3) = 80: lines(4) = 40
    SortLines lines
    If lines(1) >= 2 * R Then
       ok = False
    Else
      x = Sqr(R ^ 2 - (lines(1) / 2) ^ 2) ' Берем самую длинную сторону и строим хорду
      x = x - lines(2)   ' Вычитаем вторую сторону прямоугольника
      x = x - lines(4)   ' К первому прямоугольнику прикладываем второй  ' вычитаем меньшую сторону второго прямоугольника
      If Abs(x) > R Then ' Вычисляем длину хорды в этой точке ' если это возможно
          ok = False
      Else
          y = Sqr(R ^ 2 - x ^ 2) * 2
          ok = lines(3) <= y    ' Второй прямоугольник поместится если хорда < стороны
      End If
    End If
    If ok Then MsgBox "можно вырезать" Else MsgBox "нельзя вырезать"
End Sub
Private Sub Command1_Click()
    main
End Sub
0
1 / 1 / 0
Регистрация: 06.01.2014
Сообщений: 64
10.11.2016, 20:10  [ТС] 7
Я имел ввиду это. сори. не посмотрел что копировал-вставил.
Цитата Сообщение от Lenar89 Посмотреть сообщение
Visual Basic
1
2
3
4
5
6
7
8
9
Sub setLines(n As Integer, k As Double, l As Double)
* * If k > l Then
* * * *lines(n) = k
* * * *lines(n + 1) = l
* * Else
* * * *lines(n) = l
* * * *lines(n + 1) = k
* * End If
End Sub
А так, она мне упростила задание. То есть теперь не два прямоугольника надо вырезать, а один. и я его написал так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub Command1_Click()
R = Val(Text1.Text)
    a = Val(Text2.Text)
    b = Val(Text3.Text)
     Picture1.Cls
d = Sqr(a ^ 2 + b ^ 2)
z = 2 * R
If z >= d Then
Picture1.Print "Вырезать можно"
Else
Picture1.Print "Вырезать нельзя"
End If
End SubEnd Sub
Может кому пригодится))
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.11.2016, 20:10

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Можно ли из круглой заготовки радиусом R вырезать две прямоугольные пластины с размерами axb cxd
Задача жестянщика. Можно ли из круглой заготовки радиусом R вырезать две прямоугольные пластины с...

Можно ли из круглой заготовки вырезать две прямоугольные пластины заданных размеров
Нужно упростить код, если это возможно. Циклы не нужно, только алгоритм ветвления. Заранее спасибо...

Определить, можно ли из прямоугольного листа размером a*b метров вырезать две прямоугольные заготовки
Ребят,потомогите пожалуйста две программы написать. одна из задач на формы. Можно ли из...

Проверить, можно ли из круглой заготовки радиусом r вырезать прямоугольную пластину размером a*b
Проверить ,можно ли с круглой заготовки радиусом r выризать прямоугольную пластину размером a*b...


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

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

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