Зворотний зв'язок

Обробка масиву та використання простої ітерації

Завдання

Завдання. Скласти на одній з алгоритмічних мов програму, що запускається і видає на екран меню з двох пунктів (рішення системи, вихід).

На вибір першої опції меню ввести з чи клавіатури згенерувати за допомогою вбудованого в мову генератора псевдовипадкових чисел (запросити спосіб) матрицю коефіцієнтів при невідомих і масив вільних членів системи n рівнянь з n невідомими і, при виконанні необхідних умов одержати рішення системи за допомогою методу ітерацій з точністю 0.000001. Прийняти, що 2  n  10. Значення n=6 ввести з клавіатури по запиту програми. Здійснити перевірку отриманого рішення.

На вибір другої опції чи меню натисканні користувачем на клавішу ESC здійснити вихід із програми.

Зміст

1.Вступ.....................................................................................................................................3

2.Задача і теорія ітерації.................................................................................4

3.Текст програми.......................................................................................................5

4.Приклад............................................................................................................................11

5.Висновок......................................................................................................................... 12

6.Література......................................................................................................................13

Вступ

Для закріплення здобутих теоретичних знань, застосування їх при вирішенні питань математичного характеру, а також з метою набуття навиків по створенню програмного забезпечення , виконується курсова робота з дисципліни “Програмування та алгоритмічні мови” . В курсовій роботі необхідно розробити програму на мові програмування C++,яка знаходила корені системи рівняннь за допомогою методу простої ітерації .Важливо також щоб програма була універсальною, тобто працювала при різних даних.

Задача і теорія ітерації

Завдання. Скласти на одній з алгоритмічних мов програму, що запускається і видає на екран меню з двох пунктів (рішення системи, вихід).

На вибір першої опції меню ввести з чи клавіатури згенерувати за допомогою вбудованого в мову генератора псевдовипадкових чисел (запросити спосіб) матрицю коефіцієнтів при невідомих і масив вільних членів системи n рівнянь з n невідомими і, при виконанні необхідних умов одержати рішення системи за допомогою методу ітерацій з точністю 0.000001. Прийняти, що 2  n  10. Значення n=6 ввести з клавіатури по запиту програми. Здійснити перевірку отриманого рішення.

Ітераційні методи мають в основі своїй повторювальні процеси уточнення коренів заданої точності.У більшості випадків самі реалізації методів є не складними, однак для досягнення заданої точності вимагається досить велика кількість повторів.

Нехай задана СЛАР

Одним із методів ітерації є метод Якобі . Розпишемо :

А=Ав+Ан+d, де

Ан= d=Ав=

Ітераційний процес виду

при домножуючій матриці С=d відповідає методу простої ітерації . Цей метод називається ще методом Якобі у компонентній формі система (10) матиме вигляд :

Систему (11) зручно використовувати при чисельній реалізації методу на ЕОМ.(в нашому випадку)

Встановимо умови збіжності ітераційного процесу (10),(12) . Для цього визначимо норму відображаючого оператора . В якості норми виберемо (суму норми елементів матриці ) , тоді

Тепер дана умова (13) визначає критерій для збіжності ітераційного процесу і передбачає обв’язковість діагональної переввваги матриці А . Таким чином перед використанням ітераційних співвідношень методу Якобі необхідно спочатку перевірити матрицю А на діагональну перевагу . Якщо (13) виконується, то в якості помножуючою матриці вибирається обернена до діагональної частини матриці А : С=D . Якщо ж умова діагональної переваги не виконується , то необхідно при допомозі лінійних перетворень звести систему (1) , до еквівалентної Ах=В ,так щоб для неї виконувалась ця умова ,і тоді можна використовувати метод Якобі.

Принцип роботи:

Запустивши програму ми можемо побачити титулку курсової роботи.

Текст програми

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

#include

#include

#include

#include

#include

#define N 10

float a[N][N],b[N],x[N],y[N];

float sam [N],dil[N];

void maxa(void)

{

float suma;

int n,i,j,q;

char calo;

restorecrtmode();

printf("Введiть кiлькiсть елементiв");

scanf("%d",&n);

if (n>10)n=10;

//-----введення чисел а------------

printf("якщо не хочете вводить числа то натисныть 1 , инакше будуте вводить");

calo=getch();

if(calo==49)

{ for(i=0;i
for(j=0;j
a[i][j]=rand()%100;

//-----введення чисел в------------

for(i=0;i
b[i]=rand()%100;}else

{

for(i=0;i
for(j=0;j
{printf("\nВведить a[%d][%d]=",i+1,j+1);

scanf("%f",&a[i][j]);

}

for(i=0;i
{ printf("\nВведить b[%d]=",i+1);

scanf("%f",&b[i]);

}}

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

for(i=0;i
x[i]=b[i]/a[i][i];

for(q=0;q<10;q++)

{

for(i=0;i
{for(j=0;j
if(j==i)suma=suma;

else suma+=x[j]*a[i][j];

y[i]=(b[i]-suma)/a[i][i];

if((y[i]-x[i])<=0.000001) goto max;

}

for(i=0;i
x[i]=y[i];

}

max:

for(i=0;i
printf("\nx[%d]=%f",i+1,x[i]);

for(i=0;i
suma+=a[i][0]*y[i];

printf("\n=%f",suma-b[0]);

getch();

setgraphmode(getgraphmode());

}

void help(void)

{ restorecrtmode();

clrscr();

textmode(BW80);

textcolor(7);

cprintf(" Мiнiстерство освiти i науки України");

printf("\n");

cprintf(" Рiвненський державний технiчний унiверситет");

printf("\n");

cprintf(" Кафедра електротехнiки i автоматики");

printf("\n\n\n\n\n");

textcolor(4);

printf(" ");

cprintf("КУРСОВА РОБОТА");

printf("\n");

textcolor(7);

printf("\t\t");

cprintf(" з курсу:\"Програмування та алгоритмiчнi мови\"");

printf("\n");

textcolor(7);

printf("\t\t");

cprintf(" на тему:\Розв'язання системи рiвнянь за ");

printf("\n");

printf("\t\t\t ");

cprintf("допомогою методу iтерацiй\"");

printf("\n\n\n\n\n\n");

textcolor(2);

printf("\t\t\t\t\t\t");

cprintf("Виконав студент першого курсу");

printf("\n");

printf("\t\t\t\t\t\t");

cprintf("групи АУТП-2");

printf("\n");

printf("\t\t\t\t\t\t");

cprintf("Лотоцький Максим");

printf("\n\n\n\n");

printf("\t\t\t ");

textcolor(58);

cprintf("РIВНЕ-2002");

textcolor(14+128 );

printf("\n\t\t\t");

cprintf(" натиснiть будь-яку клавiшу");

getch();

textcolor(GREEN );

setgraphmode(getgraphmode());

}

void draw(int x0,int y0)

{

unsigned char color[16]={0,4,2,6,1,5,3,7,8,12,10,14,9,13,11,15};

struct bmpinfo

{

char h1,h2;

unsigned long

size,reserved,offset,b,width,height;

unsigned int plans,bpp;

};

bmpinfo info;

FILE *f;

int x,y;

unsigned char b;

unsigned char bh;

unsigned char bl;

int nb;

int np;

int i,j;

if((f=fopen("34_.bmp","rb"))==NULL)

printf("-1");

//return -1;

fread(&info,sizeof(info),1,f);

if(info.bpp!=4)

printf("-2");

//return -2;

x=x0;

y=y0+info.height;

nb=(info.width/8)*4;

if((info.width/8)!=4)nb+=4;

fseek(f,info.offset,SEEK_SET);

for(i=0;i<=info.height;i++)

{

np=0;

for(j=4;j
{

b=fgetc(f);

if(np
{

bh=b>>4;

putpixel(x,y,color[bh]);

x++;

np++;

}

if (np
{

bl=b&15;

putpixel(x,y,color[bl]);

x++;

np++;

}

}

x=x0;

y--;

}

fclose(f);

}

void Pidgotovka(void);

void *saucer;

int size;

void max(void);

main()

{

int q,X,y,c,STEP=200;

int gdriver=DETECT,gmode,errorcode;

initgraph(&gdriver,&gmode,"c:\\bcpp\\bgi");

errorcode=graphresult();

if(errorcode !=grOk)

{

printf("Помилка графiчного режиму типу:%s\n",grapherrormsg(errorcode));

printf("Натиснiть будь-яку клавiшу для виходу");

getch();

exit(1);

}

help();

poch:

q=1;

X=69;

y=111;

Pidgotovka();

do

{

putimage(X,y,saucer,XOR_PUT);

c=getch();

putimage(X,y,saucer,XOR_PUT);

switch(c)

{

case 80:y+=STEP;q++;if(y==511){y=111 ;q=1;}break;

case 72: y-=STEP;q--;if(y==-89){y=311;q=2;}break;

case 13: if(q==2)goto popa;if(q==1){maxa();

goto poch; }

}

} while(c!=27);

popa:

free(saucer);

closegraph();

}

void Pidgotovka(void )

{

draw(0,-2);

size=imagesize(69,111,207,177);

saucer=malloc(size);

getimage(69,111,207,177,saucer);

putimage(69,111,saucer,XOR_PUT);

}

Приклад

Запустивши перший пункт меню будемо мати :

Введiть кiлькiсть елементiв6

якщо не хочете вводить числа то натисныть 1 , инакше будуте вводить

x[1]=0.802469

x[2]=0.831579

x[3]=0.978261

x[4]=0.000000

x[5]=0.716216

x[6]=0.371795

перевірка:

=0.000000

Висновок

Завдяки цій курсовій роботі я закріпив здобуті теоретичні знання з курсу “Програмування та алгоритмічні мови”,навчився застосувати їх при вирішенні питань виробничого характеру. Склав програму, яка знаходила корені системи рівняннь за допомогою методу простої ітерації .

Література

1.Головко Д.Б. і ін. Автоматика і автоматизація технологічних процесів,

“Либідь”, 1997 р., 230 с.

2.Крис Паппас, Уїльям Мюррей, Програмирование на С и С++,

“Ирина”, BHV,Киев,2000.


Реферати!

У нас ви зможете знайти і ознайомитися з рефератами на будь-яку тему.







Не знайшли потрібний реферат ?

Замовте написання реферату на потрібну Вам тему

Замовити реферат