IPB

Здравствуйте, гость ( Вход | Регистрация )

Важные объявления

 
Ответить в данную темуНачать новую тему
> Помогите переделать на C/C++, У меня модульная работа - помогите переделать c Pascal на C/C++
MurdoX
сообщение 29.3.2010, 16:10    [ Вставить ник в форму быстрого ответа ]
Сообщение #1


Участник
**

Группа: Провереные
Сообщений: 49
Регистрация: 13.1.2009
Пользователь №: 1928
Спасибо сказали: 1 раз(а)

Дистрибутив:
Debian Squeeze



Репутация: 0


В общем, у меня модульная работа по Алгоритмам и методам мне выдали задания (для меня непомерно сложные) - мы таких методов не учили на занятиях - но преподаватели сказали гуглите я долго гуглил. Я далеко не сразу нашёл описсания методов. Но среди прочего нашёл, вроде то, что мне нужно, но на Паскале. Паскаль мы в школе не учили - хотя язык и несложный, я сам переделать не смогу - помогите пожалуйста.

Вот задания:

Решить обыкновенное дифференциальное уравнение методом прогноза и коррекции Милна(Там правда ошибка - но там описывается как её исправить).

http://dxdy.ru/topic22643.html

Решить краевую задачу системы дифференциальных уравнений на отрезке [a,b] методом конечных разностей.

Помогите, пожалуйста или скажите хотя бы то ли это.

Сообщение отредактировал MurdoX - 29.3.2010, 16:15
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
Зарегистрируйтесь, чтобы скрыть этот рекламный блок.
MurdoX
сообщение 29.3.2010, 16:11    [ Вставить ник в форму быстрого ответа ]
Сообщение #2


Участник
**

Группа: Провереные
Сообщений: 49
Регистрация: 13.1.2009
Пользователь №: 1928
Спасибо сказали: 1 раз(а)

Дистрибутив:
Debian Squeeze



Репутация: 0


Вот листинг для второй программы:

Program Miln;
Uses Crt;
var
x0,y0,z0,h:real;
k1,k2,k3,k4:real;
r1,r2,r3,r4:real;
eps,abs_pogr:real;

z,zkor,zpr,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;

function f2(xa,ya,za:real):real;
begin
f2:=1-2*sqr(xa)+2*ya-za;
end;

begin
Clrscr;
eps:=10e-6;
x0:=0;
y0:=1;
z0:=1;
h:=0.1;
x[0]:=x0;
y[0]:=y0;
z[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]);
r1:=h*f2(x[i],y[i],z[i]);
k2:=h*f1(x[i]+h/2,y[i]+k1/2,z[i]+r1/2);
r2:=h*f2(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);
r3:=h*f2(x[i]+h/2,y[i]+k2/2,z[i]+r2/2);
k4:=h*f1(x[i]+h,y[i]+k3,z[i]+r3);
r4:=h*f2(x[i]+h,y[i]+k3,z[i]+r3);

y[i+1]:=y[i]+(k1+2*k2+2*k3+k4)/6;
z[i+1]:=z[i]+(r1+2*r2+2*r3+r4)/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]));

zpr[i]:=z[i-4]+(4*h)/3*(2*f2(x[i-3],y[i-3],z[i-3])-f2(x[i-2],y[i-2],z[i-2])+2*f2(x[i-1],y[i-1],z[i-1]));

zkor[i]:=z[i-2]+(h/3)*(f2(x[i-2],y[i-2],z[i-2])+4*f2(x[i-1],y[i-1],z[i-1])+f2(x[i],zpr[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;
if abs_pogr>eps then
z[i]:=zkor[i]
else
z[i]:=zpr[i];
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,' ',z[i]:10:4);
end;
Readln;
end.
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
MurdoX
сообщение 30.3.2010, 13:34    [ Вставить ник в форму быстрого ответа ]
Сообщение #3


Участник
**

Группа: Провереные
Сообщений: 49
Регистрация: 13.1.2009
Пользователь №: 1928
Спасибо сказали: 1 раз(а)

Дистрибутив:
Debian Squeeze



Репутация: 0


В общем у меня всё получилось - тему можно закрывать.
Перейти в начало страницы
Вставить ник
+Цитировать сообщение

Ответить в данную темуНачать новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 21.8.2019, 22:56    


BonAppetit - кулинарные авторские фоторецепты  ITO-info