Завдання: Розробити програму, що дозволяє за допомогою методу імітаційного моделювання розрахувати площу складної фігури, обмеженої зверху кривою 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 Рекомендації щодо поліпшення програми.
При розробці програми від упустив можливість роботи з числовими масивами. Тому, можна поліпшити програму переписавши ряд процедур під масиви, що зробить програму менш масивною і більш наочною. Широке
можливості щодо поліпшення програми в галузі розробки алгоритмів введення різний класів функцій.
Додаток 1. Текст програми.
Файл sq.c
/ *
Пpогpамма SQ основна
*/
# include
# include
# include
# include
# include
# include "matim.c"
# include "window.c"
# include "f_integr.c"
# include "draft.c"
# include "draft_f.c"
# include "draft_e.c"
int k = 20, i = 15, l = 270, j = 140;
void main (void)
(
float b0, b1, b2, b3, c0, c1, c2, c3, x1, x2, maxb, maxc, minb, minc, min, max, S;
int N;
do (
closegraph ();
get_poly (& b3, & b2, & b1, & b0, & c3, & c2, & c1, & c0, & x1, x2 &, & N);
f_max (b3, b2, b1, b0, x1, x2, & minb, & maxb);
f_max (c3, c2, c1, c0, x1, x2, & minc, & maxc);
max = (maxb> maxc)? maxb: maxc;
min = (minb
S = i_num (b3, b2, b1, b0, c3, c2, c1, c0, x1, x2);
init ();
draft_f (b3, b2, b1, b0, c3, c2, c1, c0, x1, x2, min, max, k, i, l, j);
draft_e (b3, b2, b1, b0, c3, c2, c1, c0, x1, x2, min, max, S, k, i 180, l +100, j 160, N);
setcolor (2);
outtextxy (0,340, "Press q for exit");
) While ((getch ())! = 'Q');
)
Файл matim.c
/ * Подпpогpамма містить пpоцедуpи математичної опрацювання функцій */
# include
# include
# include
# include
# include
/ * Обчислення максимального і мінімального
значення функції на заданому інтеpвале */
void f_max (float a3, float a2, float a1, float a0, float x1, float x2, float * amin, float * amax)
(
float dx, x, Fx, Fx1, Fmax, Fmin;
dx = (x2-x1)/500;
x = x1;
Fx1 = a3 * x * x * x + a2 * x * x + a1 * x + a0;
Fmax = Fx1;
Fmin = Fx1;
do (
x = x + dx;
Fx = a3 * x * x * x + a2 * x * x + a1 * x + a0;
if (Fx> = Fmax)
Fmax = Fx;
if (Fx
Fmin = Fx;
) While (x
* amin = Fmin;
* amax = Fmax;
)
/ * Обчислення коpней кубічного уpавненія */
int f_root (float a0, float a1, float a2, float a3, float x1, float x2, float e, float * k1, float * k2, float * k3)
(Float ku1, ku2, ku3, x, a, b;
int c = 0;
x = x1;
do
(
a = a3 * pow (x, 3) + a2 * pow (x, 2) + a1 * x + a0;
x + = e;
b = a3 * pow (x, 3) + a2 * pow (x, 2) + a1 * x + a0;
if (a * b
(C + +;
switch (c) (
case 1: ku1 = x;
break;
case 2: ku2 = x;
break;
case 3: ku3 = x;
break;
default: printf ( "n Увага! n Помилка в matim.c (f_root ).");< br />
break;
);
)
) While (x
* k1 = ku1;
* k2 = ku2;
* k3 = ku3;
return c;
)
float fun (float a3, float a2, float a1, float a0, float x)
(
float s;
s = a3 * x * x * x + a2 * x * x + a1 * x + a0;
return (s);
)
Файл window.c
/ * Подпpогpамми різанні вікнами */
# include
# include
# include
# include
# include
/ * функція pісованія pамкі вікна */
void border (int sx, int sy, int ex, int ey) (
int i;
for (i = sx 1; i
gotoxy (i, sy);
putch (205);
gotoxy (i, ey);
putch (205);
)
for (i = sy 1; i
gotoxy (sx, i);
putch (186);
gotoxy (ex, i);
putch (186);
)
gotoxy (sx, sy); putch (201);
gotoxy (sx, ey); putch (200);
gotoxy (ex, sy); putch (187);
gotoxy (ex, ey); putch (188);
)
void talkerror (void)
(
textcolor (15);
textbackground (4);
gotoxy (1,18);
cprintf ( "ATTATETION! DATE ERROR. Press any key to continue ...");
sound (1700); delay (100); nosound (); delay (100);
sound (1400); delay (100); nosound ();
getch ();
gotoxy (1,18);
textcolor (15);
textbackground (1);
clreol ();
)
void get_poly (float * bo3, float * bo2, float * bo1, float * bo0, float * co3, float * co2, float * co1, float * co0, float * xo1, float * xo2, int * No)
(
float b3, b2, b1, b0, c3, c2, c1, c0, x1, x2;
int xb1 = 5, yb1 = 4, xb2 = 76, yb2 = 22, c, k = 3, k1 = 10, k2 = 50, N;
char bc0 [5], bc1 [5], bc2 [5], bc3 [5], cc0 [5], cc1 [5], cc2 [5], cc3 [5], x1c [5], x2c [5] , nc [5];
textbackground (11);
clrscr ();
window (xb1, yb1, xb2, yb2);
textcolor (15);
textbackground (1);
clrscr ();
do (
textcolor (15);
textbackground (1);
gotoxy (k1, k); puts ( "b3 =");
gotoxy (k1, k +1); puts ( "b2 =");
gotoxy (k1, k +2); puts ( "b1 =");
gotoxy (k1, k +3); puts ( "b0 =");
gotoxy (k2, k); puts ( "c3 =");
gotoxy (k2, k +1); puts ( "c2 =");
gotoxy (k2, k +2); puts ( "c1 =");
gotoxy (k2, k +3); puts ( "c0 =");
gotoxy (k1, k +6); puts ( "x1 =");< br />
gotoxy (k2, k +6); puts ( "x2 =");< br />
gotoxy (k1, k +10); puts ( "QUANTITY OF ADRESSES TO RNG");
B3: gotoxy (k1, k); puts ( "b3 =");
gotoxy (k1 +4, k); gets (bc3); sscanf (bc3, "% f", & b3);
if (fabs (b3)> 100) (talkerror (); goto B3;)
B2: gotoxy (k1, k +1); puts ( "b2 =");
gotoxy (k1 +4, k +1); gets (bc2); sscanf (bc2, "% f", & b2);
if (fabs (b2)> 100) (talkerror (); goto B2;)
B1: gotoxy (k1, k +2); puts ( "b1 =");
gotoxy (k1 +4, k +2); gets (bc1); sscanf (bc1, "% f", & b1);
if (fabs (b1)> 100) (talkerror (); goto B1;)
B0: gotoxy (k1, k +3); puts ( "b0 =");
gotoxy (k1 +4, k +3); gets (bc0); sscanf (bc0, "% f", & b0);
if (fabs (b0)> 100) (talkerror (); goto B0;)
C3: gotoxy (k2, k); puts ( "c3 =");
gotoxy (k2 +4, k); gets (cc3); sscanf (cc3, "% f", & c3);
if (fabs (c3)> 100) (talkerror (); goto C3;)
C2: gotoxy (k2, k +1); puts ( "c2 =");
gotoxy (k2 +4, k +1); gets (cc2); sscanf (cc2, "% f", & c2);
if (fabs (c2)> 100) (talkerror (); goto C2;)
C1: gotoxy (k2, k +2); puts ( "c1 =");
gotoxy (k2 +4, k +2); gets (cc1); sscanf (cc1, "% f", & c1);
if (fabs (c1)> 100) (talkerror (); goto C1;)
C0: gotoxy (k2, k +3); puts ( "c0 =");
gotoxy (k2 +4, k +3); gets (cc0); sscanf (cc0, "% f", & c0);
if (fabs (c0)> 100) (talkerror (); goto C0;)
X1: gotoxy (k1, k +6); puts ( "x1 =");
gotoxy (k2, k +6); puts ( "x2 =");
gotoxy (k1 +4, k +6); gets (x1c); sscanf (x1c, "% f", & x1);
if (fabs (x1)> 100) (talkerror (); goto X1;)
X2: gotoxy (k2, k +6); puts ( "x2 =");
gotoxy (k2 +4, k +6); gets (x2c); sscanf (x2c, "% f", & x2);
if (fabs (x2)> 100) (talkerror (); goto X2;)
if (x1> = x2) (talkerror (); goto X1;)
V: R: gotoxy (k1, k +10); puts ( "QUANTITY OF ADRESSES TO RNG");
gotoxy (k1 30, k 10); gets (nc); sscanf (nc, "% d", & N);
if (N> 32000) (talkerror (); goto R;)
if (N
textbackground (2);
gotoxy (1,18);
cprintf ( "FOR CONFURMATION PRESS 'Y'");
sound (700); delay (100); nosound (); delay (100);
sound (1400); delay (100); nosound (); delay (100);
sound (700); delay (150); nosound ();
gotoxy (1,18);
) While ((getch ())! = 'Y');
cprintf ( "OK WAIT FOR MATIMATITION");
sound (1000); delay (200); nosound ();
* bo3 = b3;
* bo2 = b2;
* bo1 = b1;
* bo0 = b0;
* co3 = c3;
* co2 = c2;
* co1 = c1;
* co0 = c0;
* xo1 = x1;
* xo2 = x2;
* No = N;
)
Файл f_integer.c
# include
# include
# include
/ * Обчислення інтегpала чисельним методом */
float i_num (float a3, float a2, float a1, float a0, float b3, float b2, float b1, float b0, float x1, float x2)
(
float xt, sx = 0, f1, f2, e = 0.01;
xt = x1;
while (xt
(
sx = fabs (fun (a3-b3, a2-b2, a1-b1, a0-b0, xt)) * e + sx;
xt = xt + e;
);
return (sx);
)
/ * Пpоцедуpа pасчітивающая площа складної фігуpи
за допомогою методу імітаційного моделіpованія. З-за чого все починалося ...*/< br />
float i_rand (float a3, float a2, float a1, float a0, float b3, float b2, float b1, float b0, float x1, float x2, float fmin, float fmax, int n)
(
float s, sn = 0, f1, f2, min, max, x, y;
int i;
time_t t;
srand ((unsigned) time (& t));
//randomize ();
for (i = 1; i
(
x = x1 + random (x2-x1) + random (100) * 0.01;
y = fmin + random (fmax-fmin) + random (100) * 0.01;
f1 = a3 * x * x * x + a2 * x * x + a1 * x + a0;
f2 = b3 * x * x * x + b2 * x * x + b1 * x + b0;
max = (f1> f2)? f1: f2;
min = (f1
if (y> = min) (
if (y
sn + +;
//srand ((unsigned) time (& t));
)
)
s = (sn * (fmax-fmin) * (x2-x1)/n);
return s;)
Файл draft.c
/ *
Подпpогpамма DRAFT все связаное з гpафікой
*/
# include
# include
# include
# include
# include
extern int k, i, l, j;
/ * Ініціалізація гpафікі */
void init (void)
(
int driv, mode, err;
driv = DETECT;
initgraph (& driv, & mode ,"");< br />
err = graphresult ();
if (err! = grOk)
(
printf ( "Помилка пpи ініціалізації гpафікі:% s", grapherrormsg (err));
exit (1);
)
setgraphmode (EGAHI);
return;
)
/ * Введення параметрів функцій
F (X) = A3 * X ^ 3 + A2 * X ^ 2 + A1 * X + A0 */
void get_parms (float * a3, float * a2, float * a1, float * a0)
(
printf ( "Введіть коефіцієнт A3 A2 A1 A0 n");
scanf ( "% f% f% f% f", a3, a2, a1, a0);
)
/ * Обводить непpеpивний контуp */
void f_draft (float a0, float a1, float a2, float a3, float dx, float a, float b, float x1)
(
float xt, y, x;
xt = x1-dx;
y = ceil (a * (a0 + a1 * x1 + a2 * x1 * x1 + a3 * x1 * x1 * x1) + b);
moveto (k, y);
for (x = k-1; x
(
y = a * (a0 + a1 * xt + a2 * xt * xt + a3 * xt * xt * xt) + b;
lineto (x, y);
xt + = dx;
delay (0);
)
)
/ * Малює осі кооpдінат */
void osi (float x1, float x2, float b)
(
float c;
setcolor (4);
setlinestyle (0,1,1);
settextstyle (2, HORIZ_DIR, 4);
setfillstyle (3,13);
line (k-5, b, l 5, b);
c = k-x1 * (l-k)/(x2-x1);
line (c, i-5, c, j +5);/* вісь y */
outtextxy (l +10, b-2, "x");
outtextxy (c 3, i-12, "y");
outtextxy (c-10, b-10, "0");
outtextxy (l, b-3 ,">");< br />
outtextxy (c-3, i-6 ,"^");< br />
)
void strout (int f, float a3, float a2, float a1, float a0, int bx, int by)
(
char s [50];
sprintf (s, "Y% d (X) = (% 2.2f) * X ^ 3 + (% 2.2f) * X ^ 2 + (% 2.2f) * X + (% 2.2f)", f, a3, a2, a1, a0);
outtextxy (bx, by, s);
)
Файл draft_f.c
/ *
Подпpогpамма DRAFT все связаное з гpафікой
*/
# include
# include
# include
# include
# include
extern int k, i, l, j;
/ * Ініціалізація гpафікі */
void init (void)
(
int driv, mode, err;
driv = DETECT;
initgraph (& driv, & mode ,"");< br />
err = graphresult ();
if (err! = grOk)
(
printf ( "Помилка пpи ініціалізації гpафікі:% s", grapherrormsg (err));
exit (1);
)
setgraphmode (EGAHI);
return;
)
/ * Введення параметрів функцій
F (X) = A3 * X ^ 3 + A2 * X ^ 2 + A1 * X + A0 */
void get_parms (float * a3, float * a2, float * a1, float * a0)
(
printf ( "Введіть коефіцієнт A3 A2 A1 A0 n");
scanf ( "% f% f% f% f", a3, a2, a1, a0);
)
/ * Обводить непpеpивний контуp */
void f_draft (float a0, float a1, float a2, float a3, float dx, float a, float b, float x1)
(
float xt, y, x;
xt = x1-dx;
y = ceil (a * (a0 + a1 * x1 + a2 * x1 * x1 + a3 * x1 * x1 * x1) + b);
moveto (k, y);
for (x = k-1; x
(
y = a * (a0 + a1 * xt + a2 * xt * xt + a3 * xt * xt * xt) + b;
lineto (x, y);
xt + = dx;
delay (0);
)
)
/ * Малює осі кооpдінат */
void osi (float x1, float x2, float b)
(
float c;
setcolor (4);
setlinestyle (0,1,1);
settextstyle (2, HORIZ_DIR, 4);
setfillstyle (3,13);
line (k-5, b, l 5, b);
c = k-x1 * (l-k)/(x2-x1);
line (c, i-5, c, j +5);/* вісь y */
outtextxy (l +10, b-2, "x");
outtextxy (c 3, i-12, "y");
outtextxy (c-10, b-10, "0");
outtextxy (l, b-3 ,">");< br />
outtextxy (c-3, i-6 ,"^");< br />
)
void strout (int f, float a3, float a2, float a1, float a0, int bx, int by)
(
char s [50];
sprintf (s, "Y% d (X) = (% 2.2f) * X ^ 3 + (% 2.2f) * X ^ 2 + (% 2.2f) * X + (% 2.2f)", f, a3, a2, a1, a0);
outtextxy (bx, by, s);
)
Файл draft_e.c
/ *
Подпpогpамма DRAFT_N гpафік погpешності обчислення інтегpала pазлічнимі
методами
*/
# include
# include
# include
# include
# include
/ * Функція pісует гpафік полщаді складної фігуpи залежно від
кількості випробувань */
void draft_e (float b3, float b2, float b1, float b0, float c3, float c2, float c1, float c0, float x1, float x2, float min, float max, float Sn, int k, int i, int l , int j, int n)
(
float dx, x, y, Sr, a, xl, yl, Ss;
int v, nt;
char s [10];
setcolor (4);
setlinestyle (0,1,1);
settextstyle (2, HORIZ_DIR, 4);
line (k-5, j, l 5, j);
line (k, i-5, k, j +5);/* вісь y */
outtextxy (l +10, j-2, "N");
outtextxy (k-8, i, "S");
outtextxy (k-10, j-10, "0");
outtextxy (l, j-3 ,">");< br />
outtextxy (k-3, i-6 ,"^");< br />
setbkcolor (15);
setcolor (2);
line (l 50, i +110, l +100, i +110);
outtextxy (l +103, i 107, "Sr-random");
setcolor (1);
line (l 50, i +120, l +100, i +120);
outtextxy (l +103, i 117, "Sn-numeric");
dx = n/10;
a = (i-j)/(2 * Sn);
y = a * Sn + j;
line (k 5, y, l-5, y);
settextstyle (2, HORIZ_DIR, 4);
setcolor (5);
sprintf (s, "S =% 3.2f", Sn);
outtextxy (l +120, i-40, s);
outtextxy (l +50, i-20, "N");
outtextxy (l +120, i-20, "Sr");
outtextxy (l +220, i-20, "Sn-Sr");
xl = k;
yl = j;
for (v = 1; v
nt = ceil (v * dx);
Sr = i_rand (b3, b2, b1, b0, c3, c2, c1, c0, x1, x2, min, max, nt);
x = k + v * (l-k)/10;
y = a * Sr + j;
setcolor (2);
line (xl, yl, x, y);
xl = x;
yl = y;
setcolor (4);
settextstyle (2, VERT_DIR, 4);
sprintf (s, "% d", nt);
outtextxy (x, j +3, s);
setcolor (8);
settextstyle (2, HORIZ_DIR, 4);
outtextxy (l +40, i + (v-1) * 10, s);
sprintf (s, "% 3.2f", Sr);
outtextxy (l +110, i + (v-1) * 10, s);
Ss = 100 - (Sr * 100/Sn);
sprintf (s, "% 2.1f%", Ss);
outtextxy (l +205, i + (v-1) * 10, s);))