Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Перевод кода с Pascal в C++

Ответить
Настройки темы
C/C++ - Перевод кода с Pascal в C++

Новый участник


Сообщения: 1
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: Drongo
Дата: 17-11-2015
Описание: #
Уважаемые господа, гуро-программисты, помогите перевести данную программу с паскаля на С++

Код: Выделить весь код
Form2: TForm2; 
implementation 
uses Unit1,Unit4; 
{$R *.dfm} 
procedure TForm2.SpeedButton1Click(Sender: TObject); 
begin 
form4.Show;form2.Hide; 
end; 
procedure TForm2.SpeedButton2Click(Sender: TObject); 
var 
i,p :integer; // переменные, использующиеся в циклах 
a : integer; // а - параметр а в нашем уравнении 
h,t:real; // h - точность, t - шаг 
n :integer; // число шагов 
// x0,y0 :real; // начальные значения x и y 
tn, tk : integer; // границы 
x,y,kx1,kx2,kx3,kx4,ky1,ky2,ky3,ky4,dx,dy :array[1..10000] of real; 
// x,y - значения x и y на соответствующем шаге 
// kx1-4,ky1-4 - переменные принимающие участие в формуле Рунге-Кутта 
//dx, dy - отрезки x и y ,из которых складывается решение ур-ия по Р-Кутту 
begin 
a:=strtoint(edit1.Text);tn:=strtoint(edit2.Text); 
tk:=strtoint(edit3.Text);h:=strtofloat(edit4.Text); 
x[1]:=strtofloat(edit5.Text);y[1]:=strtofloat(edit6.Text); 
n:=trunc((tk-tn)/h); 
t:=tn; 
chart1.SeriesList[0].Clear;chart2.SeriesList[0].Clear; 
stringgrid1.RowCount:=n; 
for i:= 1 to (n) do 
begin 
kx1[i]:=h*(-a*y[i]-6*x[i]); 
kx2[i]:=h*(-a*y[i]-6*(x[i]+kx1[i]/2)); 
kx3[i]:=h*(-a*y[i]-6*(x[i]+kx2[i]/2)); 

unit Unit1; 
interface 
end; 
var 
Form1: TForm1; 
t1,t2,dt,t,k1,k2,v1,v2:real;//определяем тип переменных 
m,s,c,p,h1,h2,s1,s2,ds:real; 
implementation 
uses Unit2, Unit3;{$R *.dfm} 
Кнопка 
procedure TForm1.Button2Click(Sender: TObject); 
begin 
form1.Hide;form2.show;end; 
Кнопка 
procedure TForm1.Button1Click(Sender: TObject); 
Var i:integer; 
x,k11,k12,k21,k22,k31,r,mu,k32,k41,k42,d1,d2:real; 
function f(t,v1,v2,s,k1,c,m,p:real):real; 
begin 
f:=((9.8*m-k1*v1-0.5*c*s*p*v1*v1)/m);//задаем функцию 
end; 
begin 
//очистка 
Series1.Clear;Series2.Clear;Series3.Clear; 
Series4.Clear;Series5.Clear; 
Series6.Clear;Series7.Clear;Series8.Clear;Series9.Clear;Series10.Clear; 
Series11.Clear;Series12.Clear;Series13.Clear;Series14.Clear;Series15.Clear; 
//ввод значений 
t1:=strtofloat(Edit1.Text);//начальное время 
t2:=strtofloat(Edit2.Text);//конечное время 
k1:=strtofloat(Edit3.Text);//коэффициент 
c:=strtofloat(Edit4.Text); //коэф лобового сопротивления 
m:=strtofloat(Edit5.Text);//масса тела 
dt:=strtofloat(Edit6.Text);//шаг изменения времени 
s1:=strtofloat(Edit7.Text);//начальное площадь 
p:=strtofloat(Edit8.Text); //плотность тела 
s2:=strtofloat(Edit11.Text); //конечное значение площади 
ds:=strtofloat(Edit12.Text); //шаг изменения площади 
i:=1;s:=s1; 
while s<s2 do//цикл изменения плошади 
begin 
x:=t1;v1:=0;v2:=1;//начальные условия 
repeat //цикл по времени 
chart1.Series[i].Add(v1,floattostr(x));//построение графика 
//вычисляем коэф Рунге-Кутта 
k11:=dt*v2;k12:=dt*f(x,v1,v2,s,k1,c,m,p); 
k21:=dt*(v2+k12/2); 
k22:=dt*f(x+dt/2,v1+k11/2,v2+k12/2,s,k1,c,m,p); 
k31:=dt*(v2+k22/2); 
k32:=dt*f(x+dt/2,v1+k21/2,v2+k22/2,s,k1,c,m,p); 
k41:=dt*(v2+k32); 
k42:=dt*f(x+dt,v1+k31,v2+k32,s,k1,c,m,p); 
d1:=(k11+2*k21+k31+k41)/6; 
d2:=(k12+2*k22+k32+k42)/6; 
v1:=v1+d1;v2:=v2+d2; 
x:=x+dt;//пошагавое изменение х 
until x>t2+dt;//как только время станет равной t2 заканчиваем цикл 
s:=s+ds; i:=i+1; end;//заканчиваем цикл по площади 
end; 
Кнопка 
procedure TForm1.Button3Click(Sender: TObject); 
Var i:integer; 
x,k11,k12,k21,k22,k31,k32,k41,k42,d1,d2,mu,r:real; 
function f(h,v1,v2,s,k1,c,m,p:real):real; 
begin 
f:=((9.8*m+k1*v1+0.5*c*s*p*v1*v1)/m); //задаем функцию 
end; 
begin 
Series16.Clear;Series17.Clear;Series18.Clear;Series19.Clear; 
Series20.Clear;Series21.Clear;Series22.Clear;Series23.Clear; 
Series24.Clear;Series25.Clear;Series26.Clear;Series27.Clear; 
Series28.Clear;Series29.Clear;Series30.Clear; 
k1:=strtofloat(Edit3.Text);//коэф 
mu:=strtofloat(Edit4.Text); //коэф лобового сопротивления 
m:=strtofloat(Edit5.Text);//масса тела 
dt:=strtofloat(Edit6.Text);//шаг изменения времени 
s1:=strtofloat(Edit7.Text);//начавльное значение площади 
r:=strtofloat(Edit8.Text);//плотность тела 
h1:=strtofloat(Edit9.Text); //начальное значение
15:16:36
высоты 
h2:=strtofloat(Edit10.Text);//конечное значение площади 
s2:=strtofloat(Edit11.Text); //конечное значение площади 
ds:=strtofloat(Edit12.Text); //шаг изменения площади 
for i:=1 to round((s2-s1)/ds) do//цикл изменения площади 
begin 
x:=h1;v1:=0;v2:=1;//начальные условия 
repeat //цикл изменения времени 
chart2.Series[i-1].Add(v1,floattostr(x));//построение графика 
k11:=dt*v2;k12:=dt*f(x,v1,v2,s,k1,c,m,p); 
k21:=dt*(v2+k12/2); 
k22:=dt*f(x-dt/2,v1+k11/2,v2+k12/2,s,k1,c,m,p); 
k31:=dt*(v2+k22/2); 
k32:=dt*f(x-dt/2,v1+k21/2,v2+k22/2,s,k1,c,m,p); 
k41:=dt*(v2+k32); 
k42:=dt*f(x-dt,v1+k31,v2+k32,s,k1,c,m,p); 
d1:=(k11+2*k21+k31+k41)/6; 
d2:=(k12+2*k22+k32+k42)/6; 
v1:=v1+d1;v2:=v2+d2; 
x:=x-dt;s:=s1+ds; 
until x<h2-dt; 
end; 
end; 
Кнопка 
procedure TForm1.BitBtn1Click(Sender: TObject); 
Var ind,k:integer; 
k1,m,vo,h1,s,p,v,dt,y1,y2,dy1,dy2,c,dv,ds,s1,s2,t,mu,r:real; 
function f(m,k1,c,s,p,v1:real):real; 
begin 
f:=((9.8*m+6*3.14*mu*r*v1+0.5*k1*v1*v1)/m); //задаем функцию 
end; 
begin 
form3.Show; 
for ind:=0 to 9 do begin 
form3.Chart1.Serieslist[ind].Clear; 
form3.Chart2.Serieslist[ind].Clear; 
end; 
//Входные параметры 
k1:=strtofloat(Edit3.Text);//коэф 
mu:=strtofloat(Edit4.Text); //коэф лобового сопротивления 
m:=strtofloat(Edit5.Text);//масса тела 
s1:=strtofloat(Edit7.Text);//начавльное значение площади 
r:=strtofloat(Edit8.Text);//плотность тела 
h1:=strtofloat(Edit9.Text); //начальное значение высоты 
s2:=strtofloat(Edit11.Text); //конечное значение площади 
ds:=strtofloat(Edit12.Text); //шаг изменения площади 
vo:=strtofloat(edit13.Text);//начальная скорость 
k:=1;//номер графика 
s:=s1; 
// 1 
while s<=s2 do 
begin 
ind:=1; 
t:=0; y1:=vo; y2:=f(m,k1,c,s,p,vo); 
while t<=10 do 
begin 
form3.Chart1.SeriesList[k].Add(y1,floattostr(t)); 
dy1:=dt*y2; dy2:=dt*f(m,k1,c,s,p,vo); 
y1:=y1+dy1; y2:=y2+dy2; 
t:=t+0.1; 
end; 
s:=s1+ds; k:=k+1; 
end; 
//2 
k:=0; t:=30;y1:=vo;y2:=f(m,k1,c,s,p,vo); 
while t<=44 do 
begin 
s:=s1; 
while s<=s2 do 
begin 
form3.Chart2.SeriesList[k].Add(y2,floattostr(s)); 
dy1:=0.1*y2; 
dy2:=0.1*f(m,k1,c,s,p,y1); 
y1:=y1+dy1; y2:=y2+dy2; 
s:=s1+ds; 
end; 
t:=t+2; k:=k+1; 
end;end;end.

Отправлено: 14:32, 14-11-2015

 

Аватара для opel431

Ветеран


Contributor


Сообщения: 1803
Благодарности: 714

Профиль | Отправить PM | Цитировать


Не серьезно и без обиды! Одно дело, когда решаются локальные проблемы типа "не могу понять, как решить", другое дело, когда идет просто "решите за меня"!
Наберите в поисковике метод Runge Kutta С++ и решайте проблемы. Это нужно не мне, - это нужно Вам, сегодня, завтра и послезавтра!

-------
Хвала тому, кто встав среди камней, уча другого, сам будет умней.


Отправлено: 23:37, 14-11-2015 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Код представленый выше не для консольного варианта, а полноценный GUI интерфейс с формами, кнопками, полями ввода и т.д.

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 10:22, 17-11-2015 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Перевод кода с Pascal в C++

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Delphi - Перевод кода с Pascal в C++ Nixannax Программирование и базы данных 0 16-12-2013 21:24
C/C++ - Перевод кода с Pascal в C++ prosto_diod Программирование и базы данных 4 08-10-2013 14:20
C/C++ - Перевод кода с Pascal в C++ Sprint116 Программирование и базы данных 3 21-05-2013 22:02
C/C++ - Перевод кода с Pascal в C++ Dima91 Программирование и базы данных 5 02-03-2012 01:17
C/C++ - Перевод кода PASCAL в C++. Jooker666 Программирование и базы данных 0 06-05-2011 14:02




 
Переход