Смекни!
smekni.com

Применение языков программирования высокого уровня для реализации численных методов (стр. 4 из 6)

extern double newton(double xn,double yn);

extern double iterac(double xn,double yn);

int main(void)

{

//запрос начального приближения у пользователя

scanf("%f",&x);

scanf("%f",&y);

//вывод результатов через вызовы функций на экран

printf ("Окончательное решение по методу Ньютона\n");

printf ("%g\t%g\n", newton(x,y));

printf ("Окончательное решение по методу итераций\n");

printf ("%g\t%g\n", iterac(x,y));

return (0);

}

//функция решения системы уравнений методом ньютона

double newton(double xn,double yn)

{

double f1,f2,xxn,yyn;

double df1dx,df1dy,df2dx,df2dy,dxy;

do

{

i++;

//описания исходных ураванений

f1=sin(xn+a)+b*yn+c;

f2=cos(yn+d)+e*xn;

//производные

df1dx=cos(xn+a);

df1dy=b;

df2dx=e;

df2dy=-sin(yn+d);

//якобиан системы

dxy=df1dx*df2dy-df1dy*df2dx;

//очередное значение х

xxn=xn-((f1*df2dy-f2*df1dy)/dxy);

//очередное значение y

yyn=yn+((f1*df2dx-f2*df1dx)/dxy);

//проверка точности решения и окончания счета

if (fabs(xxn-xn)<eps||fabs(yyn-yn)<eps) goto b;

//изменение текущих значений переменных х и у

xn=xxn; yn=yyn;

}

while (1);

b: return (xxn,yyn);

}

//решение системы уравнений методом простых итераций

double iterac(double xi, double yi)

{

double xxi,yyi;

do

{

i++;

//явное выражение переменной x

xxi=-cos(yi+d)/e;

//явное выражение переменной y

yyi=-(sin(xi+a)+c)/b;

//проверка точности решения и ококнчания счета

if (fabs(xxi-xi)<eps||fabs(yyi-yi)<eps) goto c;

//изменение текущих значений

xi=xxi;yi=yyi;

}

while(1);

c: return (xxi,yyi);

}

Приложение 2

//

#include <graphics.h>

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

#include <time.h>

#include <math.h>

#define NFONTS 11

char *Fonts[NFONTS] = {

"Default_Font", "Triplex_Font", "Small_Font",

"SansSerif_Font", "Gothic_Font", "Script_Font", "Simplex_Font", "TriplexScript_Font",

"Complex_Font", "European_Font", "Bold_Font"

};

int xmax,ymax,i=0,MaxColors;

//

//прототипыфункций

//

void demoline(void);

void democircle(void);

void demopix(void);

void demopieslice(void);

void demotext (void);

void MainWindow(char *header);

void DrawBorder(void);

void StatusLine(char *msg);

void demoarcs(void);

void demobars(void);

void demo3dbars(void);

void diagram(void);

void endpage(void);

void endpage1(void);

void endpage2(void);

//

//начало главной функции

//

int main(void)

{

/* автоматическое определение типа видеоадаптера */

int gdriver = DETECT, gmode, errorcode;

char msg[80];

// инициализация графических и локальных переменных

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

xmax=getmaxx();

ymax=getmaxy();

// проверка результатов инициализации

errorcode = graphresult();

if (errorcode != grOk)

{

printf("Graphics error: %s&bsol;n", grapherrormsg(errorcode));

printf("Press any key to halt:");

getch();

exit(1);

}

//вызовыфункций

demoline();

demopix();

demobars();

demo3dbars();

demopieslice();

diagram();

democircle();

demoarcs();

demotext();

endpage();

endpage1();

endpage2();

cleardevice();

closegraph();

return 0;

}

//

//функциядемонстрациилиний

//

void demoline(void)

{

//формирование графического окна и статусной строки

MainWindow( "Line demonstration" );

StatusLine( "Press any key to continue..." );

//процессрисованиялиний

do

{

setcolor( random( MaxColors - random(15) ) + random(15) );

lineto (xmax,i);

lineto (xmax,ymax);

lineto (i,ymax);

lineto (i+1,i+1);

i=i+1;xmax=xmax-1;ymax=ymax-1;

}

while (xmax!=(xmax/2));

getch();

cleardevice();

clearviewport();

}

//

//функциядемонстрацииокружностей

//

void democircle(void)

//xmax=getmaxx();

//ymax=getmaxy();

{

MainWindow( "Circle demonstration" );

StatusLine( "Press any key to continue..." );

randomize();

moveto(random(xmax),random(ymax));

do

{

i++;

//установкаслучайногоцвета

setcolor( random( MaxColors - random(15) ) + random(15) );

circle(random(getmaxx()),random(getmaxy()),random(100));

}

while( !kbhit() ); // повторение пока не нажата клавиша

getch();

clearviewport();

i=1;

do

{

i++;

setcolor( random( MaxColors - random(15) ) + random(15) );

circle(getmaxx()/2,getmaxy()/2,i);

if (i==400)

{setcolor(0);

do

{i--;circle(getmaxx()/2,getmaxy()/2,i);}

while(i!=0);}

}

while( !kbhit() ); // повторение пока не нажата клавиша

getch();

cleardevice();

}

//

//функция демонстрации рисования точек в произвольном //порядке

//

void demopix(void)

{

MainWindow( "Pix demonstration" );

StatusLine( "Press any key to continue..." );

do

{

i++;

setcolor( random( MaxColors - random(15) ) + random(15) );

putpixel(random(getmaxx()),random(getmaxy()),random(15));

}

while( !kbhit() ); // повторение пока не нажата клавиша

xmax=getmaxx();

ymax=getmaxy();

getch();

cleardevice();

}

//

//функция демонстрации рисования секторов

//

void demopieslice(void)

{

MainWindow( "Pie Chart Demonstration" );

StatusLine( "Press any key to continue..." );

do

{

i++;

setcolor(random( MaxColors - random(15) ) + random(15));

setfillstyle(random(12), getmaxcolor());

// setcolor(random( MaxColors - random(15) ) + random(15));

pieslice(random(getmaxx()),random(getmaxy()),

random(360),random(360),random(150));

if(i>1000) {clearviewport();i=0;}

}

while( !kbhit() ); // повторение пока не нажата клавиша

getch();

clearviewport();

}

//

//круговая диаграмма

//

void diagram(void)

{

int sektors[] = {20,10,35,15,20};

char *percent[]={"20%","10%","35%","15%","20%"};

int secsize,k=0,i,r=150;

MainWindow( "Pie Chart Demonstration" );

StatusLine( "Press any key to continue..." );

settextjustify(CENTER_TEXT,CENTER_TEXT);

settextstyle(5,0,2);//установкаатрибутовтекста

outtextxy( getmaxx()/2,25,"This is the pie chart diagramm");

//процесс рисования диаграммы по данным из массива

for( i=0;i<5;i++)

{

secsize = (360 * sektors[i])/100;

setfillstyle(i,i);

pieslice((getmaxx()/2),(getmaxy()/2),k,k+secsize,r);

k = k+secsize;

}

//подписипроцентов

outtextxy( getmaxx()/2+r+30,getmaxy()/2-70,percent[0]);

outtextxy( getmaxx()/2,getmaxy()/2-r-30,percent[1]);

outtextxy( getmaxx()/2-r-30,getmaxy()/2,percent[2]);

outtextxy( getmaxx()/2,getmaxy()/2+r+30,percent[3]);

outtextxy( getmaxx()/2+r+20,getmaxy()/2+50,percent[4]);

getch();

settextstyle(0,0,0);

clearviewport();

}

//

//функция демонстрации текста в графическом окне

//

void demotext(void)

{

int midx,midy,i;

MainWindow( "Demonstration text in the graphics screen" );

StatusLine( "Press any key to continue..." );

settextjustify(CENTER_TEXT,CENTER_TEXT);

midx=getmaxx()/2;

midy=getmaxy()/2;

outtextxy( midx,midy-40,"This programm will demonstrate to you all graphics");

outtextxy( midx,midy+40,"functions of the C++ language");getch();clearviewport();

for (i=0;i<11;i++)

{

settextstyle(i,0,0);

outtextxy(midx,midy-40,"This text is write by ");

outtextxy(midx,midy+40,Fonts[i]);

getch();clearviewport();

}

settextstyle(0,1,1); //выводвертикальноготекста

outtextxy(midx,midy,"This programm created by Grinjoff Mark");

settextstyle(0,0,0);/*возвращениеи исходного начертания текста */

getch();

clearviewport();

}

//

//функция демонстрации рисования дуг и многоугольников

//

void demoarcs(void)

{

int poly[10];

MainWindow( "Arcs and polygons demonstration" );

StatusLine( "Press any key to continue..." );

xmax=getmaxx();

ymax=getmaxy();

i=0;

//рисование дуг с произвольным расположением и цветом

do

{

i++;

setcolor(random( MaxColors - random(15) ) + random(15));

arc(random(xmax),random(ymax),random(358),random(358),random(100));

if(i>10000) {clearviewport();i=0;}

}

while( !kbhit() ); // повторениепоканенажатаклавиша

getch();

clearviewport();

i=0;

//рисование многоугольников с произвольным цветом

do

{

i++;

poly[0] = random(i+random(20));//1-вершина

poly[1] = random(random(ymax)/i+2);

poly[2] = xmax-(i+20); /* 2-я */

poly[3] = i+20;

poly[4] = xmax-(i+50); /* 3-я */

poly[5] = ymax-(i+20);

poly[6] = i+xmax/2; /* 4-я */

poly[7] = i+ymax/2;

/*

drawpoly автоматически не закрывает многоугольник

поэтому необходимо это сделать самому

*/

poly[8] = poly[0];

poly[9] = poly[1];

//рисует многоугольники, изменяя координаты вершин

setcolor(random( MaxColors - random(15) ) + random(15));

drawpoly(5, poly);

if(i>1000) {clearviewport();i=0;}

}

while( !kbhit() ); // повторение пока не нажата клавиша

getch();

clearviewport();

}

//

//функция демонстрации закрашеных многоугольников и //цветов

//

void demobars(void)

{

MainWindow( "Bars and colors demonstration" );

StatusLine( "Press any key to continue..." );

int kxb=15,kyb=15;

double stx,sty,x,y;

stx=floor(getmaxx()/kxb);

sty=floor(getmaxy()/kyb);

do

{

for(x=3;x<getmaxx();x+=stx){

for(y=3;y<getmaxy();y+=sty){

setcolor(random( MaxColors - random(15) ) + random(15));

setfillstyle(SOLID_FILL,random(getmaxcolor()));

bar(x+3,y+3,x+stx-3,y+sty-3);}}

}

while( !kbhit() ); // повторение пока не нажата клавиша

getch();

clearviewport();

}

//

//функция демонстрации трехмерных прямоугольников

//

void demo3dbars(void)

{

int i;

MainWindow( "3D Bars demonstration" );

StatusLine( "Press any key to continue..." );

do

{

i++;

setcolor(random( MaxColors - random(15) ) + random(15));

setfillstyle(random(5),random(getmaxcolor()));

bar3d( random( getmaxx() ), random( getmaxy() ),

random( getmaxx() ), random( getmaxy() ),10,1);

for(float j=0;j<50000;j++);//эмуляторзадержки

if(i>100) {clearviewport();i=0;}

}

while( !kbhit() ); // повторениепоканенажатаклавиша

getch();

clearviewport();

}

//

//функция создания завершающей страницы

//

void endpage(void)

{

MainWindow( "The cycle" );

StatusLine( "Press any key to continue..." );

int i,j,rad=50;

do

{

for (i=0;i<359;i++)

{

setcolor(random( MaxColors - random(15) ) + random(15));

pieslice(60,60,i,i+1,rad);

pieslice(580,60,i,i+1,rad);

pieslice(60,390,i,i+1,rad);

pieslice(580,390,i,i+1,rad);

}

for (i=0;i<getmaxx();i++)

{

setcolor(random( MaxColors - random(15) ) + random(15));

line(getmaxx()/2,10,i,getmaxy()/2);

line(getmaxx()/2,440,i,getmaxy()/2);

}

setcolor(0);

for (i=0;i<getmaxx();i++)

{

line(getmaxx()/2,10,i,getmaxy()/2);

line(getmaxx()/2,440,i,getmaxy()/2);

}

}

while( !kbhit() ); // повторение пока не нажата клавиша

getch();

clearviewport();

}

//

//функция калейдоскопа

//

void endpage1(void)

{

MainWindow( "The simple kaleidoscope" );

StatusLine( "Press any key for exit to DOS" );

int koord1[4],koord2[4],koord3[4];

//получение координат исходной линии

koord1[0]=random((getmaxx()/2)+10);

koord1[1]=random((getmaxy()/2)+10);

koord1[2]=random((getmaxx()/2)+10);

koord1[3]=random((getmaxy()/2)+10);

//получение координат конечной линии

koord2[0]=random((getmaxx()/2)+10);

koord2[1]=random((getmaxy()/2)+10);

koord2[2]=random((getmaxx()/2)+10);

koord2[3]=random((getmaxy()/2)+10);

//прорисовка

do

{

for (float t=0;t<1;t=t+0.01) //количество линий

{

for (int l=0;l<4;l++) //нахождение координат движения //линии

{koord3[l]=floor(koord2[l]*(1-t)+koord1[l]*t);}

setcolor(random( MaxColors - random(15) ) + random(15));

line(koord3[0],koord3[1],koord3[2],koord3[3]); //первая //четверть

line(getmaxx()-koord3[0],koord3[1],getmaxx()-koord3[2],koord3[3]);//втораячетверть

line(koord3[0],getmaxy()-koord3[1],koord3[2],getmaxy()-koord3[3]);//третьячетверть

line(getmaxx()-koord3[0],getmaxy()-koord3[1],

getmaxx()-koord3[2],getmaxy()-koord3[3]);//четвертаячетверть

}

for (int p=0;p<4;p++)//переприсвоение координат

{koord2[p]=koord1[p];}

//получение новых координат первой линии

koord1[0]=random(getmaxx()/2);

koord1[1]=random(getmaxy()/2);

koord1[2]=random(getmaxx()/2);

koord1[3]=random(getmaxy()/2);

}

while( !kbhit() ); // повторение пока не нажата клавиша

getch();

clearviewport();

}

//

//последняя страница

//

void endpage2(void)

{

MainWindow( "The end" );

StatusLine( "Press any key for exit to DOS" );

do

{

settextstyle(BOLD_FONT,0,2);

outtextxy(getmaxx()/2,getmaxy()/2,"The end ");

}

while( !kbhit() );

getch();

clearviewport();

}

//

//функциясозданияграфическогоокна

//

void MainWindow( char *header )

{

int height;

xmax=getmaxx();