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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2015, 00:43   #1
mittelmabigkeit
 
Аватар для mittelmabigkeit
 
Регистрация: 18.11.2015
Сообщений: 4
По умолчанию Рекурсия (Pascal)

Приветствую, господа.

Собственно, нужна помощь с рекурсией на паскале.
Требуется, что бы к прямоугольнику пририсовывались ещё прямоугольники, по типу пикрелейтеда (рисовал на скорую руку, но идея понятна, я думаю).

На втором пике - имеющийся в данный момент текст программы. Что-то написал там, но выводится только основной прямоугольник, и то, если убираю оператор выбора if и процедуру ris, на пике всё показано, в общем.

Надеюсь на вашу помощь !

Безымянный.jpg

Безымянный2.jpg
mittelmabigkeit вне форума Ответить с цитированием
Старый 18.11.2015, 01:23   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,298
По умолчанию

Код:
procedure rect(lvl: integer; ind: integer);
var
    i: integer;
begin
    if lvl = 0 then exit;
    writeln(lvl, ' ', ind);
    for i := 0 to 3 do
        if (ind < 0) or ((ind + 2) mod 4 <> i) then
            rect(lvl - 1, i);
end;

begin
    rect(3, -1);
end.
Нумерация как координатные четверти, начиная с нуля.
Вместо lvl прикрутить только координаты.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 18.11.2015, 02:04   #3
mittelmabigkeit
 
Аватар для mittelmabigkeit
 
Регистрация: 18.11.2015
Сообщений: 4
По умолчанию

Спасибо, конечно. Но куда только не тыкал - ничего не вышло. Возможно ли объяснить более популярно ? т.к. с паскалем я тесные интимные связи имел.
2818331.jpg

Последний раз редактировалось mittelmabigkeit; 18.11.2015 в 02:09.
mittelmabigkeit вне форума Ответить с цитированием
Старый 18.11.2015, 04:21   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,298
По умолчанию

Код:
const
    h = 2;

procedure rect(x, y, a, b, ind: integer);
var
    i: integer;
begin
    if a + b < 40 then exit;
    rectangle(x, y, x + a, y + b);
    for i := 0 to 3 do
        if (ind < 0) or ((ind + 2) mod 4 <> i) then
            rect(x + a * Ord(i mod 2 = i div 2) - (a div h) * Ord(i mod 2 <> i div 2),
                 y - (b div h) * Ord(i < 2) + b * Ord(i > 1),
                 a div h, b div h, i);
end;

begin
    rect(300, 300, 200, 150, -1);
end.
Сначала рисуется главный прямоугольник. Затем в цикле вызываются функции для прямоугольников на краях. Переменная ind задает четверть, в которой лежит этот краевой прямоугольник. По номеру четверти можно понять, какие краевые прямоугольники должны быть у рассматриваемого в данный момент.
Код выше проверял в JS рисовалке, так что могут не совпасть координатные оси с паскалем, и рисунок весело поедет.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 18.11.2015, 05:34   #5
mittelmabigkeit
 
Аватар для mittelmabigkeit
 
Регистрация: 18.11.2015
Сообщений: 4
По умолчанию

Боюсь, мой лимит наглости исчерпан, но всё же...
В девятой строке вылазит ошибка "Неверное число параметров процедуры". Лечится ?
mittelmabigkeit вне форума Ответить с цитированием
Старый 18.11.2015, 11:15   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,298
По умолчанию

Именно эту строчку брал с вашего скриншота. Попробуйте добавить uses.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 18.11.2015, 12:33   #7
mittelmabigkeit
 
Аватар для mittelmabigkeit
 
Регистрация: 18.11.2015
Сообщений: 4
По умолчанию

Конечно же ! Ещё немного поковырявшись, она начала подчиняться.
Благодарю! Низкий поклон вам.

/thread
mittelmabigkeit вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal. Рекурсия. D-Snaker Помощь студентам 1 12.06.2012 11:11
pascal.Рекурсия. kelly Помощь студентам 2 16.12.2011 18:37
Рекурсия [Pascal] <Tyz> Помощь студентам 5 18.12.2010 16:03
Pascal Рекурсия! Korun Помощь студентам 3 16.12.2009 16:50
Рекурсия Pascal HoLToFF Помощь студентам 3 31.03.2009 22:25