Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.01.2014, 01:02   #1
slasty
 
Регистрация: 03.01.2014
Сообщений: 3
Восклицание Перевод с паскаля на си++

Доброй ночи дорогие форумчане!!!
Помогите пожалуйста перевести программу с паскаля на си++,не шарю в переводах...
Код:
Program Miln;
Uses Crt;
var
  x0,y0,z0,h:real;
  k1,k2,k3,k4:real;
  eps,abs_pogr:real;
  ypr,ykor,x,y:array [0..10] of real;
  i:integer;
 
function f1(xa,ya,za:real):real;
begin
  f1:=2*sqr(xa)+2*ya+za;
end;
 
begin
  Clrscr;
  eps:=10e-6;
  x0:=0;
  y0:=2;
  h:=0.1;
  x[0]:=x0;
  y[0]:=y0;
  i:=0;
  { Gotovim 1-e 3 tochki po metodu runge-kutta }
  while i<=3  do
    begin
      k1:=h*f1(x[i],y[i],z[i]);
      k2:=h*f1(x[i]+h/2,y[i]+k1/2,z[i]+r1/2);
      k3:=h*f1(x[i]+h/2,y[i]+k2/2,z[i]+r2/2);
      k4:=h*f1(x[i]+h,y[i]+k3,z[i]+r3);
 
      y[i+1]:=y[i]+(k1+2*k2+2*k3+k4)/6;
      
      x[i+1]:=x[i]+h;
      i:=i+1;
    end;
 
  i:=4;
  while x[i]<=1.0+h{eps> abs_pogr} do
    begin
  { etap prognoza i korrektsii}
      ypr[i]:=y[i-4]+(4*h)/3*(2*f1(x[i-3],y[i-3],z[i-3])-f1(x[i-2],y[i-2],z[i-2])+2*f1(x[i-1],y[i-1],z[i-1]));
 
      ykor[i]:=y[i-2]+(h/3)*(f1(x[i-2],y[i-2],z[i-2])+4*f1(x[i-1],y[i-1],z[i-1])+f1(x[i],ypr[i],z[i]));

      abs_pogr:=abs(ykor[i]-ypr[i])/29;
      if abs_pogr>eps then
        y[i]:=ykor[i]
      else
          y[i]:=ypr[i];
      abs_pogr:=abs(zkor[i]-zpr[i])/29;
      x[i+1]:=x[i]+h;
      i:=i+1;
    end;
  WriteLn;
  for i:=0 to 10 do
    begin
      WriteLn(x[i]:10:4,' ',y[i]:10:4,' ');
    end;
  Readln;
end.
Emerald
p.s. Хотелось бы чтобы границы и погрешность вводилась с клавиатуры,а выводилось все в таблицу. Буду очень признательна))))))))))))))))
slasty вне форума Ответить с цитированием
Старый 04.01.2014, 16:06   #2
DAVID973
Пользователь
 
Регистрация: 10.03.2012
Сообщений: 16
По умолчанию

Код:
#include <iostream>
#include <math.h>
#include <cstring>
#include <conio.h>

using namespace std;

double X0, Y0, Z0, h;
double k1, k2, k3, k4;
double eps, abs_pogr;
double ypr [10];
double ykor [10];
double x [10];
double y [10];
double z [10];
int i;

double f1 (double xa, double ya, double za)
{
	return 2 * pow(xa, 2) + 2*ya + za;
}

int main()
{
	eps = 10*exp(1.0) - 6;
	X0 = 0;
	Y0 =2;
	h = 0.1;
	x[0] = X0;
	y[0] = Y0;

	// Gotovim 1-e 3 tochki po metodu runge-kutta 

	for (i = 0 ; i <= 3 ; i++)
	{
		k1 = h * f1(x[i], y[i], z[i]);
		k2 = h * f1(x[i] + h/2, y[i] + k1 / 2, z[i] + k1 / 2);
		k3 = h * f1(x[i] + h/2, y[i] + k2 / 2, z[i] + k2 / 2);
		k4 = h * f1(x[i] + h, y[i] + k3, z[i] + k3);
		y[i+1] = y[i] + (k1 + 2*k2 + 2*k3 + k4) / 6;
		x[i+1] = x[i] + h;
	}

	for (i = 4 ; x[i] <= (1 + h) ; i++) // eps > abs_pogr
	{
		// etap prognoza i korrektsii
		ypr[i] = y[i-4] + (4*h) / 3*(2*f1(x[i-3],y[i-3],z[i-3])-f1(x[i-2],y[i-2],z[i-2])+2*f1(x[i-1],y[i-1],z[i-1]));
		ykor[i] = y[i-2] + (h/3)*(f1(x[i-2],y[i-2],z[i-2])+4*f1(x[i-1],y[i-1],z[i-1])+ f1(x[i], ypr[i], z[i]));
		abs_pogr = abs (ykor[i] - ypr[i]) / 29;
		if (abs_pogr>eps) y [i] = ykor [i];
		else y[i] = ypr [i];
		abs_pogr = abs(ykor[i] - ypr[i]) / 29;
		x[i+1] = x[i] + h;
	}

	cout << endl;

	for (i = 0; i < 10; i++) cout << x[i] << "   " << y[i] << "   " << endl;

	_getch();
	return 0;
}
DAVID973 вне форума Ответить с цитированием
Старый 04.01.2014, 20:02   #3
DAVID973
Пользователь
 
Регистрация: 10.03.2012
Сообщений: 16
По умолчанию

Цитата:
eps:=10e-6;
здесь наверно имелось в виду:

Код:
eps:=10*e-6;
кроме того переменные в вашем примере (r1, r2, r3) не объявлены

Код:
      k2:=h*f1(x[i]+h/2,y[i]+k1/2,z[i]+r1/2);
      k3:=h*f1(x[i]+h/2,y[i]+k2/2,z[i]+r2/2);
      k4:=h*f1(x[i]+h,y[i]+k3,z[i]+r3);
в программе я заменил их на k1, k2, k3

Последний раз редактировалось DAVID973; 04.01.2014 в 20:04. Причина: ошибочка
DAVID973 вне форума Ответить с цитированием
Старый 04.01.2014, 20:15   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

DAVID973, 10e-6 = 1e-5 = 0.00001.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 05.01.2014, 15:15   #5
slasty
 
Регистрация: 03.01.2014
Сообщений: 3
По умолчанию

спасибо,там точки z вообще не будет,она не нужна...

Последний раз редактировалось slasty; 05.01.2014 в 15:21.
slasty вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод с паскаля на С++ trum Помощь студентам 0 01.11.2013 19:23
Перевод из Паскаля в Си++ reyryuyu Паскаль, Turbo Pascal, PascalABC.NET 0 19.09.2012 22:19
Перевод из паскаля на СИ Кот Шрёдингера Помощь студентам 0 02.11.2011 20:07
перевод из паскаля в с++ dANIL282 Помощь студентам 2 21.01.2011 00:05
Перевод с Паскаля на С RamilFaz Общие вопросы C/C++ 3 08.04.2010 14:40