Ошибка Компиляции В Turbo C

  • Автор темы Автор темы Nordic1962
  • Дата начала Дата начала
Все поправил. Прога работает.

А теперь и еще одну слепил про метод Эйлера:

#include <dos.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <graphics.h>
#include <stdlib.h>
#define EPSILON 0.00001
#define MAXSTEP 1
// #define VERSION 1.43


// ---------------------------------------------------------- //

double f(double x, double y);
double do_step(double h, double x_cur, double y_cur);
void title(void);
void main(void);
double f(double x, double y)

{

// Right party DU f(x,y)

return (pow(2.718,x)*y);

}

// --------------------------------------------------------- //

void main(void)

{
int i;
int metka;
int flag = 0;
int metka1, metka2;
double err = 0;

double x0, y0;

double big2_step_res, super_step_res;
double k = 1;
double zoom = 1;
double big_step_res, small_step_res;
double a, b;
double temp;
double x_cur, y_cur;
double h;
double f_max = 0, f_min = 0;
double norma = 0; // Норма (для корректного масштабирования графика)

int c = 8; // Peremenn. color !!!

FILE *myfile;



int gdriver = DETECT, gmode;

initgraph(&gdriver, &gmode, "");

textcolor(0);
setbkcolor(0);

title();
printf("y'=f(x,y), y(x0)=y(a)=y0, [a,b] - Integration piece.я\n");

label1: printf("\na=");
scanf("%lg", &a);
printf("b=");
scanf("%lg", &:rolleyes:;
printf("y(%lg)=", a);
scanf("%lg", &y0);

title();
printf("[%lg,%lg] - Border Integrirov., y(%lg)=%lg - begin condition.\n", a, b, a, y0);

//============= Initialization =====================================

h = fabs(b - a) / 10;

if (h > 0.1) h = 0.1;

x_cur = a;
y_cur = y0;
f_max = y_cur;
f_min = y_cur;

myfile = fopen("rk4.txt", "w");

fprintf(myfile, "Program: Fokin.exe %g\n");
fprintf(myfile, "The order of method: 4\n");
fprintf(myfile, "Automatic integration step select: Enabled\n");
fprintf(myfile, "[a,b]=[%lg,%lg], y(%lg)=%lg\n", a, b, a, y0);

while (x_cur <= B)
{
if (flag > 1) break;
big_step_res = do_step(h, x_cur, y_cur);
temp = do_step(h / 2, x_cur, y_cur);
small_step_res = do_step(h / 2, x_cur + h / 2, temp);
err = fabs(big_step_res - small_step_res);

// Reduction of lenght of a step

if (err > EPSILON)
{
h = h / 2;
continue;
}

// Increase of lenght of a step

big2_step_res = do_step(h, x_cur + h, big_step_res);
super_step_res = do_step(2 * h, x_cur, y_cur);
if (fabs(big2_step_res - super_step_res) < EPSILON / 2)
{
h *= 2;

continue;
}
if (h > MAXSTEP) h = MAXSTEP;
// Защита от сбоев
if (h < pow(EPSILON, 2))
{
printf("Error!\n g(%lg)=", x_cur);
fprintf(myfile, "Error!\n g(%lg)=", x_cur);
if (y_cur < 0)
{
printf("-oo.\n");
fprintf(myfile, "-oo.\n");
}
else
{
printf("+oo.\n");
fprintf(myfile, "+oo.\n");
}
getch();
fclose(myfile);
exit(1);
}
printf("y(%lg)=%lg, err=%lg, h=%lg\n", x_cur, y_cur, err, h);

if (y_cur < f_min) f_min = y_cur;

if (y_cur > f_max) f_max = y_cur;

fprintf(myfile, "y(%lg)=%lg, h=%lg\n", x_cur, y_cur, h);

if (x_cur + h > B) h = fabs(b - x_cur);

x_cur += h;

y_cur = big_step_res;

if (x_cur >= B) flag++;
}
fclose(myfile);

printf("\n Tabl.--> rk4.txt.\n");
printf("\n Enter anikey for output grafic...");

flag = 0;

getch();

// Output grafic

cleardevice(); clrscr();

if (fabs(a) > fabs(B)) zoom = fabs(getmaxx() / 2 / a);

else zoom = fabs(getmaxx() / 2 / B);


//================ Pinting borders ======================

for (i = 0 ; i < getmaxy() ; i += 5)
{
if (c == 8) c = 0;
else c = 8;
setcolor©;
line(a * zoom + getmaxx() / 2, i, a * zoom + getmaxx() / 2, i + 5);
line(b * zoom + getmaxx() / 2 - 1, i, b * zoom + getmaxx() / 2 - 1, i + 5);
}
if (fabs(f_min) > fabs(f_max)) norma = fabs(f_min) * zoom;

else norma = fabs(f_max) * zoom;


//=============== Definition koefficient correction ============

k = (getmaxy() / 2) / norma;

//======== Zashita OT big mashtabirovan. ================

if (k < 0.0001) k = 0.0001;

if (k > 10000) k = 10000;

for (i = 0 ; i < getmaxx() ; i += 5)
{
if (c == 8) c = 0;

else c = 8;

setcolor©;
line(i, -y0 * zoom * k + getmaxy() / 2, i + 5, -y0 * zoom * k + getmaxy() / 2);
line(i, -f_min * zoom * k + getmaxy() / 2, i + 5, -f_min * zoom * k + getmaxy() / 2);
line(i, -f_max * zoom * k + getmaxy() / 2, i + 5, -f_max * zoom * k + getmaxy() / 2);
}

metka = ceil((-y0 * zoom * k + getmaxy() / 2) / 16);
if (metka <= 0) metka = 1;
if (metka == 15) metka = 16;
if (metka > 25) metka = 25;
gotoxy(1, metka);
printf("Y=%.2g", y0, metka);
metka = ceil((-f_max * zoom * k + getmaxy() / 2) / 16);
if (metka <= 0) metka = 1;
if (metka == 15) metka = 16;
if (metka > 25) metka = 25;
gotoxy(1, metka);
printf("Y=%.2lg", f_max, metka);
metka = ceil((-f_min * zoom * k + getmaxy() / 2) / 16);
if (metka <= 0) metka = 1;
if (metka == 15) metka = 16;
if (metka > 25) metka = 25;
gotoxy(1, metka);
printf("Y=%.2lg", f_min, metka);


// ======== Borders and axes coordinats =============

metka1 = ceil((a * zoom + getmaxx() / 2) / 8);

if (metka1 < 1) metka1 = 1;
if (metka1 > 75) metka1 = 75;
if (metka == 17) metka = 18;

gotoxy(metka1, 15);
if (a != 0) printf("%.2lg", a);

metka2 = ceil((b * zoom + getmaxx() / 2 - 1) / 8);
if (metka2 - metka1 < 7) metka2 = metka1 + 7;
if (metka2 < 1) metka2 = 1;
if (metka2 > 75) metka2 = 75;

gotoxy(metka2, 15);
printf("%.2lg", B);
gotoxy(80, 17);
printf("X");
gotoxy(42,1);
printf("Y");
gotoxy(39, 15);
printf("0");


//========= Pinting axes coordinats ==================

setcolor(15);

line(0, getmaxy() / 2, getmaxx(), getmaxy() / 2);
line(getmaxx() / 2, 0, getmaxx() / 2, getmaxy());
line(getmaxx() / 2, 0, getmaxx() / 2 - 5, 10);
line(getmaxx() / 2, 0, getmaxx() / 2 + 5, 10);
line(getmaxx(), getmaxy() / 2, getmaxx() - 10, getmaxy() / 2 + 5);
line(getmaxx(), getmaxy() / 2, getmaxx() - 10, getmaxy() / 2 - 5);

setcolor(10);

h = fabs(b - a) / 10;

if (h > 0.1) h = 0.1;
y_cur = y0;
x_cur = a;
f_max = y_cur;
f_min = y_cur;

x0 = zoom * a + getmaxx() / 2;
y0 = (zoom * (-y_cur)) * k + getmaxy() / 2;

while (x_cur <= B)
{
if (flag > 1) break;
big_step_res = do_step(h, x_cur, y_cur);
temp = do_step(h / 2, x_cur, y_cur);
small_step_res = do_step(h / 2, x_cur + h / 2, temp);
err = fabs(big_step_res - small_step_res);

if (err > EPSILON)
{
h = h / 2;
continue;
}
big2_step_res = do_step(h, x_cur + h, big_step_res);
super_step_res = do_step(2 * h, x_cur, y_cur);
if (fabs(big2_step_res - super_step_res) < EPSILON / 2)
{
h *= 2;
continue;
}

if (h > MAXSTEP) h = MAXSTEP;
line (x0, y0, zoom * x_cur + getmaxx() / 2, zoom * (-y_cur) * k + getmaxy() / 2);
x0 = zoom * (x_cur) + getmaxx() / 2;
y0 = (zoom * (-y_cur)) * k + getmaxy() / 2;
if (x_cur + h > B) h = fabs(b - x_cur);
x_cur += h;
y_cur = big_step_res;
if (x_cur >= B) flag++;
}

while (getch() != 0);
}
// --------------------------------------------------------- //
void title(void)
{

// ============== Printing header of programm ===================

cleardevice(); clrscr();
printf(" The desition of the differential equation Euler's method \n");
printf("____________________________________________________\n");
}

// --------------------------------------------------------- //
double do_step(double h, double x_cur, double y_cur)
{
double k1, k2, k3, k4, delta_y_cur;
k1 = f(x_cur, y_cur);
k2 = f(x_cur + (h / 2), y_cur + (h / 2) * k1);
k3 = f(x_cur + (h / 2), y_cur + (h / 2) * k2);
k4 = f(x_cur + h, y_cur + h * k3);
delta_y_cur = (h / 6) * (k1 + 2 * k2 + 2 * k3 + k4);
return(y_cur + delta_y_cur);
}


Добавлено:
Смайлики сами возникли !!!!!!!!!!!!!!! :)))
 
Всем кто отозвался - огромное СПАСИБО за помощь!

С наступающим роковым 2012-м !

Удачи и всех благ в Новом Году!
 
Рано я возрадовался! Ниже приведенный код ПОЛНОСТЬЮ работает только почему-то под запущенным компилятором. Когда запускаю прогу даже прсто в папке BIN - нифига не работает полностью (не выводятся последние 3 графика).... :(



#include <dos.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <graphics.h>
#include <stdlib.h>
#define EPSILON 0.00001
#define MAXSTEP 1



/*====== Parametrs ============================*/


// kpz=10.0; /* zveno */

// chs=1; /* 1 MHz*/

// cnt=1; /* 1 mks*/

// xi=0.5;*/


/*t=xx;

ht=yy;*/

/*====== Calculations ============================*/


// q = 1/chs;

// ips = xi * q;

// lmb = q * sqrt(1- xi*xi);

// yy =kpz*(1-M_E/(-ips*xx)*(cos(lmb*xx*M_PI)+ips/lmb*sin(lmb*xx*M_PI)))*1*xx;


// int s;

// xx=0.1;

//-----------------------------------------------------------------
double f(double x, double y);
double do_step(double h, double x_cur, double y_cur);

void main(void);

//float xx,yy,kpz,chs,cnt,t,xi,q,ips,lmb;


double f(double x, double y)

{

// Right party DU f(x,y)

return (pow(2.718,x)*y);

}

// --------------------------------------------------------- //

void main(void)

{
int i;
int metka;
int flag = 0;
int metka1, metka2;
double err = 0;

double x0, y0;

double big2_step_res, super_step_res;
double k = 1;
double zoom = 1;
double big_step_res, small_step_res;
double a, b;
double temp;
double x_cur, y_cur;
double h;
double f_max = 0, f_min = 0;
double norma = 0; // Норма (для корректного масштабирования графика)

int c = 8; // Peremenn. color !!!

FILE *myfile;

int gdriver = DETECT, gmode;
initgraph(&gdriver, &gmode, "");

textcolor(0);
setbkcolor(0);


printf("\n\n");
printf("============ Euler's method ================ \n");
printf("\n");
printf("=========Programm F_Euler.exe ================ \n");
printf("\n");
printf("-----------------------------------------------\n");

printf("y'=f(x,y), y(x0)=y(a)=y0, [a,b] - Integration piece.я\n");

label1: printf("\na=");
scanf("%lg", &a);
printf("b=");
scanf("%lg", &B);
printf("y(%lg)=", a);
scanf("%lg", &y0);

printf("[%lg,%lg] - Border Integrirov., y(%lg)=%lg - begin condition.\n", a, b, a, y0);

//============= Initialization =====================================

h = fabs(b - a) / 10;

if (h > 0.1) h = 0.1;

x_cur = a;
y_cur = y0;
f_max = y_cur;
f_min = y_cur;

myfile = fopen("rk4.txt", "w");

fprintf(myfile, "Program: Fokin.exe %g\n");
fprintf(myfile, "The order of method: 4\n");
fprintf(myfile, "Automatic integration step select: Enabled\n");
fprintf(myfile, "[a,b]=[%lg,%lg], y(%lg)=%lg\n", a, b, a, y0);

while (x_cur <= B)
{
if (flag > 1) break;
big_step_res = do_step(h, x_cur, y_cur);
temp = do_step(h / 2, x_cur, y_cur);
small_step_res = do_step(h / 2, x_cur + h / 2, temp);
err = fabs(big_step_res - small_step_res);

// Reduction of lenght of a step

if (err > EPSILON)
{
h = h / 2;
continue;
}

// Increase of lenght of a step

big2_step_res = do_step(h, x_cur + h, big_step_res);
super_step_res = do_step(2 * h, x_cur, y_cur);
if (fabs(big2_step_res - super_step_res) < EPSILON / 2)
{
h *= 2;

continue;
}
if (h > MAXSTEP) h = MAXSTEP;

// Profit of break !!!

if (h < pow(EPSILON, 2))
{
printf("Error!\n g(%lg)=", x_cur);
fprintf(myfile, "Error!\n g(%lg)=", x_cur);
if (y_cur < 0)
{
printf("-oo.\n");
fprintf(myfile, "-oo.\n");
}
else

{
printf("+oo.\n");
fprintf(myfile, "+oo.\n");
}
getch();
fclose(myfile);
exit(1);
}

printf("y(%lg)=%lg, err=%lg, h=%lg\n", x_cur, y_cur, err, h);

if (y_cur < f_min) f_min = y_cur;

if (y_cur > f_max) f_max = y_cur;

fprintf(myfile, "y(%lg)=%lg, h=%lg\n", x_cur, y_cur, h);

if (x_cur + h > B) h = fabs(b - x_cur);

x_cur += h;

y_cur = big_step_res;

if (x_cur >= B) flag++;
}
fclose(myfile);

printf("\n Tabl.--> rk4.txt.\n");
printf("\n Enter anikey for output grafic...");

flag = 0;

getch();

// Output grafic

cleardevice(); clrscr();

if (fabs(a) > fabs(B)) zoom = fabs(getmaxx() / 2 / a);

else zoom = fabs(getmaxx() / 2 / B);


//================ Pinting borders ======================

for (i = 0 ; i < getmaxy() ; i += 5)
{
if (c == 8) c = 0;
else c = 8;
setcolor©;
line(a * zoom + getmaxx() / 2, i, a * zoom + getmaxx() / 2, i + 5);
line(b * zoom + getmaxx() / 2 - 1, i, b * zoom + getmaxx() / 2 - 1, i + 5);
}
if (fabs(f_min) > fabs(f_max)) norma = fabs(f_min) * zoom;

else norma = fabs(f_max) * zoom;


//=============== Definition koefficient correction ============

k = (getmaxy() / 2) / norma;

//======== Zashita OT big mashtabirovan. ================

if (k < 0.0001) k = 0.0001;

if (k > 10000) k = 10000;

for (i = 0 ; i < getmaxx() ; i += 5)
{
if (c == 8) c = 0;

else c = 8;

setcolor©;
line(i, -y0 * zoom * k + getmaxy() / 2, i + 5, -y0 * zoom * k + getmaxy() / 2);
line(i, -f_min * zoom * k + getmaxy() / 2, i + 5, -f_min * zoom * k + getmaxy() / 2);
line(i, -f_max * zoom * k + getmaxy() / 2, i + 5, -f_max * zoom * k + getmaxy() / 2);
}

metka = ceil((-y0 * zoom * k + getmaxy() / 2) / 16);
if (metka <= 0) metka = 1;
if (metka == 15) metka = 16;
if (metka > 25) metka = 25;
gotoxy(1, metka);
printf("Y=%.2g", y0, metka);
metka = ceil((-f_max * zoom * k + getmaxy() / 2) / 16);
if (metka <= 0) metka = 1;
if (metka == 15) metka = 16;
if (metka > 25) metka = 25;
gotoxy(1, metka);
printf("Y=%.2lg", f_max, metka);
metka = ceil((-f_min * zoom * k + getmaxy() / 2) / 16);
if (metka <= 0) metka = 1;
if (metka == 15) metka = 16;
if (metka > 25) metka = 25;
gotoxy(1, metka);
printf("Y=%.2lg", f_min, metka);


// ======== Borders and axes coordinats =============

metka1 = ceil((a * zoom + getmaxx() / 2) / 8);

if (metka1 < 1) metka1 = 1;
if (metka1 > 75) metka1 = 75;
if (metka == 17) metka = 18;

gotoxy(metka1, 15);
if (a != 0) printf("%.2lg", a);

metka2 = ceil((b * zoom + getmaxx() / 2 - 1) / 8);
if (metka2 - metka1 < 7) metka2 = metka1 + 7;
if (metka2 < 1) metka2 = 1;
if (metka2 > 75) metka2 = 75;

gotoxy(metka2, 15);
printf("%.2lg", B);
gotoxy(80, 17);
printf("X");
gotoxy(42,1);
printf("Y");
gotoxy(39, 15);
printf("0");


//========= Pinting axes coordinats ==================

setcolor(15);

line(0, getmaxy() / 2, getmaxx(), getmaxy() / 2);
line(getmaxx() / 2, 0, getmaxx() / 2, getmaxy());
line(getmaxx() / 2, 0, getmaxx() / 2 - 5, 10);
line(getmaxx() / 2, 0, getmaxx() / 2 + 5, 10);
line(getmaxx(), getmaxy() / 2, getmaxx() - 10, getmaxy() / 2 + 5);
line(getmaxx(), getmaxy() / 2, getmaxx() - 10, getmaxy() / 2 - 5);

setcolor(10);

h = fabs(b - a) / 10;

if (h > 0.1) h = 0.1;
y_cur = y0;
x_cur = a;
f_max = y_cur;
f_min = y_cur;

x0 = zoom * a + getmaxx() / 2;
y0 = (zoom * (-y_cur)) * k + getmaxy() / 2;

while (x_cur <= B)
{
if (flag > 1) break;
big_step_res = do_step(h, x_cur, y_cur);
temp = do_step(h / 2, x_cur, y_cur);
small_step_res = do_step(h / 2, x_cur + h / 2, temp);
err = fabs(big_step_res - small_step_res);

if (err > EPSILON)
{
h = h / 2;
continue;
}
big2_step_res = do_step(h, x_cur + h, big_step_res);
super_step_res = do_step(2 * h, x_cur, y_cur);
if (fabs(big2_step_res - super_step_res) < EPSILON / 2)
{
h *= 2;
continue;
}

if (h > MAXSTEP) h = MAXSTEP;
line (x0, y0, zoom * x_cur + getmaxx() / 2, zoom * (-y_cur) * k + getmaxy() / 2);
x0 = zoom * (x_cur) + getmaxx() / 2;
y0 = (zoom * (-y_cur)) * k + getmaxy() / 2;
if (x_cur + h > B) h = fabs(b - x_cur);
x_cur += h;
y_cur = big_step_res;
if (x_cur >= B) flag++;



//while (getch() != 0);
delay(150);

}
delay(2500);
float xx,yy,kpz,chs,cnt,t,xi,q,ips,lmb;


/*====== Parametrs ============================*/


kpz=10.0; /* zveno */

chs=1; /* 1 MHz*/

cnt=1; /* 1 mks*/

xi=0.5;



/*t=xx;

ht=yy;*/



/*====== Calculations ============================*/


q = 1/chs;

ips = xi * q;

lmb = q * sqrt(1- xi*xi);

yy =kpz*(1-M_E/(-ips*xx)*(cos(lmb*xx*M_PI)+ips/lmb*sin(lmb*xx*M_PI)))*1*xx;


int s;

xx=0.1;



/* =========== Graph ============== */


for(s=10; s>0; s--)


{

yy = kpz*(1-M_E/(-ips*xx)*(cos(lmb*xx*M_PI)+ips/lmb*(sin(lmb*xx)*M_PI)))*1*xx;


setcolor(14);

line(xx,240-xx, 328+cnt,240+xx);


setcolor(15);

line(yy+cnt,240, xx+cnt,240-xx);


setcolor(0);

line(yy+cnt,200, xx+cnt,200-xx);


xx=xx+M_PI*cnt;

}


/*====== Axes of coordinats ============================*/

setcolor(0);
cleardevice(); clrscr();



setcolor(15);

arc (127,93,18,155,50);
arc (220,77,190,340,42);
arc (308,86,15,167,43);
arc (400,68,205,350,50);

arc (98,230,5,155,50);
arc (191,215,190,340,42);
arc (279,223,15,167,43);
arc (371,207,205,350,49);


arc (108,320,0,175,30);
line(139,321,145,351);
arc (183,338,200,355,40);
arc (256,327,-5,175,30);
line(226,326,223,343);
line(286,331,286,336);
arc (329,335,178,345,42);
line(374,330,369,350);


setcolor(14);


line(88,75,102,41);
line(102,41,162,41);
line(162,41,192,121);
line(192,121,250,121);

line(250,121,279,41);

line(278,41,337,41);
line(337,41,367,121);
line(365,121,422,121);
line(421,121,440,71);


line(57,210,71,178);

line(71,178,133,178);
line(133,178,163,260);
line(163,259,221,259);

line(221,259,248,178);

line(248,178,308,178);
line(308,178,338,259);
line(338,259,391,259);
line(391,259,410,209);


setcolor(15);

line(24,10,24,387);

line(10,122,430,122);

line(10,260,430,260);

line(10,380,430,380);


getch();


closegraph();
}


// --------------------------------------------------------- //

double do_step(double h, double x_cur, double y_cur)

{
double k1, k2, k3, k4, delta_y_cur;
k1 = f(x_cur, y_cur);
k2 = f(x_cur + (h / 2), y_cur + (h / 2) * k1);
k3 = f(x_cur + (h / 2), y_cur + (h / 2) * k2);
k4 = f(x_cur + h, y_cur + h * k3);
delta_y_cur = (h / 6) * (k1 + 2 * k2 + 2 * k3 + k4);
return(y_cur + delta_y_cur);
}
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!