Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2020, 18:19   #1
Вита75
Новичок
Джуниор
 
Регистрация: 06.12.2020
Сообщений: 5
По умолчанию помогите начинающему

Пользователь указывает высоту и ширину большего прямоугольника, а так же высоту и ширину меньшего прямоугольника.Нужно узнать сколько маленьких прямоугольников можно вписать в большой.
double h1, h2, w1, w2, big_rectangle, small_rectangle, small_rectangles_in_big_rectangle; S_big_rectangle, S_small_rectangle;
cout << " укажите высоту и ширину большого треугольника;
cout << " укажите высоту и ширину меньшего треугольника;
sin >> big_rectangle;
sin >> small_rectangle;
S_big_rectangle = h1 * w1;
S_small_rectangle = h2 * w2;
small_rectangles_in_big_rectangle = S_big_rectangle/S_small_rectangle;
cout << "Колличество маленьких прямоугольников,вписанных в большой" << "\n";
Вита75 вне форума Ответить с цитированием
Старый 06.12.2020, 19:06   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,716
По умолчанию

1. Требуется длина и ширина, а вводится одно значение - чё за фигня ?
2. Просто площадь поделить на площадь - не годится. Дробное число предметов (прямоугольников) - не бывает.
3. И вообще не так-то просто. Прямоугольники малые - можно поворачивать? Неясно. Вырисовываются интересные варианты.
digitalis вне форума Ответить с цитированием
Старый 06.12.2020, 19:15   #3
Вита75
Новичок
Джуниор
 
Регистрация: 06.12.2020
Сообщений: 5
По умолчанию

Я вроде бы два значения ввела. double h1, h2, w1, w2
Вот такую нам задачу задали на первых уроках по визуал студио, не объясняя почти ничего. Пытаюсь разобраться. Спасибо за то,что хоть ответили.
Вита75 вне форума Ответить с цитированием
Старый 06.12.2020, 22:03   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,716
По умолчанию

Тут - полное непонимание сути языка.
Цитата:
Я вроде бы два значения ввела. double h1, h2, w1, w2
Это - всего лишь объявление переменных, для них отводится память. А где ввод в них значений?
"Учиться и ещё 2 раза учиться" © Лёнин.
Цитата:
Спасибо за то,что хоть ответили.
А что, должен был прогу написать? Не хочу. И не мой это язык.

Последний раз редактировалось digitalis; 06.12.2020 в 22:06.
digitalis вне форума Ответить с цитированием
Старый 07.12.2020, 06:35   #5
сфинкс
Участник клуба
 
Аватар для сфинкс
 
Регистрация: 17.06.2012
Сообщений: 1,027
По умолчанию

если без переворота прямоугольников

целое количество прямоугольников по горизонтали
умножить на
целое количество прямоугольников по вертикали

зато поворачивая прямоугольники вариантов больше
Случайные и Массивы https://programmersforum.ru/showthread.php?t=344371 Учим C# & basic & excel & python https://programmersforum.ru/showthre...=327446&page=5 ничего нерекомендую
сфинкс вне форума Ответить с цитированием
Старый 07.12.2020, 10:35   #6
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,716
По умолчанию

Именно этот тезис я прокламировал в #2. А что, если всё же - повертеть ?
digitalis вне форума Ответить с цитированием
Старый 07.12.2020, 14:00   #7
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,378
По умолчанию

Подарю вам свой алгоритм, который разрабатывал около 20 лет назад.
И так. У нас есть прямоугольник со сторонами H и W и прямоугольник со сторонами h и w.
Тут большие буквы для большого прямоугольника, а маленькие - для малого.
Представим себе большой прямоугольник в виде резиновой поверхности, на которой нарисован малый прямоугольник.
Мы можем растянуть поверхность за одну из сторон так, что малый прямоугольник станет квадратом.
Очевидно, что если выразить площадь большого прямоугольника через площадь малого, то мы получим сколько малых прямоугольников поместится в большом.
Дробную часть отбрасываем.
Растяжение - это изменение масштаба: k = h/w.
В нашем случае это делается по одной из осей. Думаю, что код будет простым.

У меня нет полной уверенности в этом алгоритме, но тестирование случайным набором давало положительный результат.

PS: Конечно же необходимы некоторые первоначальные проверки. Например, что ни один размер меньшего прямоугольника не превышает ни одного размера большего.
Лучше разместить прямоугольники так, что бы большие их стороны были параллельны, если допускается поворот.

PSS: Алгоритм разрабатывался для случая, когда на форме заданных размеров (X, Y) необходимо было разместить заданное число прямоугольников N.
Прямоугольники должны иметь заданное соотношение сторон, скажем, 3/4.
Необходимо было определить размеры этих прямоугольников (x, y).
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 07.12.2020, 14:13   #8
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,716
По умолчанию

Ничего не понял. Размещение д.быть на реальном, а не "растянутом" прямоугольнике. В общем-то, эта задача - не для 6-го класса, а как вариант "задачи о ранце" дискретной оптимизации. Мне ничего на ум не приходит, кроме методом Монте-Карло громоздить случайным образом и находить максимум. При быстродействии современных компов перебор нескольких миллионов вариантов даст что-то близкое к оптимуму.
А лучше не заморачиваться и ввести ограничение: поворачивать - нииизя! А если можно, то все одинаково: или вдоль, или поперёк, не вперемежку. Иначе - см. выше.
digitalis вне форума Ответить с цитированием
Старый 07.12.2020, 16:16   #9
сфинкс
Участник клуба
 
Аватар для сфинкс
 
Регистрация: 17.06.2012
Сообщений: 1,027
По умолчанию

Если прямоугольники малые поворачиваются ортогонально

тогда известно горизонтальное и вертикальное
количество минимальное и максимальное

и умножив получаем теоретические 4 варианта

Между прочим использованы 2 теоремы

Решение задачи ниже:

шир * выс

20 * 17
10 * 6
шир 2 и выс 2 интеграл: 4

20 * 17
6 * 10
шир 3 и выс 1 интеграл: 3

вперемешку

выс 6 + 10 значит 2 ряда
и в повёрнутом ряду 10+10 значит 2
шир 6 + 6 + 6 значит 3
интеграл: 2 + 3 = 5

проверено в autocad совместимой программе

итого: поворачиваемые заполнять слоями
Случайные и Массивы https://programmersforum.ru/showthread.php?t=344371 Учим C# & basic & excel & python https://programmersforum.ru/showthre...=327446&page=5 ничего нерекомендую

Последний раз редактировалось сфинкс; 07.12.2020 в 20:34.
сфинкс вне форума Ответить с цитированием
Старый 07.12.2020, 17:19   #10
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,716
По умолчанию

Чтоб не размазывать кашу по столу: большой 20 * 17, малый 10 * 6. Решение - в студию!
Что поворачивать ортогонально - это и козе понятно. Доказывать математически неохота, но интуитивно чувствую: заполнение не параллельно осям координат оптимальным не будет никогда. Принимаю опровержение - конкретным примером.
И ещё раз: убеждён, что если решение "по уму", то оно отнюдь не школярское.
Изображения
Тип файла: jpg изображение_2020-12-07_172725.jpg (21.9 Кб, 1 просмотров)

Последний раз редактировалось digitalis; 07.12.2020 в 17:28.
digitalis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите начинающему!! т54 PHP 2 16.10.2014 14:54
Помогите начинающему на С++ Tat-ka Помощь студентам 1 30.10.2009 22:45
Помогите начинающему. alex2693 Общие вопросы C/C++ 0 09.04.2009 22:40