|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
16.10.2010, 23:39 | #1 |
Пользователь
Регистрация: 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. |
17.10.2010, 10:39 | #2 |
Форумчанин
Регистрация: 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 хотя бы чуть-чуть, Вы вполне сможете его реализовать. Если же нет - то Вам проще заказать его за денежку. На форуме даже раздел специальный есть... |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Прямоугольник с тенями | 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 |