Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
1 / 1 / 1
Регистрация: 08.06.2009
Сообщений: 37

основное с Tchart

20.05.2010, 20:40. Показов 3389. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер.

Для курсовой работы необходимо создать программу,которая строила два графика в двух компонентах Tchart:

1-входную функцию,зависящую от частоты w=2*пи*Т

заданную u=1-e^(-(2t/T)^2))sin(4*пи*t/T),при t [0,t/2]
u=e^(-(8t/T-4)) при t [T/2,T]

2-построить график U на всем периоде ,умноженную на функцию K(w)
https://www.cyberforum.ru/atta... 1274373525
вот ,мужики,помогите ,пожалуйста,скоро сдавать,а времени учить с++ нету.

Начал читать про Tchart,а нигде не написано какой функцией просто строить график-везде сверхсложные задачи и тд(((((((

вот мой код,подскажите хотя бы с чего начать?


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <math.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 
double R,C,w,t;
double T=0.005;
 
double U1(double t,double T)
{
double result,temp;
temp = pow(2*t/T,2);
result=1-pow(2.718,-temp)*sin(4*3.14*t/T);
return result;
}
 
double U2(double t,double T)
{
double result;
result=pow(2.718,-((8*t/T)-4)) ;
return result;
}
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
double U;
float s;
 
if (t <T/2 ){
U=U1(t,T);
}
else {
U=U2(t,T);
}
 
 
R=StrToFloat(Edit1->Text);
C=StrToFloat(Edit2->Text);
w=StrToFloat(Edit3->Text);
 
}
//---------------------------------------------------------------------------
Миниатюры
основное с Tchart  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.05.2010, 20:40
Ответы с готовыми решениями:

Tchart, как получить координату курсора по tchart?
На график наведен курсор, Tchart позволяет получить координату куда указывает курсор? с точностью все понятно, от разрешения зависит

Как закрыть или скрыть основное окно и открыть дочернее, и как потом закрыть дочернее окно и открыть основное
Здравствуйте, передо мной возникла проблема, с которой я не могу справиться. Суть проблемы в том, что мне необходимо, чтобы по клику по...

Основное меню
При показе одной формы в другой пропадает основное меню 2-ой формы. Form2-&gt;Parent = Form1-&gt;Panel1; Нужно оставить оба меню, слияние...

13
221 / 135 / 48
Регистрация: 12.04.2010
Сообщений: 248
20.05.2010, 20:57
В хелпе очень прилично описан компонент TChart...
В принципе там все просто.
Кидаешь его на форму, тыкаешь 2 раза на нем. Добавляешь набор данных Series. (Там будет кнопочка Add)
И в принципе все. Дальше просто добавляешь данные в график. Например для функции sin(x) будет как-то так.
C++
1
2
3
4
5
6
7
void __fastcall TForm1::Button1Click(TObject *Sender)
{
     for(float t = 0;t < 2*M_PI; t += M_PI/180)
     {
          Chart1->Series[0]->AddY(sin(t));
     }
}
0
1 / 1 / 1
Регистрация: 08.06.2009
Сообщений: 37
20.05.2010, 21:02  [ТС]
AddY(sin(t))

строит график от одной переменной?просто вроде же надо строить отдвух

AddXY-както так,или я неправильно понял?
0
221 / 135 / 48
Регистрация: 12.04.2010
Сообщений: 248
20.05.2010, 21:18
Все эти функции НЕ строят графиков, они добавляют данные в набор.
AddY -добавляет точку с ее параметром по оси Y и по оси X с последним X+1.
AddXY - добавляет точку с координатами передаваемыми в параметрах к ней.
Т.е. вполне можно написать AddXY(t, U(t,T)); ,где U(t,T) - твоя функция

Для синуса
C++
1
Chart1->Series[0]->AddXY(t,sin(t));
0
1 / 1 / 1
Регистрация: 08.06.2009
Сообщений: 37
20.05.2010, 22:34  [ТС]
А чтобы оба сигнала в одном чарте были надо просто работать только с Chart1->....?
0
221 / 135 / 48
Регистрация: 12.04.2010
Сообщений: 248
21.05.2010, 00:10
Да...
Только нужно добавить 2 набора данных и обращаться к ним
Chart1->Series[0]->...
Chart1->Series[1]->...
0
1 / 1 / 1
Регистрация: 08.06.2009
Сообщений: 37
21.05.2010, 12:04  [ТС]
Вроде всё должно работать,ошибок никаких не пишет,прога работает,а как нажимаю кнопку,она вылетает(((помоги ,пожалуйста(((
я в программировании ноль.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
void __fastcall TForm1::Button1Click(TObject *Sender)
{
double U;
float s;
 
    if  (t  <T/2 ){
    U=U1(t,T);
    }
    else {
    U=U2(t,T);
    }
 
 
R=StrToFloat(Edit1->Text);
C=StrToFloat(Edit2->Text);
w=StrToFloat(Edit3->Text);
 
 double t_min = -10;  // Начало интервала
  double t_max = 10 ;  // Конец интервала
  double dt    = 0.1;  // Шаг
  double u     = 0  ;
 
 
  for(double t = t_min; t <= t_max; t += dt){
    u =   U*(2*R*w*w*w*C*C*C+R*R*w*w*w*w*C*C*C*C+4*R*w*C+5*R*R*w*w*C*C+2*R*R*R*w*w*w*C*C*C+1)/w*C*R*(2*w*w*C*C+R*w*w*w*C*C*C+2+4*R*w*C+2*R*R*w*w*C*C) ;
 
   Chart1->Series[0]->AddXY(t,u);
  }
 
   double x_min = -10;  // Начало интервала
  double x_max = 10 ;  // Конец интервала
  double dx    = 0.1;  // Шаг
  double y     = 0  ;
 
 
  for(double x = x_min; x <= x_max; x += dx){
 
   Chart1->Series[1]->AddXY(t,U);
  }
 
 
 }
0
1 / 1 / 1
Регистрация: 08.06.2009
Сообщений: 37
21.05.2010, 12:08  [ТС]
вот такую беду пишет((
Миниатюры
основное с Tchart  
0
221 / 135 / 48
Регистрация: 12.04.2010
Сообщений: 248
21.05.2010, 21:16
Нужно добавить 2 набора данных...
Тебе об этом и говорят.
0
1 / 1 / 1
Регистрация: 08.06.2009
Сообщений: 37
21.05.2010, 21:54  [ТС]
сорри,а что за два набора?
а почему он мне ошибку не выдает ,а только при запуске программы вырубает?
0
221 / 135 / 48
Регистрация: 12.04.2010
Сообщений: 248
22.05.2010, 22:59
Цитата Сообщение от uggway Посмотреть сообщение
Кидаешь его на форму, тыкаешь 2 раза на нем. Добавляешь набор данных Series. (Там будет кнопочка Add)
И в принципе все. Дальше просто добавляешь данные в график. Например для функции sin(x) будет как-то так.
Так вот кнопочку Add нужно нажать 2 раза.

Цитата Сообщение от Capitan-vor Посмотреть сообщение
а почему он мне ошибку не выдает ,а только при запуске программы вырубает?
Потому, что ты обращаешься к элементу массива Series, который не существует. А в коде ошибок нет.


Можно добавить наборы данных вручную...
C++
1
2
TLineSeries * cs = new TLineSeries(Chart1);//тип графика - линии
Chart1->AddSeries(cs);
1
1 / 1 / 1
Регистрация: 08.06.2009
Сообщений: 37
24.05.2010, 21:48  [ТС]
вроде всё сделал,правда переделал,так чтобы было в одном чарте.всё работает да только не так как надо,помоги разобраться,плиз)))!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include <vcl.h>
#include <math.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 
double R,C,K,c,r,w,t;
double T;
 
double U1(double t,double T)
{
double result,temp;
temp = pow(2*t/T,2);
result=1-pow(2.718,-temp)*sin(4*3.14*t/T);
return result;
}
 
double U2(double t,double T)
{
double result;
result=pow(2.718,-((8*t/T)-4))  ;
return result;
}
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
 
 
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 
 
    R=StrToFloat(Edit1->Text);
 K=StrToFloat(Edit2->Text);
 w=StrToFloat(Edit3->Text);
 
 
 
 
 
 
      double U;
 
 
  T=2*3.14/w;
 
 //double x_min = -10;  // Начало интервала
 // double x_max = 10 ;  // Конец интервала
 // double dx    = 0.1;  // Шаг
 
  double u     ;
 
 
   double t_min = -10;  // Начало интервала
  double t_max = 10 ;  // Конец интервала
  double dt    = 0.1;  // Шаг
 
    C=c*0.000001   ;
    R=r*1000;
 
  for(double t = t_min; t <= t_max; t += dt)
  {
 
 
if  (t  <T/2 )
    {
    U=U1(t,T);
    }
    else {
    U=U2(t,T);
    }
   Chart1->Series[0]->AddXY(t,U);
 
    u =   U*(2*R*w*w*w*C*C*C+R*R*w*w*w*w*C*C*C*C+4*R*w*C+5*R*R*w*w*C*C+2*R*R*R*w*w*w*C*C*C+1)/w*C*R*(2*w*w*C*C+R*w*w*w*C*C*C+2+4*R*w*C+2*R*R*w*w*C*C) ;
 
  Chart1->Series[1]->AddXY(t,u);
 
  }
 
 
 
 }
//---------------------------------------------------------------------------
 
 
 
 
 
 
void __fastcall TForm1::Button2Click(TObject *Sender)
{
   Series1 -> Clear();
   Series2 -> Clear();
}
//---------------------------------------------------------------------------
0
221 / 135 / 48
Регистрация: 12.04.2010
Сообщений: 248
25.05.2010, 12:47
C++
1
2
    C=c*0.000001   ;
    R=r*1000;
У тебя не инициализированны значения c и r... Они не вводятся и не указанны ранее, но в вычислениях учавствуют. Вероятно в этом и ошибка.
0
1 / 1 / 1
Регистрация: 08.06.2009
Сообщений: 37
25.05.2010, 17:17  [ТС]
вообщем,я всё исправил и все работает,единственное что-у меня не правильно считатается мое выражение

C++
1
2
double Y= (C*R*w*(C*C*C*R*w*w*w+2*C*C*R*R*w*w+2*C*C*w*w+4*C*R*w+2)) ;
   Mnoj= (C*C*C*C*R*R*w*w*w*w+2*C*C*C*R*R*R*w*w*w+2*C*C*C*R*w*w*w+5*C*C*R*R*w*w+4*C*R*w+1)*pow(Y,-1);
только при моих значениях это выражение должно быть равно 1.19,а равно 1.02!!не знаете в чем может быть проблема?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.05.2010, 17:17
Помогаю со студенческими работами здесь

Destruct: основное назначение
разбираю такой пример из книги class Destruct { public int x; public Destruct(int i) { x = i; } -Destruct() {

Посоветуйте основное железо
Доброго времени суток, уважаемые форумчане. Хочу спросить совета по теме выбора контроллера. Собственно задача: есть два постоянных...

Основное достоинство ассоциативной памяти?
Какое основное преимущество ассоциативной по множеству КЭШ-памяти?

STM32F030 bootloader и основное приложение
Написал boottooder для STM32F030. Boottooder умеет шить флешь микропроцессора через RS-485. После зашивания, boottooder делает прыжок по...

Основное отличие WordPress от Joomla
Доброго времени суток! Возник такой вопрос может кто то из вас знает ответ?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru