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

Как правильно создать проект исходя из данного исходного кода программы?

28.01.2016, 16:00. Показов 1012. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дан пример кода программы состоящей из 5 файлов( regres.cpp, MainInterpol.h, MainInterpol.cpp, RezultInterpol.h, RezultInterpol.cpp).
Мой вопрос состоит в следующем: каким образом создавать проект и данные файлы в VS15 community?


Исходный код программы:
regres.cpp
Кликните здесь для просмотра всего текста
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
#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
USEFORM("MainInterpol.cpp", Form1);
USEFORM("RezultInterpol.cpp", Form2);
//Функция, с которой начинается выполнение программы
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize(); //Инициализация приложения
Application->Title = "Regres"; //Задание заголовка
Application->CreateForm(__classid(TForm1), &Form1); // Создание формы
Application->Run();
// Запуск обработчика событий и визуализация компонентов
} // Обработчик исключений Exception
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...) // Обработчик всех исключений
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
}

MainInterpol.h
Кликните здесь для просмотра всего текста
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
//Задание стражей включения, обеспечивающих дублирования заголовочного файла
#ifndef MainInterpolH
#define MainInterpolH
//Подключение заголовочных файлов
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Chart.hpp>
#include <ExtCtrls.hpp>
#include <TeEngine.hpp>
#include <TeeProcs.hpp>
#include <Grids.hpp>
#include <Buttons.hpp>
#include <ComCtrls.hpp>
#include <Graphics.hpp>
#include <Series.hpp>
//Объявление класса формы
class TForm1 : public TForm
{
__published: // Объявление визуальных компонентов на форме
TPanel *Panel1;
TPanel *Panel2;
TChart *Chart1;
TGroupBox *GroupBox1;
TStringGrid *StringGrid1;
TLabel *Label1;
TImage *Image1;
TBitBtn *BitBtn1;
TBitBtn *BitBtn2;
TLabel *Label2;
TEdit *Edit1;
TUpDown *UpDown1;
TPointSeries *Series1;
TLineSeries *Series2;
TLabeledEdit *LabeledEdit1;
TLabeledEdit *LabeledEdit2;
TLineSeries *Series3;
TLineSeries *Series4;
//Объявление обработчиков событий
void __fastcall FormCreate(TObject *Sender);
void __fastcall UpDown1Click(TObject *Sender, TUDBtnType Button);
void __fastcall BitBtn1Click(TObject *Sender);
private: // User declarations
public: // User declarations
double k, n, d, r;
__fastcall TForm1(TComponent* Owner);
};
extern PACKAGE TForm1 *Form1;
#endif

MainInterpol.cpp
Кликните здесь для просмотра всего текста
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#include <vcl.h>
#pragma hdrstop
#include "RezultInterpol.h"
#include "MainInterpol.h"
#include "math.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//Определение конструктора формы
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner), k(0.0), n(0.0), r(0.0), d(0.0)
{
}
//Определение инициализации формы
void __fastcall TForm1::FormCreate(TObject *Sender)
{
//Задание полей заголовка таблицы
StringGrid1->Cells[0][0] = " C";
StringGrid1->Cells[1][0] = " t";
}
//Определение обработчика нажатия на кнопку для изменения количества строк
//таблицы
void __fastcall TForm1::UpDown1Click(TObject *Sender, TUDBtnType Button)
{
StringGrid1->RowCount = UpDown1->Position + 1;
}
//Определение обработчика кнопки расчета и построения графиков
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
//Инициализация переменных необходимых для решения задачи кинетики
d = 0.0;
int i, reg_up(0), reg_down(0);
double *y, *x, s1(UpDown1->Position - 1),
s2(0.0), s3(0.0), s4(0.0), s5(0.0), s6(0.0), ca, cb, cc, t;
//Очистка графиков после предыдущего расчета
Series1->Clear();
Series2->Clear();
Series3->Clear();
Series4->Clear();
try
{
//Создание в динамической памяти массива для хранения экспериментальных данных
y = new double[UpDown1->Position - 1];
x = new double[UpDown1->Position - 1];
if(!y || !x) throw "НЕТ свободной памяти";
//Задание начальных значений концентраций
ca = StringGrid1->Cells[0][1].ToDouble();
cb = LabeledEdit1->Text.ToDouble();cc = LabeledEdit2->Text.ToDouble();
//Проверка входных данных на допустимость значений
if(!ca || cb < 0.0 || cc < 0.0)
throw "Начальные концентрации компонентов должны быть больше 0";
for(i = 0; i < UpDown1->Position - 1; i++)
{
if(StringGrid1->Cells[0][i + 1].ToDouble() > StringGrid1->Cells[0][i + 2].ToDouble())
reg_down++;
else reg_up++;
if(StringGrid1->Cells[0][i + 1].ToDouble() == StringGrid1->Cells[0][i + 2].ToDouble())
throw "Концентрация в соседних точках должна быть различна";
if(StringGrid1->Cells[1][i + 1].ToDouble() >= StringGrid1->Cells[1][i + 2].ToDouble())
throw "Нарушение последовательности ввода времени";
if(StringGrid1->Cells[1][i+1].ToDouble()< 0||StringGrid1->Cells[0][i + 1].ToDouble()<0)
throw "Время и концентрация не могут быть отрицательными";
}
//Расчет значений локальных переменных, необходимых для решения задачи
for(i = 0; i < UpDown1->Position - 1; i++)
{
y[i] = log(fabs(StringGrid1->Cells[0][i + 2].ToDouble() –
StringGrid1->Cells[0][i + 1].ToDouble()) /
(StringGrid1->Cells[1][i + 2].ToDouble() –
StringGrid1->Cells[1][i + 1].ToDouble()));
x[i] = log(StringGrid1->Cells[0][i + 1].ToDouble());
s2 += x[i]; s3 += y[i];
s4 += x[i] * x[i];
s5 += x[i] * y[i];
s6 += y[i] * y[i];
}
//Расчет константы скорости реакции, порядка реакции, коэффициента корреляции
k = exp((s3 * s4 - s2 * s5) / (s1 * s4 - s2 * s2));
n = (s1 * s5 - s2 * s3) / (s1 * s4 - s2 * s2);
r = (s1 * s5 - s2 * s3) / sqrt((s1 * s4 - s2 * s2) * (s1 * s6 - s3 * s3));
//Построение графиков и расчет концентраций компонентов реакции
for(int i = 1; i <= UpDown1->Position; i++)
{
Series1->AddXY(StringGrid1->Cells[1][i].ToDouble(),
StringGrid1->Cells[0][i].ToDouble());
if(ca < 0) throw "Модель невозможно описать линейной регрессией";
if(i == 1)
{
Series2->AddXY(StringGrid1->Cells[1][i].ToDouble(), ca );
Series3->AddXY(StringGrid1->Cells[1][i].ToDouble(), cb );
Series4->AddXY(StringGrid1->Cells[1][i].ToDouble(), cc );
}
else
{
t = StringGrid1->Cells[1][i].ToDouble() - StringGrid1->Cells[1][i - 1].ToDouble();
Series3->AddXY(StringGrid1->Cells[1][i].ToDouble(), cb = cb + k * pow(ca, n) * t);
Series4->AddXY(StringGrid1->Cells[1][i].ToDouble(), cc = cc + k * 2*pow(ca, n)*t);if(reg_down > reg_up)
Series2->AddXY(StringGrid1->Cells[1][i].ToDouble(), ca =ca-k*pow(ca, n) * t);
else
Series2->AddXY(StringGrid1->Cells[1][i].ToDouble(), ca =ca+k*pow(ca, n) * t);
}
//расчет дисперсии
d += pow(StringGrid1->Cells[0][i].ToDouble() - ca, 2);
}
//Создание формы отображения результатов
Application->CreateForm(__classid(TForm2), &Form2);
//Отображение формы
Form2->ShowModal();
delete[]y;
delete[]x;
}
catch(char*str)
{
Series1->Clear();
Series2->Clear();
Series3->Clear();
Series4->Clear();
// Вывод сообщения об ошибке
Application->MessageBox(str, "Ошибка", MB_ICONERROR | MB_OK);
}
catch(EConvertError&)
{
// Вывод сообщения об ошибке
Application->MessageBox("Не правильный тип данных", "Ошибка",
MB_ICONERROR | MB_OK);
delete[]y;
delete[]x;
}
catch(...)
{
// Вывод сообщения об ошибке
Application->MessageBox("НЕ известная ошибка", "Ошибка",
MB_ICONERROR | MB_OK);
}
}

RezultInterpol.h
Кликните здесь для просмотра всего текста
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
#ifndef RezultInterpolH
#define RezultInterpolH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Buttons.hpp>
#include <ExtCtrls.hpp>//---------------------------------------------------------------------------
class TForm2 : public TForm
{
__published: // IDE-managed Components
TPanel *Panel1;
TGroupBox *GroupBox2;
TLabel *Label3;
TLabel *Label4;
TEdit *Edit2;
TEdit *Edit3;
TLabel *Label1;
TEdit *Edit1;
TLabel *Label2;
TEdit *Edit4;
TBitBtn *BitBtn1;
void __fastcall FormShow(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm2(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm2 *Form2;
//---------------------------------------------------------------------------
#endif

RezultInterpol.cpp
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <vcl.h>
#pragma hdrstop
#include "MainInterpol.h"
#include "RezultInterpol.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
}
//Определение обработчика отображения формы
void __fastcall TForm2::FormShow(TObject *Sender)
{//Вывод результатов расчета
Edit2->Text = FloatToStrF(Form1->n, ffGeneral, 4, 4);
Edit3->Text = FloatToStrF(Form1->k, ffGeneral, 4, 4);
Edit1->Text = FloatToStrF(Form1->d, ffGeneral, 4, 4);
Edit4->Text = FloatToStrF(Form1->r, ffGeneral, 4, 4);
}

Доп инфа:
Кликните здесь для просмотра всего текста
Программа состоит из двух форм (окон), представленных на рисунках 4 и
5 соответственно и позволяющих вводить начальные данные и отображать
результаты расчета. Программа включает пять исходных файлов программы:
regres.cpp, MainInterpol.h, MainInterpol.cpp, RezultInterpol.h, RezultInterpol.cpp.
Ниже приведен состав файлов с подробными комментариями.
Графический интерфейс включает следующие классы визуальных
компонентов: формы TForm, изображения TImage, панели TPanel, группы
элементов TGroupBox, метки TLabel, однострочный редактор текста с меткой
TLabeledEdit, график TChart, кнопки TButton, компонент для ввода и изменения
числовых значений TUpDown, таблица TStringGrid, и.т.д.

Кликните здесь для просмотра всего текста
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.01.2016, 16:00
Ответы с готовыми решениями:

Создать проект с использованием существующего исходного кода
Здравствуйте, уважаемые форумчане! Помогите пожалуйста с таким вопросом: есть готовые .cpp и .h файлы, в которых я инклюжу другие исходники...

Как правильно разделить файл исходного кода?
Имеем работающий код на ВС++ 6 (более 10 тысяч строк) в одном *.cpp Нужно разделить его на несколько файлов. Конкретнее: ...

Как правильно создать проект?
Добрый день. В универе есть у нас замечательный предмет &quot;функциональное программирование&quot; все учат лисп, я же как ярый приверженец...

8
Эксперт .NET
 Аватар для Usaga
14145 / 9374 / 1350
Регистрация: 21.01.2016
Сообщений: 35,307
28.01.2016, 17:15
Вообще, эти файлы явно были написаны в среде Builder C++. Вы хотите переписать программу на Visual C++ или просто ветку перепутали?
0
0 / 0 / 0
Регистрация: 28.05.2015
Сообщений: 20
28.01.2016, 17:31  [ТС]
да по моему были разработаны в билдере с++,но я работаю в среде vs15(если много и сложно переделывать, то скачаю билдер, просто думал без разницы в каком компиляторе работать, а так лучше в visuale сделать).
0
Эксперт .NET
 Аватар для Usaga
14145 / 9374 / 1350
Регистрация: 21.01.2016
Сообщений: 35,307
28.01.2016, 18:04
В коде вашей программы используется VCl - библиотека специфичная для билдера. Используйте билдер для работы с этим кодом, не зачем всё переписывать...
0
0 / 0 / 0
Регистрация: 28.05.2015
Сообщений: 20
28.01.2016, 18:06  [ТС]
А в нем как надо будет просто создать данные файлы, или есть определенный способ(какой тип проекта использовать, какие файлы в нем создавать)?
0
Эксперт .NET
 Аватар для Usaga
14145 / 9374 / 1350
Регистрация: 21.01.2016
Сообщений: 35,307
28.01.2016, 19:45
Ну, я билдером последний раз пользовался сто лет назад))) Возможно, что вполне достаточно будет создать пустой проект графической исполняемой программы (не консольной и не библиотеки) и просто добавить в него существующие файлы.

А ещё лучше уточните у ребят в разделе С++\BuilderC++. Просто данная ветка посвящена немного другой разновидности С++ - управляемой...
1
0 / 0 / 0
Регистрация: 28.05.2015
Сообщений: 20
29.01.2016, 12:09  [ТС]
спасибо, сегодня попробую.

Добавлено через 14 часов 13 минут
у меня есть вопрос по созданию кода этой программы.
Для начала я создал проект (Application), потом добавил новый проект (Application), и открыл View source. Правильно делаю? или там есть определенные правила настройки?

Добавлено через 33 минуты
Или есть какая-то незамеченная мной способность создать в проекте новую форму.

Добавлено через 29 минут
Все теперь как создавать формы в проекте понял. Че то до этого не замечал.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
29.01.2016, 12:21
wertyhr, должны быть файлы с расширением .dfm, связанные с аналогичными .cpp. Если их нет, - придется всю расстановку компонентов делать вручную.
0
0 / 0 / 0
Регистрация: 28.05.2015
Сообщений: 20
29.01.2016, 12:27  [ТС]
В папке куда сохранил проект есть такие файлы. Спасибо за подсказку.

Добавлено через 2 минуты
только я так понял мне все равно надо будет делать расстановку в ручную, т.к. исходников с данными данными нет.

Добавлено через 54 секунды
Поэтому сейчас изучаю компоненты билдера чтоб понять куда что ставить)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.01.2016, 12:27
Помогаю со студенческими работами здесь

Как правильно создать проект на С++5.02, чтобы можно было работать с WIN API?
Помогите,пожалуйста, устранить ошибку при линковании: Unresolved external '_main' referenced fromD/../C0X32.obj. Что необходимо...

Как создать тестовый проект для программы
Здравствуйте. Как создать тестовый проект для программы на С++(пишу в консоли)? Запускаю New Test-&gt;Unit Test... Но мой TestProject...

Visual Studio 2013 - Как правильно завершить проект и создать install со своим значком
Подскажите пожалуйста, как правильно поступить при завершении проекта. То есть получается после VS по завершению публикации имею 3 файла -...

Обработка исходного кода программы
Всем привет! Пришлось надолго уехать вкомандировку, а потому отложить начатое дело. Теперь снова к нему вернулся. Процесс освоения VC++...

Защита исходного кода программы
Какие есть нормальные бесплатные протекторы? PECompact - не хочет работать TheMida Free - большой размер выходящего файла + окошечно...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru