Вычисление площади сложной фигуры методом имитационного моделирования (CURSOV)

Посмотреть архив целиком




ÌÎÑÊÎÂÑÊÈÉ ÃÎÑÓÄÀÐÑÒÂÅÍÍÛÉ ÈÍÑÒÈÒÓÒ ÝËÅÊÒÐÎÍÍÎÉ ÒÅÕÍÈÊÈ

(ÒÅÕÍÈ×ÅÑÊÈÉ ÓÍÈÂÅÐÑÈÒÅÒ)













Ðàñ÷åò ïëîùàäè ñëîæíîé ôèãóðû ñ ïîìîùüþ ìåòîäà

èìèòàöåîííîãî ìîäåëèðîâàíèÿ .




Ëîãâèíåíêî Â.












Ìîñêâà. 1995 ã.




Çàäàíèå: Ðàçðàáîòàòü ïðîãðàììó, ïîçâîëÿþùóþ ñ ïîìîùüþ ìåòîäà èìèòàöèîííîãî ìîäåëèðîâàíèÿ ðàññ÷èòàòü ïëîùàäü ñëîæíîé ôèãóðû, îãðàíè÷åííîé ñâåðõó êðèâîé U=Y1(x) , ñíèçó V=Y2(x).



1. Äëÿ ðåøåíèÿ äàííîé çàäà÷è ïðèìåíèì ñëåäóþùèé ìåòîä.


Îãðàíè÷èì çàäàííóþ ôèãóðó ïðÿìîóãîëüíèêîì, ñòîðîíû êîòîðîãî ïðîõîäÿò:

÷åðåç òî÷êè ìàêñèìàëüíîãî è ìèíèìàëüíîãî çíà÷åíèÿ ôóíêöèé è ïàðàëëåëüíû îñÿì àáñöèññ;

÷åðåç ëåâóþ è ïðàâóþ ãðàíè÷íûå òî÷êè îáëàñòè îïðåäåëåíèÿ àðãóìåíòà è ïàðàëëåëüíû îñÿì îðäèíàò.

Èñïîëüçóÿ äàò÷èê ñëó÷àéíûõ ÷èñåë ðàçûãðûâàþòñÿ êîîðäèíàòû ñëó÷àéíîé òî÷êè èç ýòîãî ïðÿìîóãîëüíèêà . Ïðîâåðÿåì ïîïàäàåòå òî÷êè â çàäàííóþ ôèãóðó. Çíàÿ ïëîùàäü ïðÿìîóãîëüíèêà è îòíîøåíèå ïîïàâøèõ òî÷åê ê èõ îáùåìó ÷èñëó ðàçûãðàííûõ, ìîæíî îöåíèòü ïëîùàäü èíòåðåñóþùåé íàñ ôèãóðû.


2. Òåõíè÷åñêèå õàðàêòåðèñòèêè îáúåêòà èññëåäîâàíèÿ:

2.1. Äèàïàçîí çíà÷åíèé ïàðàìåòðîâ çàäà÷è.

Ìíîæåñòâî êðèâûõ îãðàíè÷èì ïîëèíîìàìè òðåòüåãî ïîðÿäêà, â âèäó òîãî ÷òî ïîëèíîìû áîëåå âûñîêîãî ïîðÿäêà ñèëüíî óâåëè÷èâàþò âðåìÿ âû÷èñëåíèÿ. Ïðè÷åì äëÿ íàãëÿäíîñòè ðåøåíèÿ âïîëíå äîñòàòî÷íî ïîðÿäêà "3".

Êîýôôèöèåíòû ïîëèíîìà îãðàíè÷èì äèàïàçîíîì [-100,100] .


Îáëàñòü îïðåäåëåíèÿ îãðàíè÷èì äèàïàçîíîì [-100,100].


Ýòè îãðàíè÷åíèÿ ââåäåíû äëÿ áîëåå íàãëÿäíîãî ðåøåíèÿ çàäà÷è, è èçìåíèòü èõ íå ñ òåõíè÷åñêîé òî÷êè çðåíèÿ íå ñëîæíî.




3. Ðåøåíèå çàäà÷è.


Äàííàÿ çàäà÷à ðåøåíà â ñðåäå Turbo C. Äëÿ ðåøåíèÿ ïîòðåáîâàëîñü îáùóþ çàäà÷ó ðàçáèòü íà íåñêîëüêî íåáîëüøèõ çàäà÷ (ïðîöåäóð).

À èìåííî îòäåëüíî( â âèäå ïðîöåäóð) áûëè ðåøåíû çàäà÷è


-ââîä ïàðàìåòðîâ; |

ïðîöåäóðà get_poly |

|

-ñîîáùåíèå îá îøèáêå ïðè ââîäå; | Ôàéë WINDOW.C

ïðîöåäóðà talkerror |

|

-ðèñîâàíèå ðàìêè îêíà; |

ïðîöåäóðà border |






-âû÷èñëåíèå ìèíèìàëüíîãî è |

ìàêñèìàëüíîãî çíà÷åíèè ôóíêöèé ; |

ïðîöåäóðà f_max |

|

-âû÷èñëåíèå çíà÷åíèÿ ïîëèíîìà â |

çàäàííîé òî÷êå; | Ôàéë MATIM.C

ïðîöåäóðà fun |

|

-âû÷èñëåíèå êîðíåé êóáè÷íîãî |

óðàâíåíèÿ; |

ïðîöåäóðà f_root |



-âû÷èñëåíèå èíòåãðàëà ÷èñëåííûì |

ìåòîäîì; |

ïðîöåäóðà i_num |

| Ôàéë F_INTEGER.C

-âû÷èñëåíèå èíòåãðàëà ñ ïîìîùüþ |

èìèòàöèîííîãî ìîäåëèðîâàíèÿ; |

ïðîöåäóðà i_rand |



-èíèöèàëèçàöèÿ ãðàôè÷åñêîãî ðåæèìà |

ïðîöåäóðà init |

|

-îáâîäêà íåïðåðûâíîãî êîíòóðà | Ôàéë DRAFT.C

ïðîöåäóðà f_draft |

|

- âûðèñîâêà îñåé êîîðäèíàò |

ïðîöåäóðà osi |



-âûðèñîâêè ãðàôèêîâ ôóíêöèé è | Ôàéë DRAFT_F.C

øòðèõîâêà çàäàííîé ïëîùàäè |

ïðîöåäóðà draft_f |



-âûðèñîâêà ãðàôèêîâ âû÷èñëåíèÿ |

ïëîùàäè ðàçíûìè ìåòîäàìè è âûâîä | Ôàéë DRAFT_N.C

òàáëèöû ðåçóëüòàòîâ âû÷èñëåíèÿ |

ïðîöåäóðà draft_n |










Ñõåìà àëãîðèòìà èìååò âèä:













4. Îïèñàíèå ïðîöåäóð èñïîëüçóåìûé â ïðîãðàììå.


4.1 Ôàéë WINDOW.C.


4.1.1 Ïðîöåäóðà ââîäà ïàðàìåòðîâ.

void get_poly( float *b3,float *b2,float *b1,float *b0, //-êîýôôèöèåíòû ïîëèíîìà Y1

fliat *c3,float *c2,float *c1,float *c0, //-êîýôôèöèåíòû ïîëèíîìà Y2

float *x1,float *x2, // îáëàñòü îïðåäåëåíèÿ [x1,x2]

int *N ) // êîëè÷åñòâî îáðàùåíèé ê ãåíåðàòîðó //ñëó÷àéíûõ ÷èñåë


4.1.2 Ïðîöåäóðà ðèñîâàíèÿ ðàìêè îêíà.

void border(int sx, int sy, int en, int ey) // ðèñóåò ðàìêó ñ êîîðäèíàòàìè ëåâîãî âåðõíåãî // óãëà (sx,sy) è êîîðäèíàòàìè ïðàâîãî íèæíåãî // óãëà (ex,ey)

4.1.3 Ïðîöåäóðà ñîîáùåíèÿ îá îøèáêå ïðè ââîäå.

void talkerror(void) -

Ïðîöåäóðà ïîäàåò çâóêîâîé ñèãíàë è âûâîäèò íà ýêðàí ñîîáùåíèå îá îøèáêå ïðè ââîäå.


4.2. Ôàéë MATIM.C


4.2.1 Ïðîöåäóðà âû÷èñëåíèÿ ìàêñèìàëüíîãî è ìèíèìàëüíîãî çíà÷åíèé ôóíêöèé íà çàäàííîì èíòåðâàëå.

void f_max(float b3,float b2,float b1,float b0, //-êîýôôèöèåíòû ïîëèíîìà Y1

fliat c3,float c2,float c1,float c0, //-êîýôôèöèåíòû ïîëèíîìà Y2

float x1,float x2, // îáëàñòü îïðåäåëåíèÿ [x1,x2]

float *amin, float *amax) // ìèíèìàëüíîå è ìàêñèìàëüíîå çíà÷åíèÿ // ôóíêöèé

4.2.2 Ïðîöåäóðà âû÷èñëåíèÿ çíà÷åíèÿ ïîëèíîìà â äàííîé òî÷êå.

float fun(float b3,float b2,float b1,float b0, //-êîýôôèöèåíòû ïîëèíîìà

float x)

Âîçâðàùàåò çíà÷åíèå ïîëèíîìà â òî÷êå õ.


4.2.3 Ïðîöåäóðà âû÷èñëåíèÿ êîðíåé êóáè÷íîãî óðàâíåíèÿ.

int f_root(float b3,float b2,float b1,float b0, //-êîýôôèöèåíòû ïîëèíîìà Y1

fliat c3,float c2,float c1,float c0, //-êîýôôèöèåíòû ïîëèíîìà Y2

float x1,float x2, // îáëàñòü îïðåäåëåíèÿ [x1,x2]

float e, // òî÷íîñòü âû÷èñëåíèÿ êîðíåé

float *k1,float *k2,float *k3) // çíà÷åíèÿ êîðíåé // ôóíêöèé

Âîçâðàùàåò êîëè÷åñòâî äåéñòâèòåëüíûõ êîðíåé íà äàííîì èíòåðâàëå.


4.3. Ôàéë F_INTEGER.C


4.3.1 Ïðîöåäóðà âû÷èñëåíèÿ ïëîùàäè ñëîæíîé ôèãóðû ÷èñëåííûì ìåòîäîì.

float f_num(float b3,float b2,float b1,float b0, //-êîýôèöèåíòû ïîëèíîìà Y1

fliat c3,float c2,float c1,float c0, //-êîýôèöèåíòû ïîëèíîìà Y2

float x1,float x2) // îáëàñòü îïðåäåëåíèÿ [x1,x2]

Âû÷èñëÿåò ïëîùàäü ñëîæíîé ôèãóðû.


4.3.2 Ïðîöåäóðà âû÷èñëåíèÿ ïëîùàäè ñëîæíîé ôèãóðû c ïîìîùüþ ìåòîäà èìèòàöèîííîãî ìîäåëðîâàíèÿ

float f_(float b3,float b2,float b1,float b0, //-êîýôèöèåíòû ïîëèíîìà Y1

fliat c3,float c2,float c1,float c0, //-êîýôèöèåíòû ïîëèíîìà Y2

float x1,float x2, // îáëàñòü îïðåäåëåíèÿ [x1,x2]

float fmin,float fmax, // ìèíèìàëüíîå è ìàêñèìàëüíîå çíà÷åíèÿ //ôóíêöèé íà äàííîì èíòåðâàëå

int n) // êîëè÷åñòâî îáðàùåíèé ê ãåíåðàòîðó // ñëó÷àéíûé ÷èñåë

Âû÷èñëÿåò ïëîùàäü ñëîæíîé ôèãóðû ñ ïîìîùüþ ìåòîäà èìèòàöèîííîãî ìîäåëèðîâàíèÿ.


4.4 Ôàéë DRAFT.C


4.4.1 Ïðîöåäóðà èíèöèàëèçàöèè ãðàôè÷åñêîãî ðåæèìà.

void init (void)


4.4.2 Ïðîöåäóðà îáâîäêè íåïðåðûâíîãî êîíòóðà.

void f_draft (float b0,float b1,float b2,float b3, //-êîýôèöèåíòû ïîëèíîìà

float x1,float x2) // îáëàñòü îïðåäåëåíèÿ [x1,x2]


4.4.3 Ïðîöåäóðà âûðèñîâêè îñåé êîîðäèíàò.

void osi ( float x1, float x2, // îáëàñòü îïðåäåëåíèÿ ôóíêöèé

float b) // ìàøòàáíûé êîýôèöèåíò ðàñ÷èòûâàåòñÿ ïî ôîðìóëå

// b= j - Fmin*(i-j) / (Fmax - Fmin)

// ãäå i,j - çàäàþò ïîëîæåíèå ãðàôèêà íà ýêðàíå

// Fmin,Fmax - ìèíèìàëüíîå è ìàêñèìàëüíîå çíà÷åíèÿ //ôóíêöèé íà äàííîì èíòåðâàëå


4.5 Ôàéë DRAFT_F.


4.5.1 Ïðîöåäóðà âûðèñîâêè ãðàôèêîâ ôóíêöèé.

void draft_f (float b3,float b2,float b1,float b0, //-êîýôèöèåíòû ïîëèíîìà Y1

fliat c3,float c2,float c1,float c0, //-êîýôèöèåíòû ïîëèíîìà Y2

float x1,float x2, // îáëàñòü îïðåäåëåíèÿ [x1,x2]

float fmin,float fmax, // ìèíèìàëüíîå è ìàêñèìàëüíîå çíà÷åíèÿ //ôóíêöèé íà äàííîì èíòåðâàëå

int k, int i, int l, int j) // êîîðäèíàòû, çàäàþùèå ïîëîæåíèå //ãðàôèêà íà ýêðàíå

4.6 Ôàéë DRAFT_N.


4.6.1 Ïðîöåäóðà âûðèñîâêè ãðàôèêîâ çíà÷åíèé ïîëùàäåé ðàñ÷èòàííûõ ÷èñëâûì ìåòîäîì è ìåòîäîì èìèòàöèîííîãî ìîäåëèðîâàíèÿ â çàâèñèìîñòè îò êîëè÷åñòâà îáðàùåíèé ê ãåíåðàòîðó ñëó÷àéíûõ ÷èñåë.

void draft_e (float b3,float b2,float b1,float b0, //-êîýôèöèåíòû ïîëèíîìà Y1

fliat c3,float c2,float c1,float c0, //-êîýôèöèåíòû ïîëèíîìà Y2

float x1,float x2, // îáëàñòü îïðåäåëåíèÿ [x1,x2]

float fmin,float fmax, // ìèíèìàëüíîå è ìàêñèìàëüíîå çíà÷åíèÿ //ôóíêöèé íà äàííîì èíòåðâàëå

float Sn, // ïëîùàäü ðàññ÷èòàííàÿ ÷èñëîâûì ìåòîäîì

int k, int i, int l, int j) // êîîðäèíàòû, çàäàþùèå ïîëîæåíèå //ãðàôèêà íà ýêðàíå


4.7 Ôàéë SQ.C

Âñå ôàéëû îáúåäèíåíû â ãëàâíîé ïðîãðàììå SQ.C, êîòîðàÿ ÿâëÿåòñÿ îñíîâíîé è êîîðäèíèðóåò ðàáîòó ïðîöåäóð.



5 Èñïîëüçîâàíèå ïðîãðàììû.

Äëÿ èñïîëüçîâàíèÿ äàííîé ïðîãðàììû íåîáõîäèìà îïåðàöèîííàÿ ñðåäà MS DOS,

ôàéë egavega.bgi, è ñîáñòâåííî ñàìà ñêîìïèëèðîâàííàÿ ïðîãðàììà sq.exe.


6 Èñõîäíûé òåêñò ïðîãðàììû äàí â ïðèëîæåíèè ¹1.


7 Òåñîâûé ïðèìåð ïîêàçàí â ïðèëîæåíèè ¹2.






8 Ñïèñîê èñïîëüçîâàííîé ëèòåðàòóðû.

8.1 ßçûê ïðîãðàììèðîâàíèÿ Ñè äëÿ ïåðñîíàëüíîãî êîìïüþòåðà .

Ñ.Î. Áî÷êîâ, Ä.Ì. Ñóááîòèí.

8.2 Ñ++ . Îïèñàíèå ÿçûêà ïðîãðàììèðîâàíèÿ.

Áüÿðí Ñòðàóñòðàï.

8.3 TURBO C. User's Guide. Borland International, Inc. 1988.

8.4 TURBO C. Reference Guide. Borland International, Inc. 1988.



9 Çàêëþ÷åíèå.

9.1 Ñîïîñòàâëåíèå ðåçóëüòàòîâ ðàáîòû ñ òåðáîâàíèåì çàäàíèÿ.

Ñîïîñòàâëÿÿ ðåçóëüòàòû ðàáîòû ñ òðåáîâàíèåì çàäàíèÿ, ìîæíî ñêàçàòü ÷òî çàäà÷à ðåøåíà â ïîëíîé ìåðå, çà èñêëþ÷åíèåì, áûòü ìîæåò îáùíîñòè îòíîñèòåëüíî âîçìîæíîñòè ðàñ÷åòà äëÿ ìíîãèå êëàññîâ ôóíêöèé. Íî ðåøåíèå áîëåå îáùåé çàäà÷è ( ò.å. âîçìîæíîñòü ðàñ÷åòà äëÿ ìíîãèõ êëàññîâ ôóíêöèé ) ïðåäñòàâëÿåòñÿ çíà÷èòåëüíî áîëåå ãðîìîçäêèì, è âîîáùå ÿâëÿåòñÿ îòäåëüíîé çàäà÷åé. Ïîýòîìó àâòîð íå ñ÷åë íóæíûì ðàçðàáàòûâàòü àëãîðèòì ââîäà ìíîãèõ ôóíêöèé è çàîñòðèë âíèìàíèå ñîáñòâåííî íà ñàìîé çàäà÷å - ðàñ÷åòå ïëîùàäè ñëîæíîé ôèãóðû ñ ïîìîùüþ ìåòîäà èìèòàöèîííîãî ìîäåëèðîâàíèÿ è ñðàâíåíèå ýòîãî ìåòîäà ñ ÷èñëîâûìè ìåòîäàìè.




9.2 Ðåêîìåíäàöèè ïî óëó÷øåíèþ ïðîãðàììû.

Ïðè ðàçðàáîòêå ïðîãðàììû àâòîð óïóñòèë âîçìîæíîñòü ðàáîòû ñ ÷èñëîâûìè ìàññèâàìè. Ïîýòîìó, ìîæíî óëó÷øèòü ïðîãðàììó ïåðåïèñàâ ðÿä ïðîöåäóð ïîä ìàññèâû , ÷òî ñäåëàåò ïðîãðàììó ìåíåå ìàññèâíîé è áîëåå íàãëÿäíîé. Øèðîêîå

âîçìîæíîñòè ïî óëó÷øåíèþ ïðîãðàììû â îáëàñòè ðàçðàáîòêè àëãîðèòìîâ ââîäà ðàçëè÷íûé êëàññîâ ôóíêöèé.














































Äëÿ ðåøåíèÿ çàäà÷è ìåòîäîì èìèòàöèîííîãî ìîäåëèðîâàíèÿ îãðàíè÷èì äàííóþ









































































































16



Случайные файлы

Файл
Lermontov.doc
Neobh.doc
CBRR2449.DOC
603-1.rtf
178412.rtf