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

Задание 24. Диаграмма

В окне программы Диаграмма (рис. 31) отображается диаграмма, которая иллюстрирует изменение курса доллара. Программа спроектирована так, что, независимо от размера окна, диаграмма располагается в центре окна и занимает большую его часть, даже после того, как пользователь изменит размер окна.

Рис 31

Вывод: Выполняя это задание мы научились создавать диаграммы на форме без помощи каких либо компонентов.

Листинг

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

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

#include <iostream.h>

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

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

float data [ ] = {27.98, 28.01, 27.96, 27.96, 28.11, 28.08,

28.00, 27.98, 28.15, 28.15, 28.11, 27.94,

27.86, 27.88, 27.95, 27.95 } ; AnsiString Title = "Изменениекурсадоллара"; void fastcall TForml::FormPaint(TObject *Sender) { int x,y; // заголовок Canvas->Font->Name = "Tahoma"; Canvas->Font->Size =12; x = (ClientWidth - Canvas->TextWidth(Title)) /2; Canvas->Brush->Style = bsClear; Canvas->TextOutA(x,10,Title); // гистограмма int n; // количествостолбцов int wCol; // ширинастолбца #define MC 5 // расстояниемеждустолбикамипогоризонтали n = sizeof(data) / sizeof(float); wCol = (ClientWidth - (n - 1)*MC - 20) / n; x = 10; у = ClientHeight - 20; // найтиминимальноеимаксимальноезначениеданных int min,max; // индексминим, имаксим, элемента min = 0 ; // пустьпервыйэлементминимальный max = 0 ; // пустьпервыйэлементмаксимальный for (int i = 1; i < n; i++) if (datati] < data[min]) min = i; Графика if (data[i] > data[max]) max = i; /* Еслиотклонениезначенийрядаотсреднегозначения незначительное,тодиаграммаполучаетсяненаглядной. В этом случае можно построить не абсолютные значения, а отклонения от минимального значения ряда. */ bool frmin = true; // true - отсчитывать от минимального int h; // высотастолбика // максимальному значению соответствует // столбик высотой ClientHeight - 90 Canvas->Font->Size -= 2; for ( int i = 0; i < n; i++) { if (I frmin) h = (ClientHeight - 90) * data[i]/data[max]; else /* Отсчитывать от минимального значения. Минимальное значение отобразим столбиком высотой 10 пикселов */ h = (ClientHeight - 90) * (data[i] - data[min])/(data[max] - data[min]) + 10; Canvas->Brush->Style = bsSolid; Canvas->Brush->Color = clLime; Canvas->Rectangle(x,y,x+wCol,y-h); // столбик // подписьданных AnsiString st; st = FloatToStrF(data[i],ffGeneral,5,2); Canvas->Brush->Style = bsClear,- // область вывода // текста - прозрачная 90 Часть 1.Примеры и задачи Canvas->TextOutA(x,y-h-20,st); х = х + wCol + МС; // изменился размер окна void fastcall TForml::FormResize(TObject *Sender) { Forml - > Refresh() ; // обновить содержимое окна

Задание 25 График В окне программы отображается график изменения курса доллара (рис. 32). Следует обратить внимание, что на графике отображаются не значения, а отклонение от минимального значения ряда. Это делает график наглядным даже в том случае, если разброс значений (разница между минимальным и максимальным значениями) ряда незначительный.

Рис 32

Вывод: Выполняя это задание мы научились создавать графики на форме без помощи каких либо компонентов.

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

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

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

float data[] = {27.98, 28.01, 27.96, 27.96, 28.11, 28.08,

28.00, 27.98, 28.15,28.15, 28.11, 27.94, 27.86, 27.88, 27.95,

27.95};

AnsiString Title = "изм. курсаадоллара";

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

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

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

void __fastcall TForm1::FormPaint(TObject *Sender)

{

int n; // количество точек

int x,y; // координаты точки

int dx; // шаг по X

int x0,y0; // координатылевого нижнего угла области

// построения график

//заголовок

Canvas->Font->Name = "Tahoma";

Canvas->Font->Size = 12;

x0 =( ClientWidth-Canvas->TextWidth(Title))/2;

//х0 = (ClientWidth->Canvas->TextWidth(Title)) /2;

Canvas->Brush->Style = bsClear;

Canvas->TextOutA(x0,10,Title);

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

// найти минимальное и максимальное значение данных

int min,max; // индекс миним. и максим, элемента

min = 0 ; // пусть первый элемент минимальный

max = 0 ; // пусть первый элемент максимальный

for (int i = 1; i < n; i++)

{

if (data[i] < data[min]) min = i;

if (data[i] > data[max]) max = i;

}

bool frmin = true;

dx= (ClientWidth - 20) / (n-1);

Canvas->Font->Size -= 2;

Canvas->Pen->Color = clGreen;

Canvas->Pen->Width = 1;

x0 = 10;

y0 = ClientHeight - 10;

x = x0;

dx= (ClientWidth - 20) / (n-1);

for ( int i = 0; i < n; i++)

{

if (! frmin)

y = y0 + (ClientHeight- - 90) * data [i]/data[max] ;

else

y = y0-(ClientHeight - 90) * (data[i] -

data[min])/(data[max] - data[min])-10;

Canvas->Rectangle(x-2,y-2,x+2,y+2);

if ( i != 0)

Canvas->LineTo(x,y);

if ( ( i == 0) || (data[i] != data[i-1]))

{

AnsiString st;

st = FloatToStrF(data[i] , ffGeneral,5,2) ;

Canvas->Brush->Style = bsClear;

Canvas->TextOutA(x,y-20,st);

}

Canvas->MoveTo(x,y);

x += dx;

}

}

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

void __fastcall TForm1::FormResize(TObject *Sender)

{

Form1->Refresh();

}

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