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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.10.2010, 23:39   #1
xamelion
Пользователь
 
Регистрация: 25.12.2009
Сообщений: 11
По умолчанию прямоугольник с размерами A*B.

Здравствуйте!
Помогите пожалуйста написать или исправить программу на Delphi:
Дан прямоугольник с размерами A*B. От него отрезают квадраты размера a, пока это возможно. Затем от оставшегося куска отрезают квадраты максимально возможного размера и т.д. Создать приложение для расчёта количества и размера квадратов, на которые будет разрезан исходный прямоугольник. Рассчитанные данные показать в новой форме.

unit Unit1i.r;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
A,B,h:extended;
d,x1,x2,x3:extended;
begin
if not TryStrToFloat(Edit1.Text,A) then
begin
ShowMessage('Укажите A');
exit;
end;
if not TryStrToFloat(Edit2.Text,B) then
begin
ShowMessage('Укажите B');
exit;
end;
if not TryStrToFloat(Edit3.Text,h) then
begin
ShowMessage('Укажите h');
exit;
end;
d:=A*B;
if d<0 then
begin
ShowMessage('Решений нет');
exit;
end;
x1:=A/h;
x2:=B/h;
x3:=x1*x2;;
ShowMessage('x1='+FloatToStr(x2)+' x2='+FloatToStr(x2)+' x3='+FloatToStr(x3));
exit;
end;
end.
xamelion вне форума Ответить с цитированием
Старый 17.10.2010, 10:39   #2
Greek9000
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 151
По умолчанию

Предлагаю такой алгоритм:
1. Пусть есть функция F, которая на вход получает размеры прямоугольника AB и размер квадрата |a|, а на выходе выдаёт число квадратов заданного размера и пару (или один, если разрешена ситуация, когда размер квадрата больше хотя бы одной стороны заданного прямоугольника) прямоугольников, оставшихся от вычитания из исходного прямоугольника всех квадратов.
2. Фиксируем результаты расчётов (т.е. кол-во квадратов данного размера, или их общее кол-во, независимо от размера, или любым другим способом).
3. Для каждого полученного прямоугольника, размеры которого больше чем 1х1 пиксел, рекурсивно вызываем функцию F, передавая ей качестве размера квадрата размер минимальной стороны исходного прямоугольника.

Функция F может работать след. образом:
Очевидно, что если |a| меньше каждой из сторон исходного прямоугольника, то кол-во квадратов со стороной |a|, которые могут поместиться в заданом прямоугольнике равно k1*k2,
где k1 = A div a, k2 = B div a;
Тогда A = a*k1+M, B = a*k2+N;
Не теряя общности предположим, что M >= N, тогда в результате вычитания прямоугольника MN из исходного прямоугольника AB получим Г-образную фигуру, которую можно разделить на пару прямоугольников:
BM и AN. Эти два прямоугольника необходимо передать в качестве результата, вместе с парой чисел (k1, k2).
Если же |a| больше хотя бы одной стороны, то BM = AB, AN = (0,0).

Такой вот алгоритм. Думаю, что зная delphi хотя бы чуть-чуть, Вы вполне сможете его реализовать. Если же нет - то Вам проще заказать его за денежку. На форуме даже раздел специальный есть...
Greek9000 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прямоугольник с тенями SashaN Помощь студентам 4 14.05.2010 14:22
C#, прямоугольник Goldcoding Фриланс 2 09.04.2010 20:34
Глюк с размерами в IMG youko HTML и CSS 2 15.02.2009 11:31
помогите с размерами изображения Brainyc Помощь студентам 5 19.09.2007 14:37