Технический форум

Технический форум (http://www.tehnari.ru/)
-   Форум программистов (http://www.tehnari.ru/f22/)
-   -   C++. Программа реализующая построение (http://www.tehnari.ru/f22/t32848/)

babich 06.02.2010 07:25

C++. Программа реализующая построение
 
Доброго времени суток!
Имеется вот такая задача:
"Разработать программу, реализующую следующее построение. Строится заполненный круг радиуса R, затем четыре заполненных круга радиуса R/2, которые удалены от цен¬тра исходного круга на расстояние 2R. Этот процесс применяется к каждому кругу и т. д. Выполнить данное построение с помощью рекурсии, глубина которой определяется условием R≥4."
Уже два дня бьюсь, ничего не получается ((
Помогите, пожалуйста! Реализовать решение необходимо на языке C++ в Borland C 3.1 или в Borland C++ Builder 6. Буду рад любым конструктивным предложениям!

Long Cat 06.02.2010 17:09

Выкладывайте свой код, посмотрим, разберемся.

babich 07.02.2010 07:22

В проекте на C++ Builder 6.0 форма, на которой объект Image с именем Image1 и размерами 500х500. Еще имеется кнопка, при нажатии на которую выполняется следующий код:
Код:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
        int t, a=250, b=250, r=75;
        TCanvas* can = Image1->Canvas;
        can->Ellipse(a+r,b+r,a-r,b-r);
        can->Ellipse(a+r+r+r/2,b+r/2,a+r+r/2,b-r/2);
        can->Ellipse(a-r-r-r/2,b+r/2,a-r-r/2,b-r/2);
        can->Ellipse(a+r/2,b+r+r+r/2,a-r/2,b+r+r/2);
        can->Ellipse(a+r/2,b-r-r-r/2,a-r/2,b-r-r/2);
}

При попытке выделить этот код в отдельную функцию, Image1 с этой функции не виден и, соответственно, ничего не происходит (в смысле выдается ошибка о том, что bcb не в курсе, что такое Image1). Поэтому не могу выполнить условия с рекурсией и так далее.
КАК выделить код в отдельную функцию? :) И еще был бы рад идеям по поводу того, как находить координаты нарисованных кругов и как их закрашивать.
Функция выглядит вот так:
Код:

void five_range(int a, int b, int r) {
        TCanvas* can = Form1->Image1->Canvas;
        can->Ellipse(a+r,b+r,a-r,b-r);
        can->Ellipse(a+r+r+r/2,b+r/2,a+r+r/2,b-r/2);
        can->Ellipse(a-r-r-r/2,b+r/2,a-r-r/2,b-r/2);
        can->Ellipse(a+r/2,b+r+r+r/2,a-r/2,b+r+r/2);
        can->Ellipse(a+r/2,b-r-r-r/2,a-r/2,b-r-r/2);
        five_range(a+2*r,b+2*r,r/2);
}


Long Cat 07.02.2010 13:53

Рекурсивная функция должна получать координаты, радиус, уровень вложенности и объект, на котором нужно рисовать.
Она должна рисовать одну окружность (самую большую) а затем вызывать себя для рисования всех меньших окружностей.

babich 18.02.2010 08:05

Задача сделана и завтра будет сдана, всем спасибо! :))

iluxxxa 12.05.2010 02:29

Ребята пожалуйста. Нужно написать программу с использованием циклов, без массивов

Ввести с клавиатуры 30 действительных чисел (положительных и отрицательных). Определить максимальную длину положительной подпоследовательности.


Часовой пояс GMT +4, время: 16:14.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.