Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ Задача про Сарафан

Автор: #$# PaVeL #$# 8.02.2008 16:52

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

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

Пожалуйста помогите, срочно необходимо... до воскресения...
в худшем случае хоть алгоритм напишите (желательно с формулами)...

Автор: klem4 13.02.2008 1:01

Вот набросал кое-что, но если честно я не уверен, надо побольше потестить 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.

Автор: #$# PaVeL #$# 13.02.2008 10:30

Вообшето кармана два... Я вроде решил задачу, как с компьютера зайду (через телефон сижу)- выложу код...

Автор: klem4 13.02.2008 12:41

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


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

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