IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Задача про Сарафан, Задача на Паскале
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 91
Пол: Мужской
Реальное имя: Павел

Репутация: -  0  +


Предупреждаю темой не ошибся... cool.gif
Задача:
Катя шила сарафан, у неё остался кусок треугольной (*треугольник - прямоугольный) ткани, вопрос: можно ли из указанного куска ткани вырезать два кармана (*прямоугольной формы) указанных размеров???

Пожалуйста помогите, надежда на вас, уже трое суток мучаюсь...
Что мне приходило в голову:
1) Комбинировать подстановку треугольников всевозможными способами - код слишком длинный и слишком сложный - явно неподходит...
2) брать треугольник прикладывать каждый из карманов к сторонам и отсекать от треугольника эту часть и пытаться в оставшийся вписать другой карман...

Пожалуйста помогите, срочно необходимо... до воскресения...
в худшем случае хоть алгоритм напишите (желательно с формулами)...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Вот набросал кое-что, но если честно я не уверен, надо побольше потестить smile.gif

var
c_a, c_b: Extended;

function Hypotenuse(const x: Extended): Extended;
begin
Hypotenuse := -x * c_a / c_b + c_a;
end;

function CanInclude(const x, y, s_a, s_b: Extended): Boolean;
begin
CanInclude := Hypotenuse(x + s_b) >= (y + s_a);
end;

function GetSolution(s_a, s_b: Extended): Boolean;
var
_result: Boolean;
T: Extended;
begin

_result := CanInclude(0, 0, s_a, s_b);

if not _result then begin
T := s_a; s_a := s_b; s_b := T;
_result := CanInclude(0, 0, s_a, s_b);
end;

if _result then begin
_result := CanInclude(0, s_a, s_a, s_b) or CanInclude(0, s_a, s_b, s_a);
if not _result then
_result := CanInclude(s_b, 0, s_a, s_b) or CanInclude(s_b, 0, s_b, s_a);
end;

GetSolution := _result;
end;

var
s_a, s_b: Extended;

begin
c_a := 10; // катет №1
c_b := 10; // катет №2

s_a := 8; // сторона прямоуголника №1
s_b := 1; // сторона прямоуголника №2

if GetSolution(s_a, s_b) then writeln('Yes')
else writeln('No');
end.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 91
Пол: Мужской
Реальное имя: Павел

Репутация: -  0  +


Вообшето кармана два... Я вроде решил задачу, как с компьютера зайду (через телефон сижу)- выложу код...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Цитата
Вообшето кармана два...


эээ иии ? в моей программе подразумевается, что размер карманов s_a * s_b(это площадь одного кармана), я же вроде комментарии поставил ...

может конечно по коду не заметно, в общем GetSolution вернет true если в треугольнике с катетами c_a & c_b можно разместить 2 прямоугольника со сторонами s_a & s_b

Сообщение отредактировано: klem4 -


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 31.10.2020 14:12
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name