48647 (608705), страница 3

Файл №608705 48647 (Разработка программы для решения систем линейных уравнений) 3 страница48647 (608705) страница 32016-07-30СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 3)

}

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

//текст задания

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

void task()

{

char ch;

window(21,6,62,20);

textbackground(BLACK);

clrscr();

window(20,5,61,19);

textbackground(LIGHTGRAY);

textcolor(BLACK);

clrscr();

cprintf("\n\n\n\r ђ §а Ў®в вм Їа®Ја ¬¬г ¤«п аҐиҐ­Ёп бЁб⥬");

cprintf("\n\r «Ё­Ґ©­ле га ў­Ґ­Ё©. ђҐ «Ё§®ў вм ¬Ґв®¤л: ");

cprintf("\n\r )Їа®бвле ЁвҐа жЁ©; Ў)‡Ґ©¤Ґ«п. ЏаҐ¤гᬮ-");

cprintf("\n\r ваҐвм ўў®¤ зЁб« га ў­Ґ­Ё©(¤® 10), ¬ в-");

cprintf("\n\r аЁжл Є®нддЁжЁҐ­в®ў Ё ўҐЄв®а бў®Ў®¤­ле ");

cprintf("\n\r з«Ґ­®ў.");

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

do

{

ch=(char)getch();

}

while(ch!=13); //пока не нажат ENTER

}

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

//окно help

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

void help()

{

char ans;

int h_num=1;

do

{

menu(); //отрисовка меню

window(3,4,12,5);

textbackground(BLACK);

clrscr();

window(2,3,11,4);

textbackground(LIGHTGRAY);

clrscr();

textcolor(RED);

cprintf("%s"," A");

textcolor(BLACK);

cprintf("%s","bout");

textcolor(RED);

cprintf("%s","\n\r T");

textcolor(BLACK);

cprintf("%s","ask");

cursor(h_num+5);

ans=(char)getch();

if(ans==80) {if(h_num!=2) h_num++;} //если нажали "стрелку вниз"

if(ans==72) {if(h_num!=1) h_num--;} //если нажали "стрелку вверх"

}

while((ans!=27)&&(ans!='a')&&(ans!='A')&&(ans!='t')&&(ans!='T')&&(ans!=13));

if((ans=='t')||(ans=='T')||((h_num==2)&&(ans==13)))

{

window(2,3,14,6);

textbackground(BLACK);

clrscr();

task(); //окно вывода текста задания

}

if((ans=='a')||(ans=='A')||((h_num==1)&&(ans==13)))

{

window(2,3,14,6);

textbackground(BLACK);

clrscr();

about(); //окно вывода информации о разработчике

}

}

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

//функция ввода данных

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

void input(double **&A,double *&B,int &n)

{

char ch;

window(8,3,20,6);

textbackground(BLACK);

clrscr();

window(15,6,64,18);

textbackground(LIGHTGRAY);

clrscr();

textcolor(BLACK);

cprintf("%s","\n\n\r ‚ўҐ¤ЁвҐ зЁб«® га ў­Ґ­Ё© (1..10)");

window(48,8,51,8);

textbackground(BLACK);

textcolor(LIGHTGRAY);

clrscr();

bool fl=false;

do //защита от ввода числа уравнений более 10

{

n=n_input(2); //функция ввода двузначного числа

if((n=1)) fl=true;

else clrscr();

}

while(fl!=true);

A=(double**)malloc(n*n*sizeof(double)); //выделение памяти для массива

B=(double*)malloc(n*sizeof(double));

window(15,10,64,10);

textbackground(LIGHTGRAY);

clrscr();

textcolor(BLACK);

cprintf("%s","\r ‚ўҐ¤ЁвҐ н«Ґ¬Ґ­вл ¬ ваЁжл Є®нддЁжЁҐ­в®ў");

window(15,11,64,11);

textbackground(LIGHTGRAY);

clrscr();

for(int i=0;i

{

A[i]=(double*)malloc(n*sizeof(double));

for(int j=0;j

{

clrscr();

cprintf("\r A[%d][%d]=",i+1,j+1);

A[i][j]=float_input(); //ввод действительного числа

}

}

window(15,13,64,13);

textbackground(LIGHTGRAY);

clrscr();

cprintf("%s","\n\n\r ‚ўҐ¤ЁвҐ н«Ґ¬Ґ­вл ўҐЄв®а бў®Ў®¤­ле з«Ґ­®ў");

window(15,14,64,14);

textbackground(LIGHTGRAY);

clrscr();

for(int i=0;i

{

clrscr();

cprintf("\r B[%d]=",i+1);

B[i]=float_input(); //ввод действительного числа

}

window(15,17,64,17);

textbackground(LIGHTGRAY);

clrscr();

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

do

{ch=(char)getch();}

while(ch!=13); //пока не нажат ENTER

}

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

//функция решения

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

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

{

char ch,ans;

int k;

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

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

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

for(int i=0;i

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

{

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

for(int j=0;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

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

{

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

for(int j=0;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 „«п Їа®¤®«¦Ґ­Ёп ­ ¦¬ЁвҐ ");

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

{

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 „«п Їа®¤®«¦Ґ­Ёп ­ ¦¬ЁвҐ ");

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

{

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

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

textcolor(BLACK);

clrscr();

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

{

for(int i=0;i

{

cprintf("\n\r ");

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

{

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

else

{

if(j

{

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

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

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

{

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

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

textcolor(WHITE);

do

{

clrscr();

for(int i=xx-5;i

{

cprintf("\n\r ");

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

{

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

else

{

if(j

{

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

{

cprintf("\n\r ");

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

{

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

else

{

if(j

{

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„«п Їа®¤®«¦Ґ­Ёп ­ ¦¬ЁвҐ "); //подсвечиваем строку синим фоном

} //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 с.

Характеристики

Тип файла
Документ
Размер
191,47 Kb
Тип материала
Учебное заведение
Неизвестно

Список файлов курсовой работы

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7028
Авторов
на СтудИзбе
260
Средний доход
с одного платного файла
Обучение Подробнее