С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
1 / 1 / 0
Регистрация: 06.01.2014
Сообщений: 80

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

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

Студворк — интернет-сервис помощи студентам
Вот собственно задача:
-Можно ли из круглой заготовки радиуса r вырезать две прямоугольные пластинки с размерами a ´ b и c ´ d?
Помогите с алгоритмом. Не могу понять.
Нашел задачи на Паскале и на С++, но не могу интерпретировать в VB6.
Если вам лень писать код, то буду благодарен хотя бы с алгоритмом решения, а код как нить сам попытаюсь написать.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
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 и c x d https://**********/a/rw2BOng ...

6
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
09.11.2016, 23:30
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
Сообщений: 80
09.11.2016, 23:31  [ТС]
как сложно то
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
09.11.2016, 23:33
Цитата Сообщение от Lenar89 Посмотреть сообщение
как сложно то
Почему сложно, это перевод с Паскаля.

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

Добавлено через 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
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
10.11.2016, 09:28
Цитата Сообщение от 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
Сообщений: 80
10.11.2016, 20:10  [ТС]
Я имел ввиду это. сори. не посмотрел что копировал-вставил.
Цитата Сообщение от 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.11.2016, 20:10
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru