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

Міністерство освіти і науки України

Український Державній Університет Водного господарства і природо
користування

Кафедра електротехніки і автоматики

Курсова робота

з дисципліни “Програмування і алгоритмічні мови”

на тему:

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

Виконав:

студент 1-го курсу

ФПМ і КІС

АУТП 12

Дмитрук М.

Перевірив:

Пастушенко

Рівне 2002

Завдання

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

На вибір першої опції меню видати на екран таблицю всіх значень функції
двох аргументів Х (заданий масивом) і Y (заданий на інтервалі
[Yпоч;Yкін]). Масив Х цілих чисел згенерувати з використанням
вбудованого в мову програмування генератора псевдовипадкових чисел у
діапазоні -20(45. Величини Хпоч, Хкін і крок зміни аргументу h ввести з
клавіатури.

ctg Хі –3(e (x3і –y2) і ( [1,8]

Z=

(xi(y ( arccos 2y/x

На вибір другої опції меню уточнити корінь рівняння

sin X2 + cos X2 – 10 X= 0

методом ітерацій з точністю 0.001.

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

Вступ………………………………………………………….
…………………………………………………………3

Задача і спосіб простої
ітерації………………………………………………….4

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

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

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

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

Вступ

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

Задача і спосіб простої ітерації

Перетворимо наше рівняння f(x)=sinx2+cosx2-10x=0 до виду x=((x).
Оскільки довільний перехід не завжди забезпечує збіжність методу, то
використаємо методику, що гарантує відповідне перетворення рівняння до
виду x=((x).

. Значення k згідно вище наведеного співвідношення |k|(Q/2=11,96/2
вибираємо рівним k=-6 (k має відємний знак, оскільки похідна f((x)<0 на вибраному інтервалі). . Знайдемо значення q: Таким чином, знайдене представлення функції ((х) дозволяє забезпечити збіжність послідовності наближених розв’язків даного рівняння до точного цим методом.Це все використовуємо у програмі . Принцип роботи: Запустивши програму ми можемо побачити титулку курсової роботи. При натиснені будь-якої клавіши ми побачимо меню з трьох пунктів. 1 пункт“Табуляція ”-видає на екран таблицю всіх значень функції двох аргументів Х (заданий масивом) і Y (заданий на інтервалі [Yпоч;Yкін]). Масив Х цілих чисел згенерувати з використанням вбудованого в мову програмування генератора псевдовипадкових чисел у діапазоні -20(45. Величини Yпоч, Yкін і крок зміни аргументу h ввести з клавіатури. ctg Хі –3(e (x3і –y2) і ( [1,8] Z= (xi(y ( arccos 2y/x 2 пункт “Знаходження корення”-Видаэ на екран результати обрахунку значення x та y методом простої ітерації .Обраховували таке рівняння sin X2 + cos X2 – 10 X= 0 з точністю 0.001. 3 пункт “вихід”-при натиснені ENTER ви виходете з прграми. Текст програми //---------------------------------------------------------------------- ------------------------------ #include

#include

#include

#include

#include

#define PI M_PI

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(«58.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>4;

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

x++;

np++;

}

if (npeps*(1-q)/q)

{x0=x1; k++; goto A;}

printf(«\n x1=%.7f k=%d «,x1,k);

printf(«\n y=%.7f «,(sin(x1*x1)+cos(x1*x1)-10*x1));

getch( );

}

void Pidgotovka(void);

void *saucer;

int size;

float *x;

float *z;

float *Y;

float h,a,p,s;

float dx,mt_,mlp_,mpp_,sm,INTG;

void main()

{

int STEP=100;

char c,vub;

int X,y,q=1,i,u=5,nuz,wer,poo;

int gdriver=DETECT,gmode,errorcode;

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

errorcode=graphresult();

if(errorcode !=grOk)

{

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

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

getch();

exit(1);

} // сторинка про дани

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 + BLINK);

printf(» «);

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

printf(«\n»);

textcolor(7);

printf(«\t\t»);

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

printf(«\n»);

textcolor(7);

printf(«\t\t»);

cprintf(» на тему:\»Обробка масиву та використання простоъ
интерацыъ»);

printf(«\n»);

printf(«\t\t\t «);

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(GREEN + BLINK );

printf(«\n\t\t\t»);

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

getch();

textcolor(GREEN );

setgraphmode(getgraphmode());

poch:

q=1;

X=140;

y=110;

Pidgotovka();

// меню

setfillstyle(1,7);

setcolor(4);

bar3d(225,125 ,377,170,0,0);

outtextxy(259, 145, «Табуляция»);

bar3d(225,225 ,377,270,0,0);

outtextxy(226,245,»Знаходження корення»);

bar3d(225,325 ,377,370,0,0);

outtextxy(285, 349, «exit»);

// перемищення в меню

do

{

putimage(X+240,y,saucer,XOR_PUT);

putimage(X,y,saucer,XOR_PUT);

c=getch();

putimage(X+240,y,saucer,XOR_PUT);

putimage(X,y,saucer,XOR_PUT);

switch(c)

{

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

case 72: y-=STEP;q—;if(y==10){y=310;q=3;}break;

case 13: if(q==2){restorecrtmode();

inter();

setgraphmode(getgraphmode());

goto poch;

};

if(q==3)goto popa;if(q==1){

restorecrtmode();

x=(float*)malloc(8*sizeof(float));

z=(float*)malloc(8*sizeof(float));

Y=(float*)malloc(8*sizeof(float));

printf(«Введить початкове значення y(1)=»);

scanf(«%f»,&Y[0]);

printf(«\nВВедыть кинцеве значення y(8)=»);

scanf(«%f»,&Y[7]);

printf(«\nВВедыть крок h=»);

scanf(«%f»,&h);

for(i=0;i<=7;i++) x[i]=(rand()%65)-20; for(i=1;i<=6;i++) Y[i]=Y[i-1]+h; for(i=0;i<=7;i++) { p=(1/tan(x[i])-3*pow(PI,2.71)*(pow(x[i],3)-Y[i]*Y[i])); a=(pow(x[i],Y[i])); //if((2*Y[i]/x[i])>=0 && (2*Y[i]/x[i])<=PI) s=cos((2*Y[i]/x[i])); //else s=0; z[i]=p/(a-s); } for(i=0;i<=7;i++) {printf("\n x[%d]=%f",i+1,x[i]); printf("\t y[%d]=%f",i+1,Y[i]); printf("\t z[%d]=%f",i+1,z[i]); } free(x); free(z); free(Y); getch(); setgraphmode(getgraphmode()); goto poch; } } } while(c!=27); popa: free(saucer); closegraph(); } void Pidgotovka(void ) { draw(0,-2); /*setcolor(2); setfillstyle(1,2); sector(590,90,0,360,10,10); sector(600,105,0,360,10,10); sector(610,90,0,360,10,10); */ size=imagesize(140,100,200,160); saucer=malloc(size); getimage(140,100,200,160,saucer); putimage(140,100,saucer,XOR_PUT); } Приклад При запуску пункту 1 вводимо Введить початкове значення y(1)=15 ВВедыть кинцеве значення y(8)=65 ВВедыть крок h=2 x[1]=1.000000 y[1]=15.000000 z[1]=17677.580078 x[2]=-20.000000y[2]=17.000000 z[2]=-0.000000 x[3]=42.000000 y[3]=19.000000 z[3]=-0.000000 x[4]=30.000000 y[4]=21.000000 z[4]=-0.000000 x[5]=1.000000 y[5]=23.000000 z[5]=24606.070312 x[6]=12.000000 y[6]=25.000000 z[6]=-0.000000 x[7]=25.000000 y[7]=27.000000 z[7]=-0.000000 x[8]=25.000000 y[8]=65.000000 z[8]=-0.000000 При запуску пункту 2 маємо x=0.1010120 k=253 y=0.0000314 При запуску пункту 3 виходимо з програми. Висновок Завдяки цій курсовій роботі я закріпив здобуті теоретичні знання з курсу “Програмування та алгоритмічні мови”,навчився застосувати їх при вирішенні питань виробничого характеру. Склав програму, яка знаходила корінь рівняння за допомогою методу простої ітерації та оброблювала масив та використовувала його. Література 1.Крис Паппас, Уїльям Мюррей, Програмирование на С и С++, “Ирина”, BHV,Киев,2000. Ця курсова робота люб'язно надана HYPERLINK "http://rivneclub.narod.ru/kontakt.html" Олександром Подранецьким PAGE PAGE 14

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *