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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2010, 20:26   #1
svobodys
Пользователь
 
Регистрация: 07.10.2008
Сообщений: 42
Вопрос C++. Добавление сносок к диаграмме.

ФОРМУЛИРОВКА ЗАДАЧИ
Разработать приложение, выводящее на экран круговую диаграмму численности населения стран мира. В качестве исходных данных для построения диаграммы использовать введенные значения: количество стран, названия стран, численность населения каждой страны.
=-=-=-=-=-=-=-=-=-=-
Программа готова, но никак не разберусь с одним. Когда население стран координально различаются, например Китай 1,5 миллиарда и Андорра 100 тысяч. На диаграмме сектор с Андоррой не виден. И названия стран сливаются. нужно сделать какие то сноски. Не знаю как(
И кнопку очистки главной формы со странами и населением не знаю как на С++ сделать.
=-=-=-=-=-=-=-
svobodys вне форума Ответить с цитированием
Старый 20.04.2010, 20:26   #2
svobodys
Пользователь
 
Регистрация: 07.10.2008
Сообщений: 42
По умолчанию

Код:
Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#include <math.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
//==============================================
//ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ
//==============================================
float pi=3.1415;       //значение константы "пи"
const max=190;         //максимальное число стран
int contries[max];     //массив населений стран
int colors[max];       //массив цветов диаграммы
AnsiString names[max]; //имена стран
int cnt;               //количество стран
BOOL start=false;      //показатель готовности рисунка

TForm1 *Form1;

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//=======================================================
//пользовательская функция рисования диаграммы
void DrawDiagramm (int count,      //количество стран
                   int per[],      //населения
                   int cls[],      //цвета
                   TCanvas *c,     //место вывода
                   int size,       //радиус диаграммы
                   AnsiString n[]) //названия стран
{
  int sum=0;     //общее число населения
  for (int i=0; i<count; i++)
    sum=sum+per[i];
  float angle=0; //угол сектора
  //рисуем основу - круг
  c->Ellipse(0,0,size*2,size*2);
  //рисуем сектора
  for (int i=0; i<count; i++)
  {
    angle=angle+2*pi*per[i]/sum;
    c->MoveTo(size,size);
    c->LineTo(size+size*sin(angle),
              size-size*cos(angle));
    c->Brush->Color=cls[i];
    c->FloodFill(size+(size-10)*sin(angle-0.1),
                 size-(size-10)*cos(angle-0.1),
                 clBlack, fsBorder);
  }
  angle=0;
  //подписываем страны
  c->Brush->Color=clWhite;
  for (int i=0; i<count; i++)
  {
    angle=angle+2*pi*per[i]/sum;
    c->TextOutA(size+(size-20)*sin(angle-0.2),
                size-(size-20)*cos(angle-0.2),
                n[i]);
  }
}

// при изменении кол-ва стран
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
 //меняем количество строк
 StringGrid1->RowCount=StrToInt(Edit1->Text)+1;
}

//---------------------------------------------------------------------------
//на запуске приложения
void __fastcall TForm1::FormActivate(TObject *Sender)
{
 StringGrid1->Cells[0][0]="Страна";
 StringGrid1->Cells[1][0]="Население";
 //формируем массив цветов
 for (int i=0; i<max; i++)
  colors[i]=random(65535);
}
//---------------------------------------------------------------------------
//кнопка "нарисовать"
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  //считываем данные, проверяя ошибки
  BOOL err=false;
  int s;
  try
   {
    for(int i=1; i<StringGrid1->RowCount; i++)
    {
    //считываем данные в массив contries
      contries[i-1]=StrToInt(StringGrid1->Cells[1][i]);
    //считываем данные в массив names
      names[i-1]=StringGrid1->Cells[0][i];
    }
   }
  catch(...)
    {err=true;}
  if (!err)
  { //если ошибок не найденно
  Label1->Refresh(); //обновляем место вывода
                     //минимальная сторона окна вывода
                     //будет взята за размер
                     //(диаграмма должна вписываться в размеры
                     //окна вывода)
  if (Label1->Height<=Label1->Width)
    s=Label1->Height;
  else
    s=Label1->Width;
  //рисуем диаграмму
  DrawDiagramm(StringGrid1->RowCount-1,contries, colors,
               Label1->Canvas,s/2,names);
  //показываем готовность рисунка;
  start=true;
  }
  //в случае, если найдены ошибки...
  else
   ShowMessage("Ошибка ввода!");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormResize(TObject *Sender)
{
 if (start) //если рисунок готов
            //запускаем таймер
  Timer1->Enabled=1;
}
//---------------------------------------------------------------------------
//работа таймера : чтобы объекты успели обновиться необходимо время:
//таймер обновит рисунок через 10мс после изменения размера формы
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
if (start) //если рисунок готов
 {
  Button1Click(Sender);
  Timer1->Enabled=0;
 }
}
//---------------------------------------------------------------------------

Последний раз редактировалось Stilet; 21.04.2010 в 11:02.
svobodys вне форума Ответить с цитированием
Старый 21.04.2010, 11:05   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Елки моталки... А чего бы не кинуть на форму TChart и не построить в нем диаграмму?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.04.2010, 11:35   #4
svobodys
Пользователь
 
Регистрация: 07.10.2008
Сообщений: 42
По умолчанию

второй день в C++ просто(

Как на эту форму кинуть? подскажите пожалуйста

Последний раз редактировалось Stilet; 21.04.2010 в 16:41.
svobodys вне форума Ответить с цитированием
Старый 21.04.2010, 16:43   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Не знаю какой у тя Борланд у меня вот так:
Изображения
Тип файла: jpg Безымянный.JPG (92.1 Кб, 81 просмотров)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.04.2010, 23:17   #6
svobodys
Пользователь
 
Регистрация: 07.10.2008
Сообщений: 42
По умолчанию

Не получается перекинуть в TChart. На пишите пожалуйста подробнее.

Последний раз редактировалось svobodys; 22.04.2010 в 10:04.
svobodys вне форума Ответить с цитированием
Старый 22.04.2010, 11:27   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Нечего кросспостить. Ато забаню в следующий раз
Цитата:
На пишите пожалуйста подробнее.
1) File-New-Form C++ Builder
2) View-Tool Palette
3) На открывщейся Tool Palette в разделе TeeChart Std кликаешь по TChart. Он появляется на форме.
4) На форме кликай по нему двойным кликом появляется его дизайнер
5) Кнопкой Add добавляешь график - выбери круговую диаграмму

Все. Появился график. Теперь пиши код, заполнения графика, и получишь красоту.

подробности с примерами как его наполнять программно получишь в хелпе набрав в поиске TChart
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двойная шкала на диаграмме mephist Microsoft Office Excel 1 24.03.2010 00:13
Обращение к диаграмме в макросе ruavia3 Microsoft Office Excel 3 14.07.2009 18:04
Ряды в диаграмме maxic Microsoft Office Excel 5 26.05.2009 14:44
Вопрос по диаграмме Андрей K. Microsoft Office Excel 3 06.03.2009 10:49
Диаграмма в диаграмме Jevich Microsoft Office Excel 6 28.01.2009 00:29