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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.08.2015, 19:07   #1
Dima-91
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 198
По умолчанию Круговая диаграмма С++, помощь с кодом

По примеру написал код круговой диаграммы.Жирным выделил, в чем проблема, т.е. после #endif все то что сверху не видно, а оно необходимо для нижней части, если правильно понимаю...
Код:
#undef PEOPLE //от сюда
#define ENEGRY

#ifdef PEOPLE 
#define HB 6
#define OBR
AnsiString Title = "Население земли";
float [HB] = { 1.25e9,1e9,274e6,216e6,172e6,146e6};
float pr[HB];
AnsiString dTitle[HB] = {"Китай","Индия","США","Индонезия","Бразилия","Россия"};
TColor cl[HB] = {clLime,clBlue,clMaroon,clGreen,clYellow,clTeal};
#endif
#ifdef ENERGY
#define HB 6
#under OBR
AnsiString Title = "Использование энергии";
float data[HB] = {0.5,2.5,7,23,24,40};
float pr[HB];
AnsiString dTitle[HB] = {"Другие","Гидро электростанции","Атомные электростанциии",
"Газ","Уголь","Нефть"};
TColor cl[HB] = {clLime,clBlue,clPurple,clSkyBlue,clYellow,clTeal};
#endif //до сюда

#define R 80
#define D 160
#define TORAD 0.0174532




//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
	int i,j;
	float bd;
	AnsiString bt;
	TColor bc;
	for (i = 0; i <	HB; i++) // E2451 Undefined symbol 'HB'
  
	{
		for (j = 0; i < HB-1; j++)
		{
			if (data[j+1]<data[j])
			{
				bd = data[j];
				data[j] = data[j+1];
				data[j+1] = bd;
				bt = dTitle[j];
				dTitle[j] = dTitle[j+1];
				dTitle[j+1] = bt;
				bc = cl[j];
				cl[j] = cl[j+1];
				cl[j+1] = bc;
			}
		}
	}
#ifdef OBR
float sum = 0;
for (i = 0; i <HB; i++)
	{
		sum+=data[i];
	}
for (i = 0; i < HB; i++)
	{
		pr[i] = (data[i]-sum)*100;
	}
 #else
 for (i = 0; i < HB ; i++)
 {
	pr[i] = data[i];
 }
#endif

}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormPaint(TObject *Sender)
{
int x,y;
int i;
Canvas->Font->Name = "Tahoma";
Canvas->Font->Size = 12;
x = (ClientWidth - Canvas->TextWidth(Title))/2;
Canvas->Brush->Style = bsClear;
Canvas->TextOutW(x,15,Title);

x = (ClientWidth -D)/2 -R;
y = 15+Canvas->TextHeight(Title) + 20;
int x0,y0;
int x1,y1;
int x2,y2;
int a1,a2;

//int n;
//n = sizeof(data)/sizeof(float);

x0 = x+R;
y0 = y+R;

a1 = 0;
//Canvas->Pen->Style = psClear;
for (int i = 0; i < HB; i++)
	{
		if (i != HB-1)
		{
			a2=(a1+3.6*pr[i]);
		}
		else
		a2 = 359;
		x1 = x0+R*cos(a2*TORAD);
		y1 = y0+R*sin(a2*TORAD);

		x2 = x0+R*cos(a1*TORAD);
		y2 = y0+R*sin(a1*TORAD);
	if (abs(a1-a2)<=6 )
	{
		Canvas->Pen->Style = psClear;
	}
	else
	Canvas->Pen->Style = psSolid;

	Canvas->Brush->Color = cl[i];
	Canvas->Pie(x,y,x+D,y+D,x1,y1,x2,y2);
	a1 = a2;
	}
	Canvas->Font->Size -=2;
	int dy = Canvas->TextHeight("a");
	x = x+D+40;
	y=y+20;
	for (i = HB-1; i >= 0; i--)
	{
		Canvas->Brush->Color = cl[i];
		Canvas->Rectangle(x,y,x+40,y+dy);
		Canvas->Brush->Style = bsClear;
		Canvas->TextOutW(x+50,y,dTitle[i] + ", " + FloatToStrF(pr[i],ffGeneral,2,2) +"%");
		y = y +dy+10;
	}
}

Последний раз редактировалось Dima-91; 18.08.2015 в 21:03.
Dima-91 вне форума Ответить с цитированием
Старый 18.08.2015, 19:53   #2
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

А почему бы не использовать компонент TChart, тогда с canvas морочиться не придется...
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 18.08.2015, 20:11   #3
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

Код:
#ifdef ENERGY
#define HB 6
#under OBR <= undef нужно
это как минимум, а вообще очень сомнительный код....
1) убрать использование условных директив.. они тут ну совсем не к месту
2) сделать код чище, выделить функции отдельные
3) альтернатива 1 и 2 - перейти на TChart, как советовали выше
GreenWizard вне форума Ответить с цитированием
Старый 18.08.2015, 21:02   #4
Dima-91
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 198
По умолчанию

Иду по книге, пока изучаю как есть. Исправил #undef не помогло. В h файл думал нужно поместить ту часть кода, тоже не верно.

Последний раз редактировалось Dima-91; 18.08.2015 в 21:08.
Dima-91 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Круговая диаграмма 18904590 Microsoft Office Excel 3 25.09.2013 20:53
Chart, круговая диаграмма _ZixeL_ Общие вопросы Delphi 8 17.12.2012 06:55
круговая диаграмма в паскале vbchristy46 Помощь студентам 0 02.07.2010 17:09
Вторичная круговая диаграмма fgbcdf Microsoft Office Excel 0 17.05.2010 11:21
Круговая диаграмма по годам wld666 Microsoft Office Excel 4 11.01.2010 13:47