Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
отчет мой.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
4.46 Mб
Скачать

Задача 14. Домашние животные

Напишите программу, в окне которой формируется круговая диаграмма, иллюстрирующая результат опроса — ответа на вопрос "Есть ли у вас домашние животные? Какие?" (Рис. 74)

Рис 74

Вывод: В этом задании мы создали круговую диаграмму в которой иллюстрирующая результат опроса — ответа на вопрос "Есть ли у вас домашние животные? Какие?"

Листинг

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

#include "Math.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

#undef PEOPLE

#define ENERGY

#ifdef PEOPLE

#define HB 6

#define OBR

AnsiString Title = "населениеземли";

float datafHB] = {1.25e9,1е9,274е6,216е6,172е6,146еб};

float pr[HB];

AnsiString dTitle[HB] = {"Китай","Индия","США",

"Индонезия","Бразилия","Россия"};

TColor cl[HB] = {clLime, clBlue, clMaroon,

clGreen, clYellow, clTeal};

#endif

#ifdef ENERGY

#define HB 6

#undef OBR

AnsiString Title = "Использованиеэнергии";

float data[HB] = {0.1,1.3,3,22,30,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 ++)

for (j = 0 ; j < 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->TextOutA(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;

x0 = x + R;

y0 = y + R;

a1 = 0;

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->TextOutA(x+50,y,dTitle[i]+ ", " + FloatToStrF(pr[i],ffGeneral,2,2) + "%");

y = y + dy +10;

}

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FormResize(TObject *Sender)

{

Form1->Refresh();

}

//---------------------------------------------------------------------------