![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Перевод кода с Pascal в C++ |
|
C/C++ - Перевод кода с Pascal в C++
|
Новый участник Сообщения: 1 |
Уважаемые господа, гуро-программисты, помогите перевести данную программу с паскаля на С++
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 |
![]() Ветеран Сообщения: 1803
|
Профиль | Отправить PM | Цитировать Не серьезно и без обиды! Одно дело, когда решаются локальные проблемы типа "не могу понять, как решить", другое дело, когда идет просто "решите за меня"!
Наберите в поисковике метод Runge Kutta С++ и решайте проблемы. Это нужно не мне, - это нужно Вам, сегодня, завтра и послезавтра! |
------- Отправлено: 23:37, 14-11-2015 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Код представленый выше не для консольного варианта, а полноценный GUI интерфейс с формами, кнопками, полями ввода и т.д.
|
------- Отправлено: 10:22, 17-11-2015 | #3 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|