Форум программистов, компьютерный форум, киберфорум
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. Показов 1831. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru