на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Разработка программы для решения систем линейных уравнений
p align="left">{

char ch,ans;

int k;

double *Z; //вспомогательный вектор

X=(double*)malloc(n*sizeof(double)); //Вектор решений

Z=(double*)malloc(n*sizeof(double)); //Вектор начальных приближений

for(int i=0;i<n;i++) Z[i]=1;

window(23,7,57,16);

textbackground(LIGHTGRAY);

textcolor(BLACK);

clrscr();

cprintf("\n\r ‚лЎЁаЁвҐ ¬Ґв®¤ аҐиҐ­Ёп: ");

cprintf("\n\r 1-ЊҐв®¤ Їа®бвле ЁвҐа жЁ©");

cprintf("\n\r 2-ЊҐв®¤ ‡Ґ©¤Ґ«п");

do

{ans=(char)getch();}

while((ans!='1')&&(ans!='2'));

if(ans=='1') //Метод простых итераций

{

s=0;

do

{

k=0;

for(int i=0;i<n;i++)

{

X[i]=B[i]*(-1);

for(int j=0;j<n;j++)

{X[i]=X[i]+(double)A[i][j]*Z[j];}

if(A[i][i]!=0)

{

if(fabs((double)X[i]/A[i][i])>=0.0001) k=1; //проверка на сходимость

X[i]=Z[i]-(double)X[i]/A[i][i]; //если сходится->k=0->выход из цикла

}

}

for(int i=0;i<n;i++)

Z[i]=X[i];

s++; // ++итерация

if(s==100) k=0; //если итераций > 100->выход из цикла

}

while(k!=0);

}

if(ans=='2') //Метод Зейделя

{

s=0;

do

{

k=0;

for(int i=0;i<n;i++)

{

X[i]=B[i]*(-1);

for(int j=0;j<n;j++)

{

if(A[i][j]!=0)

X[i]=X[i]+(double)A[i][j]*Z[j];

}

if(A[i][i]!=0)

{

if(fabs((double)X[i]/A[i][i])>=0.001) k=1; //проверка на сходимость

X[i]=Z[i]-(double)X[i]/A[i][i];

Z[i]=X[i];

}

}

s++;

if(s==100) k=0; //количество итераций должно быть менее 100

} //иначе цикл прекращается->система не имеет решений

while(k!=0);

}

cprintf("\n\n\r ђ бзсвл н Є®­зҐ­л");

cprintf("%s","\n\n\n\r „«п Їа®¤®«¦Ґ­Ёп ­ ¦¬ЁвҐ <Enter>");

do

{ch=(char)getch();}

while(ch!=13);

}

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

//функция вывода данных на экран или в файл

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

void output(double **&A,double *&B,double *&X,int &n,int &s)

{

char ch_out;

int xx=5,yy=5; //переменные скроллинга

float temp; //вспомогательная переменная

window(1,25,80,25);

textbackground(LIGHTGRAY);

clrscr();

cprintf("Alt+X - exit Arrows - scrolling");

gotoxy(70,1);

textcolor(BLACK);

window(3,3,78,23);

textbackground(LIGHTGRAY);

textcolor(BLACK);

clrscr();

if(s!=100) //если система имеет решения

{

window(3,4,66,4);

textbackground(LIGHTGRAY);

clrscr();

cprintf("\r `Ёб⥬ га ў­Ґ­Ё©:"); //система уравнений

window(3,12,66,12);

textbackground(LIGHTGRAY);

clrscr();

cprintf("\r ‚ҐЄв®а аҐиҐ­Ё©"); //вектор решений

for(int i=0;i<n;i++)

{

if(i==0)

{

window(3,13,30,19);

textbackground(LIGHTGRAY);

clrscr();

}

if(i==5) //если число уравнений>5->во второй столбец

{

window(32,13,70,19);

textbackground(LIGHTGRAY);

clrscr();

}

cprintf("\n\r X(%d)=%.4f",i+1,X[i]); //вывод решения

}

window(3,20,66,20);

textbackground(LIGHTGRAY);

clrscr();

cprintf("\n\n\r --Ёб«® ЁвҐа жЁ©: %d",s); //число итераций

} //if...

else cprintf("\n\n `Ёб⥬ ­Ґ Ё¬ҐҐв аҐиҐ­Ё©");

window(14,22,66,22);

textbackground(LIGHTGRAY);

clrscr();

cprintf("\n\n\r „«п Їа®¤®«¦Ґ­Ёп ­ ¦¬ЁвҐ <Enter>");

if(s!=100) //если система имеет решения, т.е. число итераций <100

{

window(4,5,77,10); //окно вывода системы уравнений(неактивное)

textbackground(LIGHTGRAY); //серый фон

textcolor(BLACK);

clrscr();

if(n<=5) //если система имеет не более 5 уравнений

{

for(int i=0;i<n;i++)

{

cprintf("\n\r ");

for(int j=0;j<=n;j++)

{

if(j==n) cprintf("=%.2f",B[i]); //вывод вектора свободных членов

else

{

if(j<n)

{

if(A[i][j]>0) cprintf(" + %.2fX(%d)",A[i][j],j+1);

else

{

temp=A[i][j]*(-1); //если выводится отрицательный коэффициент

cprintf(" - %.2fX(%d)",temp,j+1);

}

}

}

}

} //for(i<n)...

} //if(n<=5)...

else //если система имеет более 5 уравнений

{

window(4,6,72,10); //окно вывода системы уравнений(активное)

textbackground(BLUE); //синий фон

textcolor(WHITE);

do

{

clrscr();

for(int i=xx-5;i<xx;i++)

{

cprintf("\n\r ");

for(int j=yy-5;j<=yy;j++)

{

if(j==n) cprintf(" = %.2f",B[i]); //вывод вектора свободных членов

else

{

if(j<n)

{

if(A[i][j]>0) cprintf(" + %.2fX(%d)",A[i][j],j+1);

else

{

temp=A[i][j]*(-1);

cprintf(" - %.2fX(%d)",temp,j+1);

}

}

}

}

}

ch_out=(char)getch();

if((ch_out==80)&&(xx!=n)) xx++; //при нажатии "стрелки вниз" прокрутка вниз

if((ch_out==72)&&(xx!=5)) xx--; //при нажатии "стрелки вверх" прокрутка вверх

if((ch_out==77)&&(yy!=n)) yy++; //при нажатии "стрелки вправо" прокрутка вправо

if((ch_out==75)&&(yy!=5)) yy--; //при нажатии "стрелки влево" прокрутка влево

}

while(ch_out!=27); //при нажатии ESC

//скроллинг становится неактивным

window(4,6,77,10); //окно вывода системы уравнений(неактивное)

textbackground(LIGHTGRAY); //серый фон

textcolor(BLACK);

clrscr(); //выводим систему уравнений в новом неактивном окне

for(int i=xx-5;i<xx;i++)

{

cprintf("\n\r ");

for(int j=yy-5;j<=yy;j++)

{

if(j==n) cprintf(" = %.2f",B[i]); //вывод вектора свободных членов

else

{

if(j<n)

{

if(A[i][j]>0) cprintf(" + %.2fX(%d)",A[i][j],j+1);

else

{

temp=A[i][j]*(-1);

cprintf(" - %.2fX(%d)",temp,j+1);

}

}

}

}

}

window(22,22,53,22);

textbackground(BLUE);

textcolor(WHITE);

clrscr();

cprintf("\r„«п Їа®¤®«¦Ґ­Ёп ­ ¦¬ЁвҐ <Enter>"); //подсвечиваем строку синим фоном

} //else(n<=5)...

}

do //пока не нажата клавиша ENTER

{ch_out=(char)getch();}

while(ch_out!=13);

}

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

//==============================================================================

main()

{

int n, //число уравнений

m_num=1,

s; //число итераций

char ch,ch2;

bool inpflag=false,decflag=false; //флаги состояния

double *X, //вектор решений

**A, //матрица коэффициентов

*B; //вектор свободных членов

_setcursortype(_NOCURSOR); //убираем курсор

do

{

menu();

cursor(m_num);

ch=(char)getch();

if((ch=='h')||(ch=='H')||((ch==13)&&(m_num==1))) help();

if((ch=='i')||(ch=='I')||((ch==13)&&(m_num==2)))

{input(A,B,n);inpflag=true;}

if(((ch=='o')||(ch=='O')||((ch==13)&&(m_num==4)))&&(inpflag==false)&&(decflag==false))

{

window(28,9,55,14);

textbackground(BLACK);

clrscr();

window(27,8,54,13);

textbackground(LIGHTGRAY);

textcolor(BLACK);

clrscr();

cprintf("\r\n „ ­­лҐ ­Ґ ўўҐ¤Ґ­л Ё ­Ґ");

cprintf("\r\n Ї®«г祭® аҐиҐ­ЁҐ!");

cprintf("\n\n\r „«п ўл室 ­ ¦¬ЁвҐ Esc");

do

{ch2=(char)getch();}

while(ch2!=27);

}

if(((ch=='o')||(ch=='O')||((ch==13)&&(m_num==4)))&&(inpflag==true)&&(decflag==false))

{

window(28,9,55,14);

textbackground(BLACK);

clrscr();

window(27,8,54,13);

textbackground(LIGHTGRAY);

textcolor(BLACK);

clrscr();

cprintf("\r\n ЌҐ Ї®«г祭® аҐиҐ­ЁҐ!");

cprintf("\n\n\n\r „«п ўл室 ­ ¦¬ЁвҐ Esc");

do

{ch2=(char)getch();}

while(ch2!=27);

}

if(((ch=='o')||(ch=='O')||((ch==13)&&(m_num==4)))&&(inpflag==true)&&(decflag==true))

{output(A,B,X,n,s);decflag=false;}

if(((ch=='d')||(ch=='D')||((ch==13)&&(m_num==3)))&&(inpflag==true))

{decision(A,B,X,n,s);decflag=true;}

if(((ch=='d')||(ch=='D')||((ch==13)&&(m_num==3)))&&(inpflag==false))

{

window(28,9,55,14);

textbackground(BLACK);

clrscr();

window(27,8,54,13);

textbackground(LIGHTGRAY);

textcolor(BLACK);

clrscr();

cprintf("\r\n „ ­­лҐ ­Ґ ўўҐ¤Ґ­л!");

cprintf("\n\n\n\r „«п ўл室 ­ ¦¬ЁвҐ Esc");

do

{ch2=(char)getch();}

while(ch2!=27);

}

if(ch==77) {if(m_num!=4) m_num++;} //клавиши "стрелка вправо" и

if(ch==75) {if(m_num!=1) m_num--;} //"стрелка влево"

}

while(ch!=45); //пока не нажата комбинация ALT+X

}

//==============================================================================

Приложение Г

(справочное)

Библиографический список

1. Боглаев, Ю.П. Вычислительная математика и программирование: Учебное пособие для студентов ВТУЗов[текст]/Ю.П. Боглаев. -М.: Высшая школа, 1990.- 544с.

2. Подбельский, В.В. Программирование на языке Си: Учебное пособие [Текст]/ С.С. Фомин - М.: Финансы и статистика, 1998. - 600 с.

Страницы: 1, 2, 3, 4



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.