Другие языки программирования и технологии

Переписать программу из Pascal в С++

Вот текст программы:
type
tmx = array[1..100] of real;
tmy = array[1..100, 1..100] of real;
var
Ma, Mx: tmx;
My: tmy;
An, ak, da, xn, Dx,b, c, d, eps, int: real;
k, n, n1, er, km: integer;
function Pwr(x: real): real;//Возведение в степень (1/3)
begin
if x = 0 then Pwr := 0
else
if x > 0 then pwr := exp(ln(x) * (1/3)) else
pwr := -exp(ln(abs(x)) * (1/3));
end;
procedure tab(b, an, ak, da, xn, dx: real; n: integer; var Mx, Ma: tmx; var My: tmy);
var
i, j: integer;
x, y, a: real;
begin
j := 1;
a := an;
while a <= ak do
begin
X := xn;
i := 1;
while i <= n do
begin
y := (cos(b) * sin(sqrt(x))) / (a * sqrt(x + 5 * pwr(3 * x)));
mx[i] := x;
my[j, i] := y;
i := i + 1;
x := x + dx
end;
ma[j] := a;
a := a + da;
j := j + 1;
end;
end;
function f(x: real): real;
begin
f := x * x * x * exp(2 * x);
end;
procedure integral (c, d, eps: real; var n1, er: integer; km: integer; var int: real);
var
y1, yn, h, del, int1, x: real;
i, j: integer;
begin
y1 := f(c);
yn := f(d);
int1 := 0;
n1 := 2;
er := 1;
j := 1;
while j <= km do
begin
h := (d - c) / n1;
x := c + h;
int := 0;
for I := 1 to n1 - 1 do
begin
int := int + f(x);
x := x + h;
end;
int := h * (y1 / 2 + yn / 2 + int);
del := abs(int1 - int);
if del < eps then
begin
j := km;
er := er - 1;
end
else
begin
int1 := int; n1 := n1 * 2;
end;
j := j + 1;
end;
end;
procedure rezout(var mx: tmx; var ma: tmx; var my: tmy; k, n: integer);
var
i, j: integer;
begin
for j := 1 to k do
begin
writeln('-----------------------------');
writeln;
writeln(' A[', j, ']=', Ma[j]:4:4);
writeln('X Y');
for i := 1 to n do writeln(mx[i]:6:3, ' ', My[j, i]:6:3);
end;
end;
begin
writeln('Начальное значение А: ');
write('An = ');readln(An);
writeln('Конечное значение А: ');
write('Ak = ');readln(Ak);
writeln('Шаг изменения параметра А: ');
write('Da = ');readln(Da);
writeln('----------------------');
writeln('Начальное значение аргумента Х: ');
write('Xn = ');readln(Xn);
writeln('Шаг изменения агрумента Х: ');
write('DX = ');readln(dX);
writeln('Количество значений аргумента N');
write('N = ');readln(N);
writeln('Верхняя граница интегрирования С');
write('С = ');readln(c);
writeln('Нижняя граница интегрирования D');
write('D = ');readln(D);
writeln('Заданная погрешность Eps');
write('Eps = ');readln(eps);
writeln('Количество итераций Km');
write('Km = ');readln(Km);
integral (c, d, eps, n1, er, km, int);
if er = 1 then
begin
writeln('Интеграл не найден за ', km:2, 'итераций');
exit
end; b := int;
writeln('Численное значение определенного интеграла В=', Int:5:7);
Tab(B, An, ak, da, xn, dx, n, mx, ma, my);
k := trunc((ak - an) / da) + 1;
rezout(mx, ma, my, k, n);
end.

Если что-то будет не понятно, вот отсчет по этой работе:
https://yadi.sk/i/UKrifKFemJZRH
#include "ptoc.h"

typedef array<1,100,real> tmx;
typedef matrix<1,100, 1,100,real> tmy;
tmx ma, mx;
tmy my;
real an, ak, da, xn, dx,b, c, d, eps, int_;
integer k, n, n1, er, km;
real pwr(real x)//Возведение в степень (1/3)
{
real pwr_result;
if (x == 0) pwr_result = 0;
else
if (x > 0) pwr_result = exp(log(x) * ((real)(1)/3)); else
pwr_result = -exp(log(abs(x)) * ((real)(1)/3));
return pwr_result;
}
void tab(real b, real an, real ak, real da, real xn, real dx, integer n, tmx& mx, tmx& ma, tmy& my)
{
integer i, j;
real x, y, a;

j = 1;
a = an;
while (a <= ak)
{
x = xn;
i = 1;
while (i <= n)
{
y = (cos(b) * sin(sqrt(x))) / (a * sqrt(x + 5 * pwr(3 * x)));
mx[i] = x;
my[j][i] = y;
i = i + 1;
x = x + dx;
}
ma[j] = a;
a = a + da;
j = j + 1;
}
}
real f(real x)
{
real f_result;
f_result = x * x * x * exp(2 * x);
return f_result;
}
void integral (real c, real d, real eps, integer& n1, integer& er, integer km, real& int_)
{
real y1, yn, h, del, int1, x;
integer i, j;

y1 = f(c);
yn = f(d);
int1 = 0;
n1 = 2;
er = 1;
j = 1;
while (j <= km)
{
h = (d - c) / n1;
x = c + h;
int_ = 0;
for( i = 1; i <= n1 - 1; i ++)
{
int_ = int_ + f(x);
x = x + h;
}
int_ = h * (y1 / 2 + yn / 2 + int_);
del = abs(int1 - int_);
if (del < eps)
{
j = km;
er = er - 1;
}
else
{
int1 = int_; n1 = n1 * 2;
}
j = j + 1;
}
}
void rezout(tmx& mx, tmx& ma, tmy& my, integer k, integer n)
{
integer i, j;

for( j = 1; j <= k; j ++)
{
output << "-----------------------------" << NL;
output << NL;
output << " A[" << j << "]=" << format(ma[j],4,4) << NL;
output << "X Y" << NL;
for( i = 1; i <= n; i ++) output << format(mx[i],6,3) << ' ' << format(my[j][i],6,3) << NL;
}
}
int main(int argc, const char* argv[])
{
pio_initialize(argc, argv);
output << "Начальное значение А: " << NL;
output << "An = ";input >> an >> NL;
output << "Конечное значение А: " << NL;
output << "Ak = ";input >> ak >> NL;
output << "Шаг изменения параметра А: " << NL;
output << "Da = ";input >> da >> NL;
output << "----------------------" << NL;
output << "Начальное значение аргумента Х: " << NL;
output << "Xn = ";input >> xn >> NL;
output << "Шаг изменения агрумента Х: " << NL;
output << "DX = ";input >> dx >> NL;
output << "Количество значений аргумента N" << NL;
output << "N = ";input >> n >> NL;
output << "Верхняя граница интегрирования С" << NL;
output << "С = ";input >> c >> NL;
output << "Нижняя граница интегрирования D" << NL;
output << "D = ";input >> d >> NL;
output << "Заданная погрешность Eps" << NL;
output << "Eps = ";input >> eps >> NL;
output << "Количество итераций Km" << NL;
output << "Km = ";input >> km >> NL;
integral (c, d, eps, n1, er, km, int_);
if (er == 1)
{
output << "Интеграл не найден за " << format(km,2) << "итераций" << NL;
exit;
} b = int_;
output << "Численное значение определенного интеграла В=" << format(int_,5,7) << NL;
tab(b, an, ak, da, xn, dx, n, mx, ma, my);
k = trunc((ak - an) / da) + 1;
rezout(mx, ma, my, k, n);
return EXIT_SUCCESS;
}

ptoc.h скачай в пакете http://www.garret. ru/lang.html
Кирилл Агеев
Кирилл Агеев
57 925
Лучший ответ
Андрей Кириков А как его скомпелировать?
Иногда проще найти готовое, чем переписывать.
Специалист, что знает пару языков - это переводчик и ему хорошие деньги платят.
Ты мог бы воспользоваться конвертерами, но тоже это дело не чисто и так и так надо долго приводить все в порядок.
RS
Rustam Sahabutdinov
90 688