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

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

4 страниц V « < 2 3 4  
 Ответить  Открыть новую тему 
> рекурсия- разбиение и сборка квадрата
Lapp
сообщение 16.12.2009 0:51
Сообщение #61


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Unconnected @ 15.12.2009 13:00) *
У меня при N=8 первая комбинация такая получается (скопировал из cmd):
...
Угла из скобок нет.
Спасибо, Unconnected. Я все никак не мог добраться до машины с ТР.
+1 тебе. Еще раз спасибо smile.gif


Цитата(Екатерина7 @ 15.12.2009 19:49) *
все, получается. да
Так зачем тогда было говорить то, чего нет? blink.gif

Цитата
почему кое-где по одной букве.. она считается за прямоугольник?
Конечно. А чем он провинился?.. Не дорос?.. В условии нет границы снизу на размер.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Екатерина7
сообщение 16.12.2009 7:33
Сообщение #62


Новичок
*

Группа: Пользователи
Сообщений: 43
Пол: Женский

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


потому что сначала не получалось..(

Добавлено через 6 мин.
а можно процедуру Put пошагово объяснить, конкретнее,если можно.. blush.gif
и что такое Inc(k);

Добавлено через 1 мин.
tRectangle, tLocation это какой-то тип?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 16.12.2009 10:03
Сообщение #63


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Екатерина7 @ 16.12.2009 7:33) *
потому что сначала не получалось..(
Что не получалось? Так были скобки углом или не были? Как же трудно от тебя получить ответ на простейший вопрос..

Цитата
а можно процедуру Put пошагово объяснить, конкретнее,если можно..
Можно, конечно. Перечитай пост #45 ( рекурсия- разбиение и сборка квадрата ). Я не хочу копипастить его сюда. Более конкретно - на более конкретные вопросы..

Цитата
и что такое Inc(k);
Inc(x) эквивалентно x:=x+1 .

Цитата
tRectangle, tLocation это какой-то тип?
Да, типы. Смотри программный код, а также пост #6 ( рекурсия- разбиение и сборка квадрата ).


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Екатерина7
сообщение 22.12.2009 21:56
Сообщение #64


Новичок
*

Группа: Пользователи
Сообщений: 43
Пол: Женский

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


а для чего вот это?
const
r0: tRectangle=(a:1; b:1);
l0: tLocation=(x: 0; y: 0);

что такое r0 и l0?

Добавлено через 4 мин.
еще хотела спросить, а что делает эта функция
function Overlap(r1: tRectangle; l1: tLocation; r2: tRectangle; l2: tLocation): boolean;
begin
Overlap:=
(Abs(l2.x*2+r2.a-l1.x*2-r1.a) < r1.a+r2.a) and
(Abs(l2.y*2+r2.b-l1.y*2-r1.b) < r1.b+r2.b)
end;

var
r: array[1..n*n+10]of tRectangle;
l: array[1..n*n+10]of tLocation;
s,i,m,k,done: integer;
t: tRectangle;
u: tLocation;
Clear: boolean;



Добавлено через 16 мин.
function Overlap- эта функция проверяет пересекаются ли прямоугольники?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unconnected
сообщение 22.12.2009 22:25
Сообщение #65


mea culpa
*****

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

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


Цитата
const
r0: tRectangle=(a:1; b:1);
l0: tLocation=(x: 0; y: 0);


Объявление переменных r0 и l0 типами tRectangle и TLocation соответственно (только почему-то он сделал это в секции констант). Сразу же эти переменные инициализируются, т.е. им присваиваются начальные значения (вот эти части: "=(a:1; b:1);=(x: 0; y: 0);").

Цитата

еще хотела спросить, а что делает эта функция
function Overlap(r1: tRectangle; l1: tLocation; r2: tRectangle; l2: tLocation): boolean;


Ну нифига себе... Мы тут, понимаешь, на первой странице этого топа способы проверки на пересечение двух прямоугольников придумывали, а она и не заметила..))

Цитата

var
r: array[1..n*n+10]of tRectangle;
l: array[1..n*n+10]of tLocation;
s,i,m,k,done: integer;
t: tRectangle;
u: tLocation;
Clear: boolean;


Секция описания переменных, тут всё должно быть понятно.

Сообщение отредактировано: Unconnected - 22.12.2009 22:26


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Екатерина7
сообщение 22.12.2009 22:52
Сообщение #66


Новичок
*

Группа: Пользователи
Сообщений: 43
Пол: Женский

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


заметила. а что такое NoOne?

Добавлено через 9 мин.
например, вот тут
Код
begin
  if y<=n then begin
    li.x:=x;
    li.y:=y;
    NoOne:=true;

или тут
Код
for j:=1 to m do if l[j].x>0 then Clear:=Clear and not Overlap(r[i],li,r[j],l[j]);
          if Clear then begin
            Inc(k);
            l[i]:=li;
            if k<>m then Put(x mod n+1,y+x div n);
            l[i]:=l0;
            Dec(k);
            NoOne:=false
          end
        end;
        j:=a;
        a:=b;
        b:=j;
      end
    end;
    if NoOne then Put(x mod n+1,y+x div n)
  end
end;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unconnected
сообщение 22.12.2009 23:04
Сообщение #67


mea culpa
*****

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

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


Ну, насколько я понял, NoOne - булевая переменная, обеспечивающая условие выхода из рекурсии. Т.е. если рекурсивная функция находит очередной вариант, то рекурсивно вызывается эта же функция с изменёнными параметрами, иначе рекурсия кончается.

Условие выхода из рекурсии:

    if NoOne then Put(x mod n+1,y+x div n)



--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Екатерина7
сообщение 22.12.2009 23:07
Сообщение #68


Новичок
*

Группа: Пользователи
Сообщений: 43
Пол: Женский

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


я так поняла, что function Overlap(r1: tRectangle; l1: tLocation; r2: tRectangle; l2: tLocation): boolean; -функция, которая выдает True, если прямоугольники пересекаются и False,если нет. так? только если честно, этого я в программе не вижу, в смысле где именно это описывается..

Добавлено через 1 мин.
ааа.. спасибо большое!

Добавлено через 5 мин.
можешь еще объяснить хотя бы в кратце, что делает procedure JustSet; {подготовка входных данных}
вот тут
with t do repeat
a:=Random(k)+1;
b:=Random(k)+1;
q:=s+a*b;
if q<=n*n then begin
Inc(m);
r[m]:=t;
l[m]:=u;
s:=q
end
until s=n*n
end;


Добавлено через 1 мин.
blush.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 23.12.2009 5:58
Сообщение #69


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Екатерина7 @ 22.12.2009 23:07) *
я так поняла, что function Overlap(r1: tRectangle; l1: tLocation; r2: tRectangle; l2: tLocation): boolean; -функция, которая выдает True, если прямоугольники пересекаются и False,если нет. так? только если честно, этого я в программе не вижу, в смысле где именно это описывается..
Это не описывается. Это делается внутри самой функции. Алгоритм я подробно объяснил в одном из постов, посмотри выше.

Цитата
можешь еще объяснить хотя бы в кратце, что делает procedure JustSet; {подготовка входных данных}
конечно.
Это просто случайный выбор набора прямоугольников с условием, что их суммарная площадь равна площади квадрата (ну и каждая сторона не превосходит стороны квадрата). То, что из них действительно можно составить квадрат - не гарантируется (поэтому название JustSet - ПростоНабор).
with t do repeat
// случайным образом выбираем размеры прямоугольника
a:=Random(k)+1;
b:=Random(k)+1;
// вычисляем общую сумму площадей
q:=s+a*b;
// если она меньше, чем площадь разрезаемого квадрата - прямоугольник годится, записываем его в набор
if q<=n*n then begin
Inc(m); // увеличиваем число прямоугольников в наборе
r[m]:=t; // записывем прямоугольник в набор
l[m]:=u; // приписываем ему нулевое положение (означает, что он не положен внутрь квадрата)
s:=q // запоминаем новое значение суммарной площади
end
until s=n*n // до тех пор, пока суммарная площадь не сравняется с площадбю квадрата
end;


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Екатерина7
сообщение 23.12.2009 16:01
Сообщение #70


Новичок
*

Группа: Пользователи
Сообщений: 43
Пол: Женский

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


спасибо всем огромное, кто принимал участие в решении этой задачи!!! good.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



- Текстовая версия 24.06.2025 17:36
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"