ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    Обчислення інтеграла методом Ньютона-Котеса (теорія і програма на Паскалі )
         

     

    Кибернетика

    Міністерство Вищої Освіти РФ.

    Московський Інститут Електронної Техніки

    (Технічний Університет)

    Ліцей № 1557

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

    "Обчислення інтеграла методом

    Ньютона-Котеса"

    Написав: Конопльов А.А.

    Перевірив: доцент Колдаев В.Д.

    Москва, 2001р.

    1.

    Вступ ...................... ............................................

    ................... 3
    2. Теоретична частина ................................................ ................... 4
    3. Алгоритм роботи ................................................ ....................

    .... 8
    4. Код програми ................................................ .................

    ........ 17
    . Модуль

    K_graph ......................................... ................... 17
    . Модуль

    Graphic ......................................... .................... 34
    . Модуль

    K_unit ......................................... ...................... 38
    . Основна програма ................................................ .... 40
    5. Тестові випробування ................................................ .................

    42
    6. Корисні поради по роботі з програмою ............................. 42
    7. Вікна введення та виведення програми .............................................
    8.

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

    .............. ....... 43
    9. Список літератури ................................................ ................

    ... 44

    Математика - одна з найдавніших наук. Праці багатьох учених увійшли досвітової фонд і стали основою сучасних алгебри та геометрії. Наприкінці XVIIв., коли розвиток науки йшло швидкими темпами, з'явилися поняттядиференціювання, а слідом за ним і інтегрування. Багато правилазнаходження невизначеного інтеграла в той час не були відомі, томувчені намагалися знайти інші, обхідні шляхи пошуку значень. Першимметодом з'явився метод Ньютона - пошук інтеграла через графік функції, тобтознаходження площі під графіком, методом прямокутників, надаліудосконалений у метод трапецій. Пізніше був придуманий параболічнийметод або метод Сімпсона. Однак частина вчених мучив питання: А чи можнаоб'єднати всі ці методи в один??
    Відповідь на нього була дана одночасно двома математиками Ньютоном і Котесом.
    Вони вивели загальну формулу, названу на їхню честь. Проте їх метод бувчастково забутий. У цій роботі будуть викладені основні положення теорії,розглянуті різні приклади, наведені таблиці, отримані при різнихпогрішності, і звичайно описана робота і код програми, яка розраховуєінтеграл методом Ньютона-Котеса.

    Нехай деяка функція f (x) задана в уздах інтерполяції:
     (i = 1,2,3 ..., n) на відрізку [а, b] таблицею значень:

    | X0 = a | X1 | X2 | ... | XN = b |
    | Y0 = f (x0) | Y1 = f (x1) | Y2 = f (x2) | ... | YN = f (xN) |

    Потрібно знайти значення інтеграла.
    Для початку складемо інтерполяційний многочлен Лагранджа:

    Для рівновіддалених вузлів інтерполяційний многочлен має вигляд:

    де q = (x-x0)/h - крок інтерполяції, замінимо подинтегральную функцію f (x)інтерполяційним многочленів Лагранжа:

    поміняємо знак підсумовування та інтеграл і винесемо за знак інтегралапостійні елементи:

    Так як dp = dx/h, то, замінивши межі інтегрування, маємо:

    Для рівновіддалених вузлів інтерполяції на відрізку [a, b] величина кроквизначається як h = (a-b)/n. Представивши цей вираз для h у формулу (4) івиносячи (ba) за знак суми, отримаємо:


    Покладемо, що

    де i = 0,1,2 ..., n; Числа Hi називають коефіцієнтами Ньютона-Котеса. Цікоефіцієнти не залежать від виду f (x), а є функцією тільки за n.
    Тому їх можна вирахувати заздалегідь. Остаточна формула виглядає так:


    Тепер розглянемо декілька прикладів.

    Приклад 1.

    Обчислити за допомогою методу Ньютона-Котаса:
    , при n = 7.

    Обчислення.

    1) Визначимо крок: h = (7-0)/7 = 1.

    2) Знайдемо значення y:

    | x0 = 0 | y0 = 1 |
    | x1 = 1 | y1 = 0.5 |
    | x2 = 2 | y2 = 0.2 |
    | x3 = 3 | y3 = 0.1 |
    | x4 = 4 | y4 = 0.0588 |
    | x5 = 5 | y5 = 0.0384 |
    | x6 = 6 | y6 = 0.0270 |
    | x7 = 7 | y7 = 0.02 |

    3) Знаходимо коефіцієнти Ньютона-Котеса:
    H1 = H7 = 0.0435, H1 = H6 = 0.2040, H2 = H5 = 0.0760, H3 = H4 = 0.1730
    Підставимо значення в формулу і отримаємо:

    При підрахунку за допомогою формули Ньютона-Лейбніца отримаємо:

    Приклад 2.
    Обчислити за допомогою методу Ньютона-Котеса
     , Взявши n = 5;
    Обчислення:
    1) Визначимо крок h = (8-4)/5 = 0.8
    2) Знайдемо значення y:

    | x0 = 0 | y0 =- 2.61 |
    | x1 = 4.8 | y1 = 0.42 |
    | x2 = 5.6 | y2 = 4.34 |
    | x3 = 6.4 | y3 = 6.35 |
    | x4 = 7.2 | y4 = 4.38 |
    | x5 = 8 | y5 =- 0.16 |


    3) Знаходимо коефіцієнти Ньютона-Котеса:
    H0 = H5 = 0.065972; H1 = H4 = 0.260417; H2 = H3 = 0.173611;
    4) Підставимо значення в формулу і отримаємо:

    Розглянемо окремі випадки формули Ньйтона-Котеса.
    Нехай n = 1 тоді
    H0 = H1 = 0.5 і кінцева формула набуде вигляду:
     Тим самим в якості окремого випадку нашої формули ми отрималиформулу трапецій.
    Взявши n = 3, ми отримаємо
     . Окремий випадок формули Ньютона-Котеса - формула Сімпсона

    Тепер проведемо аналіз алгоритму і розглянемо основний принципроботи програми.

    Для обчислення інтеграла спочатку знаходяться коефіцієнти Ньютона-
    Котеса. Їх перебування здійснюється в процедурі hkoef.
    Основною проблемою обчислення коефіцієнтів є інтеграл відтвори множників. Для його розрахунку необхідно:

    А) порахувати коефіцієнти при розкритті дужок при q
    (процедура mnogoclen)
    Б) домножити їх на 1/n, де n-ступінь при q (процедура koef)
    В) підставити замість q значення n (функція integral)

    Далі обчислюємо факторіали (функція faktorial) і перемножуєтеотримані вирази (функція mainint). Для збільшення швидкості роботивводиться обчислення половини від кількості вузлів інтерполяції і подальшоїпідстановкою їх замість неподсчітанних.

    Процедура koef (w: масив; n: цілий; var e: масив);

    Процедура hkoef (n: цілий; var h: масив);

    Процедура mnogochlen (n, i: цілі; var c: масив);

    Процедура funktia (n: ціла; a, b: речовини.; var y: масив; c: речовини.; f: string);

    Функція facktorial (n: цілий): подвійний;

    Функція integral (w: масив; n: цілий): подвійний;

    Функція mainint (n: цілий; a, b: речовини.; y: масив): подвійний;

    Основна програма < p>

    Програма складається з 8 файлів:
    . K_main.exe - файл завантаження основної програми
    . K_unit.tpu - модуль обчислювальних процедур і функцій
    . K_graph.tpu - модуль графічних процедур
    . Graphic.tpu - модуль процедур для побудови графіка
    . Egavga.bgi - файл графічної ініціалізації
    . Sans.chr, litt.chr - файли шрифтів
    . Keyrus.com (не обов'язково) - файл встановлення російської мови.
    Для роботи програми з російським інтерфайсом бажано запускати її врежимі DOS.

    ======================================== ========

    ========== МОДУЛЬ GRAPH ==========

    ====== ==========================================< br>($ N +)unit k_graph;interfaceusescrt, graph, k_unit, graphic;procedure winwin1;procedure proline (ea: word);procedure winwwodab (ea: word);procedure error1 (ea: word);procedure helpwin (ea: word);procedure error (ea: word);procedure newsctext (ea: word);procedure newsc (ea: word);procedure win1 (ea: word);procedure win2 (ea: word; var k: word);procedure wwodn (ea: word; var n: integer);procedure wwodab (ea: word; var a, b: real);procedure wwod1 (ea: word; var y: array of double; var n: integer; var a, b: real);procedure wwod2 (ea: word; var ea1: word; var n: integer; var a, b: real; varst: string);procedure win3 (ea: word; n: integer; a, b: real; int: double; f: string; h: array ofdouble; var k: word);implementationprocedure proline (ea: word);
    (Проседура смуги процесу)vari: integer;f: string;c: char;begin newsc (ea); setcolor (15); setfillstyle (1,7); bar (160,150,460,260); rectangle (165,155,455,255); rectangle (167,157,453,253); case (ea mod 2) of

    0: outtextxy (180,170, 'Йде робота. Чекайте ..');

    1: outtextxy (180,170,' Working.Please wait ..'); end; setfillstyle (1,12); setcolor (0); rectangle (200,199,401,221); for i: = 1 to 9 do line (200 + i * 20,200,200 + i * 20,220); delay (20000); for i: = 1 to 100 do begin if ((i-1) mod 10) = 0 then line (200 + ((i-1) div 10) * 20,200,200 + ((i-1) div 10) * 20,220); bar (round (200 +2 * (i-0.5)), 200,200 +2 * i, 220); delay (1100); setcolor (15); setfillstyle (1,7); bar (280,230,323,250); str (i, f); f: = f +'%'; outtextxy (290,235, f); if (i mod 25) = 0 then bar (170,180,452,198); if (ea mod 2) = 0 then case (i div 25) of

    0: outtextxy (170,190, 'Підготовка');

    1: outtextxy (170,190, 'Розрахунок коефіцієнт в многочленів');

    2: outtextxy (170,190,' Розрахунок коефіцієнт Ньютона-Котеса');

    3: outtextxy (170,190, 'Розрахунок інтеграла'); end else case (i div 25) of

    0: outtextxy (170,190, 'Prepearing');

    1: outtextxy (170,190, 'Calculation of mnogochlen coeff .');

    2: outtextxy (170,190,' Calculation of Newton-Cotes coeff.');

    3: outtextxy (170,190, 'Calculation of integral '); end; setfillstyle (1,12); setcolor (0); end;end;procedure winwwodn (ea: word);
    (Вікно введення числа вузлів інтерполяції)varc: char;f: string;begin helpwin (ea); if (ea mod 2) = 0 then begin outtextxy (360,140, 'В цьому вікні необхідно'); outtextxy (360,155, 'ввести кількість вузлів'); outtextxy (360,170, 'інтерполяції, від якого') ; outtextxy (360,185, 'буде залежати точність'); outtextxy (360,200, 'обчислення інтеграл і'); outtextxy (360,215, 'кількість зн чений функції.'); outtextxy (360,240, 'УВАГА: Настійно'); outtextxy (360,250 , 'РЕКОМЕНДУЄТЬСЯ Не вводьте'); outtextxy (360,260, 'ЗНАЧЕННЯ N БІЛЬШЕ 12!!'); end else begin outtextxy (360,140, 'In this window you have to'); outtextxy (360,155, 'put into the number.' ); outtextxy (360,170, 'The accuracy of calculation'); outtextxy (360,185, 'and the number of function'); outtextxy (360,200, 'parameters will depend on'); outtextxy (360,215, 'this number.'); outtextxy (360,240, 'WARNING: IT IS HARDLY'); outtextxy (360,250, 'RECOMENDED NOT TO PUT IN'); outtextxy (360,260, 'NUMBER MORE THEN 12!!'); end; setcolor (2); setfillstyle (1 , 14); bar (70,200,340,300); rectangle (75,205,335,295); rectangle (77,207,333,293); if (ea mod 2) = 0 then begin outtextxy (90,227, 'Введіть кількість вузлів (n ):'); outtextxy (80,270,' УВАГА : При великих n можлива '); outtextxy (80,280,' некоректна робота комп'ютера !!'); end else begin outtextxy (80,217, 'Put in number of'); outtextxy (80,227, 'interpolation units:'); outtextxy (80,270 , 'WARNING: if you use big number'); outtextxy (80,280, 'of units, PC wont work properly!'); end; setfillstyle (1,0); bar (190,240,230,255);end;procedure wwodn (ea: word; var n: integer);
    (Процедура введення вузлів n)varec, p: integer;k, f: string;x: integer;c: char;begin newsc (ea); winwwodn (ea); repeat repeat winwwodn (ea); gotoxy (25,16); read (k); val (k, p, ec); if ec0 then begin error1 (ea); readln; end; until ec = 0; n: = p; if n> 12 then begin if keypressed then c: = readkey; c: = 'r'; setcolor (15); setfillstyle (1,12); bar (140,210,490,300); rectangle (145,215,485,295); rectangle (147,217,483,293); if (ea mod 2) = 0 then begin outtextxy (150,227, 'Попередження!'); outtextxy (150,237, 'Ви дейcтвітельно хочете використовувати'); outtextxy (150,250, 'велике значення N ???'); end else begin outtextxy (150,227, 'Warning!!
    '); Outtextxy (150,237,' Do you realy want to use a big
    '); Outtextxy (150,250,' number interpolation units (N )???< br>'); End; sound (600); delay (4000); nosound; setfillstyle (1,2); bar (320,260,350,280); setfillstyle (1,12); bar (250,260,280,280); repeat if keypressed then begin c: = readkey ; if (c = # 80) or (c = # 72) or (c = # 77) or (c = # 75) then x: = x +1; setfillstyle (1,2); if (x mod 2) = 0 then begin bar (250,260,280,280); setfillstyle (1,12); bar (320,260,350,280); end else begin bar (320,260,350,280); setfillstyle (1,12); bar (250,260,280,280);

    END;

    end; if (ea mod 2) = 0 then begin outtextxy (255,267, 'ТАК'); outtextxy (325,267, 'НІ'); end else begin outtextxy (255,267, 'YES'); outtextxy (325,267, 'NO'); end; until c = # 13; if abs (x mod 2) = 1 then begin n: = 0; setcolor (15); setfillstyle (1,2); bar (160,200,460,280); rectangle (165,205,455,275); rectangle (167,207,453,273); if (ea mod 2) = 0 then begin outtextxy (180,227, 'Для роботи програми необхідно'); outtextxy (180,237, 'заново ввести N.'); outtextxy (180,247, 'Натисніть ENTER для продовження. '); end else begin outtextxy (180,227,' To continue you have to '); outtextxy (180,237,' again put in N. '); outtextxy (180,247,' Press ENTER to continue. '); end; readln; readln; end; end; until n> 0;end;

    procedure winwwodab (ea: word);
    (Вікно введення прибудов інтегрування)varf: string;begin helpwin (ea); if (ea mod 2) = 0 then begin outtextxy (360,140, 'В цьому вікні необхідно'); outtextxy (360,155, 'ввести спочатку нижнє'); outtextxy (360,170, 'значення інтеграл і натиснути') ; outtextxy (360,185, 'ENTER, а потім ввести'); outtextxy (360,200, 'верхнє значення інтеграла'); outtextxy (360,215, 'і знову натиснути ENTER.'); end else begin outtextxy (360,140, 'In this window you have to: '); outtextxy (360,155,' firstly, put in lower value '); outtextxy (360,170,' of integral and press ENTER, '); outtextxy (360,185,' then put in higher value '); outtextxy (360,200 , 'of integral and press ENTER'); end; setcolor (2); setfillstyle (1,5); bar (10,210,335,320); rectangle (15,215,330,315); rectangle (17,217,328,313); settextstyle (0,0,0); if ( ea mod 2) = 0 then begin outtextxy (20,230, 'Введіть значення внизу'); outtextxy (20,244, 'інтеграл:'); outtextxy (20,262, 'Введіть верхнє значення'); outtextxy (20,272, 'інтеграл:'); end else begin outtextxy (20,230, 'Put in lower value of'); outtextxy (20,244, 'integral:'); outtextxy (20,262, 'Put in higher value of'); outtextxy (20,272, 'integral:'); end ;end;procedure wwodab (ea: word; var a, b: real);
    (Процедура введення прибудов інтегрування)varf: string;k: string;ec: integer;begin newsc (ea); winwwodab (ea); readln; repeat winwwodab (ea); gotoxy (16,16); read (k); val (k, a, ec); if ec0 then error1 (ea); until ec = 0; readln; repeat winwwodab (ea); str (a: 4:2, f); outtextxy (120,244, f); gotoxy (16,18); read (k); val (k, b, ec); if ec0 then error1 (ea); until ec = 0;end;procedure helpwin (ea: word);
    (основа вікна допомоги)begin setfillstyle (1,3); bar (350,100,590,380); setcolor (0); rectangle (353,103,587,377); rectangle (355,105,585,375); setcolor (14); if (ea mod 2) = 0 then outtextxy (360,115, 'ВІКНО ДОПОМОГИ' ) else outtextxy (360,115, 'HELP WINDOW');end;procedure error1 (ea: word);begin setcolor (15); setfillstyle (1,12); bar (140,210,490,280); rectangle (145,215,485,275); rectangle (147,217,483,273); if (ea mod 2) = 0 then begin outtextxy (150,227, 'Помилка'); outtextxy ( 150,237, 'вводяться параметр не число!!'); outtextxy (150,250, 'Перевірте значення і заново введіть його.'); end else begin outtextxy (150,227, 'Error!'); outtextxy (150,237, 'The value you entered isn `ta quantity !!'); outtextxy (150,250, 'Check it and put it in again.'); end; sound (600); delay (4000); nosound; readln; readln;end;procedure error (ea: word);
    (Процедура помилки)begin setcolor (15); setfillstyle (1,12); bar (140,210,490,260); rectangle (145,215,485,255); rectangle (147,217,483,253); if (ea mod 2) = 0 then begin outtextxy (150,227, 'Помилка'); outtextxy ( 150,237, 'Недолік вводяться параметрів !!'); end else begin outtextxy (150,227,' Error! '); outtextxy (150,237,' Not all parameters are set! '); end; sound (600); delay (4000); nosound; readln;end;procedure newsctext (ea: word);
    (Текст для процедури newsc)beginif ea mod 2 = 0 then begin settextstyle (0,0,1); setcolor (15); outtextxy (400,440, 'Мова - російська.'); outtextxy (400,450, 'Версія 1.0 Останнє видання'); outtextxy (400,460, 'ї Всі права захищені.'); end else begin settextstyle (0,0,1); setcolor (15); outtextxy (400,440, 'Language - English.'); outtextxy (400,450, 'Version 1.0 Final release.') ; outtextxy (400,460, 'ї All rights reserved.'); end;end;procedure newsc (ea: word);
    (Процедура оновлення екрану)begin cleardevice; setfillstyle (10,8); floodfill (1,1,15); setcolor (0); setfillstyle (1,7); bar (80,10,580,80); rectangle (82,12,578,78); rectangle (85,15,575,75); settextstyle (0,0,2); setcolor (10); if ea mod 2 = 0 then begin settextstyle (0,0,2); outtextxy (90,20, 'Обчислення інтеграл') ; outtextxy (90,50, 'методом Ньютона-Котеса.'); newsctext (ea); end else begin settextstyle (3,0,2); outtextxy (90,20, 'Calculeting of integral'); outtextxy (90, 47, 'using the Newton-Cotes method.'); newsctext (ea); end; settextstyle (0,0,1);end;procedure winwin1;
    (Вікно процедури win1)begin setfillstyle (1,7); bar (160,110,460,380); setcolor (0); rectangle (162,113,457,377); rectangle (165,115,455,375);end;procedure win1 (ea: word);
    (Вступне вікно)begin settextstyle (0,0,1); setcolor (10); if (ea mod 2) = 0 then begin outtextxy (168,135, 'Міністерство Вищої освіти РФ); outtextxy (168,150,' Московський Державний Інститут '); outtextxy (168,160 , 'Електронної Техніки'); outtextxy (168,170, '(Технічний лніверсітет)'); outtextxy (168,180, 'Лицей № 1557'); outtextxy (168,210, 'КУРСОВА РАБО'А'); outtextxy (168,230, ' «Обчислення інтеграла '); outtextxy (168,245,' метедом Ньютона-Котеса » '); outtextxy (158,270,' Написав: Конопльов А.А. '); outtextxy (158,285,' Керівник: доцент Колдаев В.Д. '); end else begin outtextxy (168,135, 'Department of High Education'); outtextxy (168,150, 'Moscow State Institute of'); outtextxy (168,160, 'Electronic Technics'); outtextxy (168,170, '(Technics University)'); outtextxy (168,180, 'Lyceum № 1557'); outtextxy (168,210, 'COURSE WORK'); outtextxy (168,230, ' «Calculation of integral'); outtextxy (168,245, 'by Newton-Cotes method»'); outtextxy (158,270, 'Author: Konoplev AA '); outtextxy (158,285,' Supervisor: senior lecturer '); outtextxy (158,300,' Koldaev VD '); end;end;procedure win2 (ea: word; var k: word);
    (Вікно вибору способу підрахунку)varc: char;x: integer;f: string;begin setcolor (2); setfillstyle (1,5); bar (70,200,340,330); rectangle (75,205,335,325); rectangle (77,207,333,323); settextstyle (0,0,0); setfillstyle (1,15); bar (80,250,330,270); setfillstyle (1,5); bar (80,285,330,305); if ea mod 2 = 0 then begin outtextxy (77,220, 'виберете спосіб завдання значень'); outtextxy (75,230, 'функції.'); outtextxy (70,255, 'По таблиці (в ручну) '); outtextxy (70,295,' За розрахунками (автом т.) '); end else begin outtextxy (77,220,' Choose a method of putting in '); outtextxy (75,230,' the values of function. '); outtextxy (70,255, 'By the table (by hand)'); outtextxy (70,295, 'By calculations (automat.)'); end; helpwin (ea); if ea mod 2 = 0 then begin outtextxy (360,140, 'В цьому способі необхідно '); outtextxy (360,155,' самостійно вводити '); outtextxy (360,170,' значення функції. '); end else begin outtextxy (360,140,' In this method you have '); outtextxy (360,155,' to put in values of '); outtextxy (360,170,' function by yourself. '); end; x: = 0; repeat if keypressed then begin c: = readkey; if (c = # 80) or (c = # 72) then x: = x +1; setfillstyle (1,15); if (x mod 2) = 0 then begin bar (80,250,330,270); setfillstyle (1,5); bar (80,285,330,305); helpwin (ea); if ea mod 2 = 0 then begin outtextxy (360,140, 'В цьому способі необхідно'); outtextxy (360,155, 'самостійно вводити'); outtextxy (360,170, 'значення функції.'); end else begin outtextxy (360,140, 'In this method you have '); outtextxy (360,155,' to put in values of '); outtextxy (360,170,' function by yourself. '); end; end else begin bar (80,285,330,305); setfillstyle (1,5); bar (80,250,330,270); helpwin (ea); if ea mod 2 = 0 then begin outtextxy (360,140, 'В цьому способі комп'ютер'); outtextxy (360,155, 'сам вичесляет значення'); outtextxy (360,170, 'функції з вводиться функції.'); end else begin outtextxy (360,140, 'In this method PC will'); outtextxy (360,155, 'automaticly count the value'); outtextxy (360,170, 'of function by the function'); outtextxy (360,185, 'you enter'); end; end; setcolor (2); if ea mod 2 = 0 then begin outtextxy (70,255, 'По таблиці (в ручну)'); outtextxy (70,295, 'За розрахунками (автом т.)'); end else begin outtextxy (70,255, 'By the table (by hand)'); outtextxy (70,295, 'By calculations (automat.)'); end; end; until c = # 13;k: = x mod 2;end;procedure wwod1 (ea: word; var y: array of double; var n: integer; var a, b: real);
    (Вікно ручного введення функції)vari, p: integer;s, f: string;p1: real;c: char;

    begin wwodn (ea, n); if n = 0 then wwodn (ea, n); newsc (ea); wwodab (ea, a, b); helpwin (ea); if ea mod 2 = 0 then begin outtextxy (360,140, 'В цьому вікні необхідно'); outtextxy (360,155, 'поступово вводити'); outtextxy (360,170, 'значення функції.'); outtextxy (360,185, 'після кожного введення' ); outtextxy (360,200, 'певного значення'); outtextxy (360,215, 'натисніть ENTER.'); end else begin outtextxy (360,140, 'In this window you have'); outtextxy (360,155, 'to gradually enter the') ; outtextxy (360,170, 'values of functions.'); outtextxy (360,185, 'After each enter press'); outtextxy (360,200, 'ENTER key.'); end; setfillstyle (1,9); bar (40,200,330,300); rectangle (45,205,325,295); rectangle (47,207,323,293); if ea mod 2 = 0 then outtextxy (56,227, 'Введіть 0-е значення фінкціі:') else outtextxy (56,227, 'Enter 0-th value of function:'); for i : = 0 to n do begin setfillstyle (1,0); bar (137,250,180,273); gotoxy (19,17); setfillstyle (1,9); read (p1); y [i]: = p1; bar (120,227,134,240) ; str (i +1, s); outtextxy (120,227, s); bar (310,220,320,250); end;

    end;procedure wwod2 (ea: word; var ea1: word; var n: integer; var a, b: real; varst: string);
    (Вікно 2 меню автомат. підрахунку)var i: integer; c, k: char; x: longint; f: string;begin repeat x: =- 600000; if keypressed then c: = readkey; c: = 't'; newsc (ea); setfillstyle (1,15); bar (70,120,342,330); setcolor (12); rectangle (75,125,337,325); rectangle (77,127,335,323); settextstyle (0,0,0); setfillstyle (1,11); bar (80,170,330,190); if ea mod 2 = 0 then begin outtextxy (80,130, 'Меню ввести установки знаходження'); outtextxy (80,140, 'інтеграла'); outtextxy (80,180, 'Ввести кількість вузлів (n)'); outtextxy (80,210, 'Ввести межа інтегрування'); outtextxy (80,240, 'Ввести функцію'); outtextxy (80,270, 'Вважати інтеграл'); outtextxy (80,300, 'Вихід'); end else begin outtextxy (80,130, 'Menu of entering the parameters'); outtextxy (80,140, 'of integral'); outtextxy (80,180, 'Put in the number of units'); outtextxy (80,210, 'Enter the bounds of integral'); outtextxy (80,240, 'Enter function'); outtextxy (80,270, 'Count integral'); outtextxy (80,300, 'Exit'); end; helpwin (ea); if ea mod 2 = 0 then begin outtextxy (360,140, 'Натисніть Enter для'); outtextxy (360,155, 'введення кількості вузлів'); end else begin outtextxy (360,140, 'Press Enter to put'); outtextxy (360,155, 'in the number of units '); end; repeat if keypressed then begin c: = readkey; case c of

    # 80: x: = x-1;

    # 72: x: = x +1; end; setfillstyle (1,11); case (abs (x) mod 5) of

    0: begin bar (80,170,330,190); setfillstyle (1,15); bar (80,200,330,220) ; bar (80,290,330,310); helpwin (ea); if ea mod 2 = 0 then begin outtextxy (360,140, 'Натисніть Enter для'); outtextxy (360,155, 'введення кількості вузлів'); end else begin outtextxy (360,140, 'Press Enter to put '); outtextxy (360,155,' in the number of units. '); end; end;

    1: begin bar (80,200,330,220); setfillstyle (1,15); bar (80,170,330,190) ; bar (80,230,330,250); helpwin (ea); if ea mod 2 = 0 then begin outtextxy (360,140, 'Натисніть ENTER для введення'); outtextxy (360,155, 'прибудов інтегрування.'); end else begin outtextxy (360,140, ' Press ENTER to put in '); outtextxy (360,155,' the bounds of integral. '); end; end;

    2: begin bar (80,230,330,250); setfillstyle (1,15); bar (80,200,330,220 ); bar (80,260,330,280); helpwin (ea); if ea mod 2 = 0 then begin outtextxy (360,140, 'Натисніть ENTER для введення'); outtextxy (360,155, 'функції.'); end else begin outtextxy (360,140, ' Press ENTER to enter '); outtextxy (360,155,' function. '); end; end;

    3: begin bar (80,260,330,280); setfillstyle (1,15); bar (80,230,330,250); bar ( 80,290,330,310); helpwin (ea); if ea mod 2 = 0 then begin outtextxy (360,140, 'Натисніть ENTER для початку'); outtextxy (360,155, 'підрахунку самого інтеграла.'); end else begin outtextxy (360,140, 'Press ENTER to begin '); outtextxy (360,155,' integral calculations. '); end; end;

    4: begin bar (80,290,330,310); setfillstyle (1,15); bar (80,260,330,280); bar (80,170,330,190 ); helpwin (ea); end; end; setcolor (12); if ea mod 2 = 0 then begin outtextxy (80,130, 'Меню ввести установки знаходження'); outtextxy (80,140, 'інтеграла'); outtextxy (80,180, 'Ввести кількість вузлів (n)'); outtextxy ( 80,210, 'Ввести межа інтегрування'); outtextxy (80,240, 'Ввести функцію'); outtextxy (80,270, 'Вважати інтеграл'); outtextxy (80,300, 'Вихід'); end else begin outtextxy (80,130, 'Menu of entering the parameters '); outtextxy (80,140,' of integral '); outtextxy (80,180,' Put in the number of units '); outtextxy (80,210,' Enter the bounds of integral '); outtextxy (80,240,' Enter function ') ; outtextxy (80,270, 'Count integral'); outtextxy (80,300, 'Exit'); end; end; until c = # 13; c: = 't'; case (abs (x) mod 5) of

    0: begin wwodn (ea, n); end;

    1: wwodab (ea, a, b);

    2: begin helpwin (ea); setcolor (15); setfillstyle (1,9); bar (70,200,340,300); rectangle (75,205,335,295); rectangle (77,207,333,293); if ea mod 2 = 0 then begin outtextxy (86,227, 'Введіть функцію f (x ):'); setcolor (14); outtextxy (360,140, 'В цьому вікні необхідно'); outtextxy (360,155, 'ввести саму функцію.'); outtextxy (360,200, 'Примітка: 1.данная програма'); outtextxy (360,215, 'розпізнає тільки' ); outtextxy (360,230, 'елементарні функції.'); outtextxy (360,245, '(x, cos (x) та ін)'); outtextxy (360,260, '2. При неправильному введенні '); outtextxy (360,275,' за замовчуванням f (x) = x; '); outtextxy (360,275, '3. Якщо після натискання ENTER'); outtextxy (360,275, 'нічого не відбулося, то outtextxy (360,275,' занововведіте функцію. '); end else begin outtextxy (86,227, 'Enter function f (x ):'); setcolor (14); outtextxy (360,140,' In this window you have '); outtextxy (360,155,' to enter the function. '); outtextxy (360,200, 'Note: This version of'); outtextxy (360,215, 'programm can indentify only'); outtextxy (360,230, 'simple functions, as'); outtextxy (360,245, 'x, cos (x) and other.'); end; setfillstyle (1,0); bar (86,255,330,275); readln; gotoxy (13,17); read (st); writeln (st); readln; end;

    3: if (n0) and (ab) and (st'') and ((abs (x) mod 5) = 3);end;procedure win3 (ea: word; n: integer; a, b: real; int: double; f: string; h: array ofdouble; var k: word);
    (Остання вікно перегляду результатів)var i: integer; c: char; x: longint; p1, p: string; y: array [0 .. 16] of double;begin funktia (n, a, b, y, 1, f); f :='('+ f +')'+' dx = '; repeat x: =- 600000; newsc (ea); setfillstyle (1,2 ); bar (170,120,490,360); setcolor (14); rectangle (175,125,485,355); rectangle (177,127,483,353); settextstyle (0,0,0); setfillstyle (1,1); bar (180,170,480,190); if ea mod 2 = 0 then begin outtextxy (180,135, Функція распознана.Інтеграл підраховано. '); outtextxy (180,180,' Check значення інтеграла '); outtextxy (180,210,' Check коефіцієнти Ньютона-Котеса '); outtextxy (180,240,' Check значення функції '); outtextxy (180,270, 'Показати графік'); outtextxy (180,300, 'Вважати знову'); outtextxy (180,330, 'Вихід'); end else begin outtextxy (180,135, 'Function Indentified.Integral counted.'); outtextxy (180,180, ' View value of integral '); outtextxy (180,210,' View Newton-Cotes coefficients '); outtextxy (180,240,' Veiw values of function '); outtextxy (180,270,' View graphik '); outtextxy (180,300,' Count again ' ); outtextxy (180,330, 'Exit'); end; repeat if keypressed then begin c: = readkey; case c of

    # 80: x: = x-1;

    # 72: x: = x +1; end; setfillstyle (1,1); case (abs (x) mod 6) of

    0: begin bar (180,170,480,190); setfillstyle (1,2) ; bar (180,200,480,220); bar (180,320,480,340); end;

    1: begin bar (180,200,480,220); setfillstyle (1,2); bar (180,170,480,190); bar (180,230,480,250); end;

    2: begin bar (180,230,480,250); setfillstyle (1,2); bar (180,200,480,220); bar (180,260,480,280); end;

    3: begin bar (180,260,480,280); setfillstyle (1, 2); bar (180,230,480,250); bar (180,290,480,310); end;

    4: begin bar (180,290,480,310); setfillstyle (1,2); bar (180,260,480,280); bar (180,320,480,340); end;

    5: begin bar (180,320,480,340); setfillstyle (1,2); bar (180,290,480,310); bar (180,170,480,190); end; end; if ea mod 2 = 0 then begin outtextxy (180,135, 'Функція розпізнана . Інтеграл підраховано. '); outtextxy (180,180,' Check значення інтеграла '); outtextxy (180,210,' Check коефіцієнти Ньютона-Котеса '); outtextxy (180,240,' Check значення функції '); outtextxy (180,270,' Показати графік ' ); outtextxy (180,300, 'Вважати знову'); outtextxy (180,330, 'Вихід'); end else begin outtextxy (180,135, 'Function Indentified.Integral counted.'); outtextxy (180,180, 'View value of integral'); outtextxy (180,210, 'View Newton-Cotes coefficients'); outtextxy (180,240, 'Veiw values of function'); outtextxy (180,270, 'View graphik'); outtextxy (180,300, 'Count again'); outtextxy (180,330, ' Exit '); end;

    end; until c = # 13; c: =' t '; case (abs (x) mod 6) of

    0: begin setcolor ( 15); setfillstyle (1,12); bar (140,200,490,280); rectangle (145,205,485,275); rectangle (147,207,483,273); settextstyle (2,0,1); setusercharsize (1,1,5,1); outtextxy (170,210, ' S '); settextstyle (2,0,4); str (a: 3:3, p); outtextxy (160,257, p); str (b: 3:3, p); outtextxy (160,212, p); settextstyle (3,0,2); outtextxy (180,224, f); p :=''; str (abs (int): 7:3, p); outtextxy (190 + length (f) * 12,224, p); readln ; end;

    1: begin newsc (ea); setfillstyle (1,2); bar (170,120,490,180 + n * 15); setcolor (14); rectangle (175,125,485,175 + n * 15); rectangle ( 177,127,483,173 + n * 15); if ea mod 2 = 0 then begin outtextxy (180,130, 'Коефіцієнти Ньютона-Котеса:'); outtextxy (180,140 + (n +1) * 15, 'Натисніть ENTER для продовження'); end else begin outtextxy (180,130, 'Newton-Cotes coefficients:'); outtextxy (180,140 + (n +1) * 15, 'Press ENTER to continue'); end; hkoef (n, h); for i: = 0 to n do begin str (i, p); str (h [i]: 2:4, p1); p: = 'H' + p + '=' + p1; outtextxy (180,140 + i * 15, p); end; readln; end;

    2: begin newsc (ea); setfillstyle (1,2); bar (170,120,490,180 + n * 15); setcolor (14); rectangle (175,125,485,175 + n * 15); rectangle (177,127,483,173 + n * 15); if ea mod 2 = 0 then begin outtextxy (180,130, 'Значення функції:'); outtextxy (180,140 + (n +1) * 15, 'Натисніть ENTER для продовження'); end else begin outtextxy (180,130, 'Values of function:'); outtextxy (180,140 + (n +1) * 15, 'Press ENTER to continue'); end; for i: = 0 to n do begin str (i, p); str (y [i]: 2:4, p1); p: = 'Y' + p + '=' + p1; p1 :=''; outtextxy (180,140 + i * 15, p); str ((a + i * (ba)/n): 2:4, p1); str (i, p); if ea mod 2 = 0 then p: = ', У' + 'X' + p + '=' + p1 else p : = ', When' + 'X' + p + '=' + p1; outtextxy (285,140 + i * 15, p); end;

    readln; end;

    3 : graphik (ea, a, b, f);

    5: begin closegraph; halt; end;end;until (abs (x) mod 6) = 4; k: = abs (x) mod 6;end;end.

    ========================================= =======

    ======== МОДУЛЬ GRAPHIC ========

    =========== =====================================unit graphic;interfaceusesk_unit, crt, graph;procedure hwg (ea: word);procedure graphik (ea: word; a, b: real; f1: string);implementationprocedure hwg (ea: word);
    (Процедура вікна допомоги при графіку)varf: string;begin settextstyle (0,0,0); setfillstyle (1,3); bar (150,100,390,380); setcolor (0); rectangle (153,103,387,377); rectangle (155,105,385,375); setcolor (14); if ea mod 2 = 0 then begin outtextxy (160,115, 'ВІКНО ДОПОМОГИ'); outtextxy (160,140, 'Для роботи з графіком'); outtextxy (160,155, 'використовуйте кнопки:'); outtextxy (160,180, 'PAGE UP-початковий'); outtextxy (160,195, ' вигляд графіка; '); outtextxy (160,210,' HOME-початковий масштаб; '); outtextxy (160,225,' INSERT-включіть/виключеть '); outtextxy (160,240,' заливку області; '); outtextxy (160,255,' DELETE - увімкнути/виключеть '); outtextxy (160,270,' сітку; '); outtextxy (160,285,' END-показать/убрать цифри '); outtextxy (160,300,' F1-Допомога; '); outtextxy (160,315,' Стрілки ВГОРУ/ВНИЗ-'); outtextxy (160,330,' збільшення/зменшення '); outtextxy (160,345,' масштаб. '); outtextxy (160,360,' Для возрата натисніть ENTER. '); end else begin outtextxy (160,115,' HELP WINDOW ' ); outtextxy (160,140, 'For the work with graphic'); outtextxy (160,155, 'use this keys:'); outtextxy (160,180, 'PAGE UP-Primery form of'); outtextxy (160,195, 'graphik;') ; outtextxy (160,210, 'HOME-Primery scale;'); outtextxy (160,225, 'INSERT-Turn on/off inking'); outtextxy (160,240, 'the field;'); outtextxy (160,255, 'DELETE-Turn on/off the '); outtextxy (160,270,' net; '); outtextxy (160,285,' END-View/delete the figures '); outtextxy (160,300,' F1-Help; '); outtextxy (160,315,' Arrows UP/DOWN-Increase/'); outtextxy (160,330,' lower the scale; '); outtextxy (160,360,' Press ENTER to continue. '); end; readln; setcolor (15);end;procedure graphik (ea: word; a, b: real; f1: string);
    (процедура побудови графіків)varf, f2: string;d: char;i, v, r: integer;x1, x2, n, p, x: integer;c, k, k1: longint;y: array [0 .. 1] of double;begin x1: =- 240; x2: = 240; c: = 24; setcolor (15); n: = 0; v: = 0; r: = 0; repeat cleardevice; settextstyle (0,0,0); if ea mod 2 = 0 then begin outtextxy (10,1, 'Натисніть F1 для допомоги'); str (c/24: 2:2, f); f: = 'Масштаб' + f + ': 1'; end else begin outtextxy (10,1, 'Press F1 for help'); str (c/24: 2:2, f); f: = 'Scale' + f + ': 1'; end; outtextxy (200,1, f) ; settextstyle (3,0,1); outtextxy (307,10, 'y'); outtextxy (574,235, 'x'); outtextxy (310,240, '0 '); setlinestyle (1,7,100); line (70,240,580,240) ; line (320,20,320,460); line (320,20,315,25); line (321,20,326,25); line (580,239,575,244); line (580,240,575,235); line (70,239,580,239); line (321,20,321,460); for i : =- 9 to 10 do begin if ((320 + i * 24) 71) then line (320 + i * 24,240,320 + i * 24,242); if ((240 + i * 24) 19) then line (320,240 + i * 24,322,240 + i * 24); end; setcolor (15); for x: = -240 + round ((240 + x1)/10) to 240 + round ((240 + x1)/10) do begin funktia (1 , x-1, x, y, c, f1); k: = round (240 - (y [0]) * c); k1: = round (240 - (y [1]) * c); if ( (k0) or (k10)) then line (319-round ((240 + x1)/10) + x, k ,320-round ((240 + x1)/10) + x, k1); end; if ( v mod 2) = 0 then begin funktia (1, a, b, y, 1, f1); k: = round (240 - (y [0]) * c); k1: = round (240 - (y [ 1]) * c); line (320-round ((240 + x1)/10) + round (a * c), k, 320 --round ((240 + x1)/10) + round (a * c), 240); line (320-round ((240 + x1)/10) + round (b * c), k1, 320 --round ((240 + x1)/10) + round (b * c), 240); if 320-round ((240 + x1)/10) + a * c560 then begin funktia (1, (-240-round ( (240 + x1)/10))/c, (240 --round ((240 + x1)/10))/c, y, 1, f1); k1: = round (240 - (y [1]) * c); line (560, k1, 560,240); end; for x: = -240 to 240 do begin funktia (1, x-1, x, y, c, f1); k1: = round (240 - (y [1]) * c); if ((x/c) > a) and ((x/c) 2) then begin if k17 then setfillstyle (6,3) else setfillstyle (1,3); floodfill (320-round ((240 + x1)/10) + x, k1, 15); end; end; end; end; str (x1, f2); outtextxy (1,450, f2); if (n mod 2) = 0 then for i: =- 9 to 10 do begin settextstyle (2,0, 2); setcolor (14); if ((320 + i * 24) 71) and (i0) then begin str ((i * 24 + round ((240 + x1)/10))/c: 2:2, f); p: = 247; outtextxy (310 + i * 24, p, f); str (-i * 24/c: 2:2, f); outtextxy (330,240 + i * 24, f); end; end; for i: =- 9 to 10 do begin setcolor (15); if ((r mod 2) = 1) and (i0) then begin if ((320 + i * 24) 71) then line (320 + i * 24,20,320 + i * 24,460); if ((240 + i * 24) 19) then line (80,240 + i * 24,560,240 + i * 24); end; end; setcolor (15); d: = readkey; case d of

    # 75: begin x1: = x1-30; x2: = x2-30; end;

    # 77: begin x1: = x1 +30; x2: = x2 +30; end;

    # 80: if c> 1 then c: = c-1;

    # 72: c: = c +1; < p> # 71: c: = 24;

    # 79: n: = n +1;

    # 83: r: = r +1;

    # 82: v: = v +1;

    # 73: begin c: = 24; n: = 0; r: = 0; v: = 0; x1: =- 240; x2: = 240; end;

    # 59: hwg (ea); end;

    until d = # 13;end;end.

    ========================================= =======

    ========== МОДУЛЬ UNIT ==========

    ======= =========================================< br>($ N +)
    Unit k_unit;
    (Модуль знаходження інтеграл від многочлена q (q-1) .. (q-i +1) (qi-1) .. (qn),)
    (де n-точність інтеграла, i-номер коофіціента. )interfaceprocedure rasposn (f: string; x: real; var ec: word; var t: real);procedure hkoef (n: integer; var h: array of double);procedure funktia (n: integer; a, b: real; var y: array ofdouble; c: real; f: string);procedure koef (w: array of double; n: integer; var e: array of double);procedure mnogochlen (n, i: integer; var c: array of double);function facktorial (n: integer): double;function integral (w: array of double; n: integer): double;function mainint (n: integer; a, b: real; y: array of double): double;implementationprocedure rasposn (f: string; x: real; var ec: word; var t: real);
    (Процедура розпізнання функції)vark: word;begin k: = pos ( 'x', f); if k0 then begin (Розпізнавання функції) ec: = 1; (Код помилки) t: = x; k: = pos ( 'abs (x)', f); if k0 then t: = abs (x); k: = pos ( 'sin (x)', f); if k0 then t: = sin (x); k: = pos ( 'cos (x)', f ); if k0 then t: = cos (x); k: = pos ( 'arctg (x)', f); if k0 then t: = arctan (x); k: = pos ( 'sqr (x)' , f); if k0 then t: = x * x; k: = pos ( 'exp (x)', f); if k0 then t: = exp (x); k: = pos ( 'cos (x) * x ', f); if k0 then t: = cos (x) * x; k: = pos (' ln (x) ', f); if k0 then begin if x> 0 then t: = ln (x ) else t: = 0; end; k: = pos ( 'sqrt (x)', f); if k0 then if x> = 0 then t: = sqrt (x) else t: = 0; k: = pos ( 'arcctg (x)', f); if k0 then t: = pi/2-arctan (x); k: = pos ( 'sin (x)/x', f); if k0 then if x0 then t : = sin (x)/x; end else ec: = 0;end;procedure funktia (n: integer; a, b: real; var y: array ofdouble; c: real; f: string);
    (Процедур підрахунок Y-ков і розпізнавання функції)vart, h, x: real;k, i: integer;es: word;begin h: = (ba)/n; for i: = 0 to n do begin x: = (a + h * i)/c; rasposn (f, x, es, t); y [i]: = t ; end;end;procedure koef (w: array of double; n: integer; var e: array of double);
    (Зміна коофіціентов для інтеграла)vart: integer;begin for t: = 1 to n do e [t]: = w [t]/(n-t +2);end;procedure mnogochlen (n, i: integer; var c: array of double);
    (процедура знаходження коофіціентов при Q ^ n (q в ступені n))vark, j: integer;d: array [1 .. 100] of double;begin d [1]: = 1; for j: = 1 to n do begin (Обчислення коефіцієнтів при розкритті q * (q-1) * (q-2 )*..*( qn)) d [j +1] : = d [j] * j * (-1); if j> 1 then for k: = j downto 2 do d [k]: = d [k] + d [k-1] * j * (-1 ); end; c [1]: = d [1]; (Ділення многочлена на (qi) за схемою Горнера) for j: = 1 to n +1 do c [j]: = i * c [j-1] + d [j]; koef (c, n, c); (Зміна коефіцієнтів при інтегруванні)end;function facktorial (n: integer): double;
    (функція знаходження факторіалу)vart: integer;s: double;begin s: = 1; if n = 0 then s: = 1 else for t: = 1 to n do s: = s * t; facktorial: = s;end;function integral (w: array of double; n: integer): double;
    (функція підрахунку самого інтеграла)vart, p: integer;s, c: double;begin s: = 0; p: = n; for t: = 0 to p +1 do s: = s + w [t] * exp ((p-t 2) * ln (p)); (Підрахунок інтеграла ) integral: = s;end;procedure hkoef (n: integer; var h: array of double);
    (Процедура підрахунку коеф. Ньютона-Котеса)varp, j, d, c, i: integer;kq: array [0 .. 20] of double;s: array [0 .. 20] of double;begin p: = n; if (p mod 2) = 1 then (Обчислення половини від усіх обчисленькоефіцієнтів) d: = round ((p-1) * 0.5) else d: = round (0.5 * p); for i: = 0 to n do begin mnogochlen (p, i, kq); s [i]: = integral (kq, p); (Формування масиву з інтегралів) end; for i: = 0 to d do begin if ((pi) mod 2) = 0 then c: = 1 else c: = (-1); h [ i]: = (c * s [i])/(facktorial (i) * facktorial (pi) * p); h [pi]: = h [i]; end;end;function mainint (n: integer; a, b: real; y: array of double): double;
    (функція підрахунку основного інтеграла)varsum: double;p, i: integer;kq, h: array [0 .. 20] of double;begin p: = n; hkoef (n, h); sum: = 0; for i: = 0 to p do sum: = sum + h [i] * y [i]; (Сума творів y-ков на коефіцієнти) mainint: = sum * (ba);end;end.

    ========================================= =======

    ======= ОСНОВНА ПРОГРАМА =======

    ============= ===================================

    ($ N +)program Newton_Cotes_metod; (Програма знаходження визначеного інтеграла)uses (методом Ньютона-Котеса)k_unit, k_graph, graph, crt;constt = 15;varc: char;a1, b1, a, b: real;n1, v, r, n: integer;h, y: array [0 .. t] of double;ea, k: word;int: double;f: string;begin ea: = 10; v: = detect; initgraph (v, r ,''); cleardevice; newsc (ea); winwin1; setcolor (15); outtextxy (380,430, 'Натисніть F2, для зміни мови.'); repeat win1 (ea); settextstyle (3,0,1); outtextxy (178,340, 'Press Enter ...'); delay (13000); bar (178,340,350,365); delay (13000); if keypressed then (Зміна мови) begin c: = readkey; if c = # 60 then begin ea: = ea 1; newsc (ea); winwin1; setcolor (15); if ea mod 2 = 0 then outtextxy (380,430, 'Натисніть F2, для зміни мови.' ) else outtextxy (380,430, 'Press F2 key to change language.'); end; end; until c = # 13; repeat newsc (ea); win2 (ea, k); (Введення способи завдання функції) case k of

    0: wwod1 (ea, y, n, a, b);

    1: begin wwod2 (ea, ea, n1, a1, b1, f); n: = n1 ; a: = a1; b: = b1; k: = 4; end; end; if k = 4 then funktia (n, a, b, y, 1, f); int: = mainint (n, a, b , y); (Обчислення інтеграла) hkoef (n, h); proline (ea); win3 (ea, n, a, b, int, f, h, k); (Останнє меню виводу результатів) until k4; closegraph;end.

    Розглянемо результати тестових випробувань для функцій sin (x) наінтервалі [-5; 3] і exp (x) на інтервалі [2; 8]

    | | n = 1 | n = 2 | n = 3 | n = 4 | n = 5 | n = 7 |
    | Sin (x) | 4,040017 | 3,02112 | 0,087629 | 1,779012 | 1,537481 | 1,246 |
    | Exp (x) | 8965,041 | 3581,999 | 3271,82 | 3002,908 | 2990,644 | 2974,322 |
    | N = 9 | n = 12 |
    | 1,273561 | 1,27366 |
    | 2973,593 | 2973,569 |

    Видно, що при збільшенні кількості вузлів інтерполяції точність зростає,проте при великих n (n> 15) спостерігався зворотний ефект.
    Рекомендований діапозон n: від 7 до 13.

    1) Інтерфейс програми написаний 2 мовами: українською та англійською. Перехід з однієї мови на іншу здійснюється в початковому вікні шляхом натиснення клавіши F2. Змінити мову можна тільки в цій частині програми.
    2) При введенні значень функції вручну необхідно вводити тільки цифри і після кожного введення натискати клавішу ENTER.
    3) При випробуванні програми під різні операційні системи (Dos, Windows 98 -

    2k, NT, з під Паскаля) відбувався незрозумілий баг з невірним виводом на екран значень коефіцієнтів Ньютона-Котеса, хоча інтеграл вважався вірно. Для нормального перебування їх бажано запускати програму через

    Dos.
    4) При введенні параметрів до "Меню завдання параметрів знаходження інтеграла" бажано їх вводити поступово зверху вниз, тобто спочатку ввести кількість вузлів інтерполяції, потім межі інтегрування, а вже потім вводити саму функцію.
    5) Дана версія програми не здатна розпізнавати всі функції. Вона може розпізнати тільки стандартні функції Турбо Паскаля і ще кілька дотполнітельних: sin (x)/x, cos (x) * x, arcctg (x). Для роботи зі специфічними функціями необхідно в модулі K-unit у процедурі RASPOSN в кінці, перед end else, додати: k: = pos ( 'Формула f (x)', f); if k0 then t: = 'Формула f (x ) ';де 'Формула f (x)' - бажана формула для розпізнання.
    6) Всі допомоги по вводу і роботі з пограммой виводиться у вікні допомоги.

    Для знаходження інтеграла існує багато методів, проте, метод
    Ньютона-Котеса один з найшвидших: достатньо знати значеннякоефіцієнтів для n = 4, щоб з точністю до сотих миттєво порахуватиінтеграл. Швидкість і простота-головні частини цього методу.

    В.І. Гризлов «Турбо Паскаль 7.0" Москва: ДМК 2000р.
    Даніліна «Чисельні методи" Москва: Вища школа 1978р.

    ------------------ -----< br>


         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status