Арифметичні обчислення з високою точністю

Розробка програмного забезпечення на алгоритмічній мові TurboPascal 7.0 для здійснення арифметичних операцій з високою точністю для знаходження математичних констант: чисел e і π. Математичний опис і постановка задачі. Опис програмного забезпечення.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 12.09.2010
Размер файла 29,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Зміст

  • Вступ
  • 1. Математичний опис задачі
  • 2. Постановка задачі
  • 3. Опис контрольного прикладу
  • 4. Опис програмного забезпечення
  • 5. Виконання контрольного прикладу
  • Висновки
  • Література
  • Додаток
  • Вступ
  • При написанні даної роботи була поставлена задача здійснення арифметичних обчислень з високою точністю. Загалом, існуючі системи програмування дозволяють забезпечувати високу точність, наприклад, TurboPascal без використання спеціальних математичних співпроцесорів працює з числами у діапазоні від 10-37 до 1038, а з використанням співпроцесорів і типів підвищеної точності порядок числа досягає 4 знаків (але число значущих цифр - 19-20, що значно менше, ніж потрібно для виконання даної роботи). Більша точність потрібна лише при виконанні специфічних задач. В даній роботі реалізовані дві з них - обчислення відомих математичних констант - числа і числа e з багатьма знаками після коми. Обидва ці числа є ірраціональними і трансцендентними. Особливу увагу викликало до себе число (задача квадратури кругу). Його природа була з'ясована лише після кількох тисячоліть досліджень. Зараз за допомогою ЕОМ розраховані десятки тисяч його знаків. Тим часом для обчислення довжини кола, радіус якого дорівнював би відстані від Землі до найвіддаленішої туманності з похибкою, меншою за 1 мм, достатньо було б перших 40 знаків цього числа.
  • При виконанні роботи був створений тип “число”, який відповідав би числу з 50 знаками до коми і 50 знаками після коми. Звичайно, цю кількість можна встановлювати якою завгодно, згідно з можливостями конкретного комп'ютера. Були реалізовані основні арифметичні операції для таких чисел за відомими ще з початкової школи алгоритмами додавання, віднімання, множення і ділення “в стовпчик”, реалізоване відношення порядку і відношення рівності для таких об'єктів, введена операція заокруглення з потрібною точністю і ще цілий ряд допоміжних процедур. Правильність роботи розроблених програм перевірено на контрольному прикладі. Тоді, користуючись розробленим апаратом, були виконані дві задачі по обчисленню числа і числа e. Тексти вихідних програм та результати роботи програм містяться в додатках до роботи.
  • 1. Математичний опис задачі
  • Числа трактуються як структури, що складаються з компонент:
  • число значущих цифр до коми
  • число значущих цифр після коми
  • масив значущих цифр до коми
  • масив значущих цифр після коми.
  • Перша і друга компоненти не повинні перевищувати якогось певного числа (в даній роботі 50).
  • Заокруглення числа здійснюється за загальноприйнятими правилами: якщо цифра, по якій здійснюється заокруглення, менша 5, то заокруглюємо в бік меншого числа, інакше в бік більшого числа.
  • Для так побудованих структур за алгоритмами додавання, віднімання, множення і ділення “в стовпчик” означуються відповідні дії. Точність максимально можлива, з пізнішим заокругленням.
  • Математичні константи число і число e обчислюються як суми рядів
  • e= , де i!=1*2*…i
  • обчислюється за допомогою ряду
  • arctg x=x-+-+… (ряд Грегорі)
  • При значенні x=1 одержуємо ряд Лейбніца
  • Цей ряд має елегантний вигляд і відіграє важливу роль в теорії рядів, але для обчислювальних цілей малопридатний, оскільки повільно збігається. Ефективнішим є ряд, використаний Авраамом Шарпом, одержаний з ряду Грегорі при значенні
  • x=
  • Саме цей ряд і був використаний у даній роботі для демонстрації можливостей розробленого типу “число” і операцій з ним. Недоліком методу є необхідність знаходження , тому одержана трохи нижча (на 3 знаки) точність, ніж у результату, одержаного методом Ейлера.
  • Ефективнішим є використання ряду, за допомогою якого Ейлер обчислив 200 знаків числа
  • В представленій роботі реалізований і цей метод, результат роботи порівняно з результатом, одержаним за методом Шарпа. Результати повністю співпали в межах точності першого методу.

2. Постановка задачі

Розробити тип “число” . До нього повинні входити:

число значущих цифр до коми

число значущих цифр після коми

масив значущих цифр до коми

масив значущих цифр після коми.

Ввести основні арифметичні операції, відношення порядку та відношення рівності до так означеного типу. Коректність виконання арифметичних операцій перевірити на даних, приведених в контрольному прикладі (розділ 3 цієї роботи).

Використати розроблений математичний апарат для знаходження наближеного значення числа і числа e за методами, приведеними в розділі 1 цієї роботи.

3. Опис контрольного прикладу

Для перевірки правильності роботи програми пропонується виконати такий комплекс операцій:

9087040.4974346+6509767.06543217

9087040.4974346-6509767.06543217

9087040.4974346*6509767.06543217

9087040.4974346:6509767.06543217

Результати, одержані за допомогою засобу Калькулятор Windows 98

Сума

9087040.4974346+6509767.06543217=15596807.56286677

Різниця

9087040.4974346-6509767.06543217=2577273.43200243

Добуток

9087040.4974346*6509767.06543217=59154516952448.122363225311082

Частка

9087040.4974346:6509767.06543217=1.395908702431

4. Опис програмного забезпечення

Представлене програмне забезпечення розроблене на алгоритмічній мові TurboPascal 7.0. Мова обрана з огляду на її високу структурованість.

Програмне забезпечення записане у таких файлах:

бібліотеці підпрограм - файлі biblunit.pas, який окремо відкомпільований як модуль biblunit.tpu; його текст приведений у додатку 1.

файлі kurs0.pas, де здійснено перерахунок контрольного прикладу

файлі kurs1.pas, де розраховується значення числа e

файлі kurs2.pas, де розраховується значення числа за методом Шарпа

файлі kurs3.pas, де розраховується значення числа за методом Ейлера

В бібліотеці підпрограм в розділі INTERFACE описані тип chyslo, глобальні змінні zero та od, які відіграють роль відповідно нуля та одиниці поля чисел.

Там же описані наступні процедури і функції

function max(n,m:integer):integer;

знаходження більшого з двох чисел

procedure vvid(var x:chyslo);

ввід даних типу “число”

procedure vyvid(x:chyslo);

вивід даних типу “число”

function poriadok(x:integer):integer;

порядок цілого числа

function por(x:chyslo):integer;

число значущих цифр до коми

function mpor(x:chyslo):integer;

число значущих цифр після коми

function riv(x,y:chyslo):boolean;

побудова відношення “рівне”

function stdes(x:chyslo):integer;

порядок типу “число”

function bilse(x,y:chyslo):boolean;

побудова відношення порядку “більше”

procedure dodavan(x,y:chyslo;var z:chyslo);

додавання даних типу “число”

procedure vidnim(x,y:chyslo;var z:chyslo);

віднімання даних типу “число”

procedure pidvst(l:integer;var x:chyslo);

підвищення порядку типу “число”

procedure ponst(l:integer;var x:chyslo);

пониження порядку типу “число”

procedure mnoint(x:chyslo;l:integer;var y:chyslo);

множення даних типу число на ціле число

procedure zaokrug(l:integer;var x:chyslo);

заокруглення даних типу “число” з заданою точністю

procedure mnojen(x,y:chyslo;var z:chyslo);

множення даних типу “число” між собою

procedure stepin(x:chyslo;l:integer;var y:chyslo);

піднесення даного типу “число” до степеня

procedure dilen(x,y:chyslo;var z:chyslo);

ділення даних типу “число” одне на одне

procedure dilenna(x,y:chyslo;var z:chyslo);

уточнення ділення даних типу “число” шляхом рекурсії

procedure intchyslo(k:integer;var t:chyslo);

переведення цілого числа в тип “число”

procedure zerod;

конструювання нуля і одиниці

5. Виконання контрольного прикладу

Ілюстрація роботи програми

аргументи

9087040.4974346

6509767.06543217

Сума

15596807.56286677

Різниця

2577273.43200243

Добуток

59154516952448.122363225311082

Частка

1.3959087024308649569276797297453783242543625252752

Результати співпадають з одержаними у розділі 3 в межах точності.

Висновки

В представленій роботі розроблено програмні засоби для здійснення арифметичних операцій з високою точністю, робота програмних засобів перевірена на контрольному прикладі. Одержані результати коректні в межах заданої точності.

Так розроблені програмні засоби використані для знаходження відомих математичних констант - число e і числа . Одержані результати виведені в результатні файли і їх роздруківки представлені в роботі.

Література

Ахо А., Хопкрофт Дж. “Построение и анализ вычислительных алгоритмов”, Москва, 1989

Ф.Кымпан “История числа ”, Издательство “Наука” Главная редакция физико-математической литературы, Москва, 1971

Д.Б.Поляков, И.Ю.Круглов “Программирование в среде ТУРБО ПАСКАЛЬ”,Издательство МАИ, Москва, 1992

Довгаль С.И., Литвинов Б.Ю., Сбитнев А.И. “Персональные ЭВМ. ТурбоПаскаль V6.0”, Информсистема сервис, Київ, 1993

Довгаль С.И., Сбитнев А.И. “Паскаль, ТурбоПаскаль, многооконная среда на персональных ЭВМ”, Информсистема сервис, Київ, 1992

“Компьютеры”, Справочное руководство в 3 томах под редакцией Г.Хелмса, Москва, Мир, 1996

Рейнгольд Э., Нивергельт Д., Део Н., “Комбинаторные алгоритмы, теория и практика”, Москва, 1980

Додаток

Текст модуля бібліотеки програм

UNIT biblunit; {Бiблiотека пiдпрограм}

INTERFACE

uses crt;

const nom=50;

TYPE ar=array[1..50] of integer;

chyslo=record

a:array[1..50] of integer; {знаки до коми}

b:array[1..50] of integer; {знаки пiсля коми}

n:integer; {число знакiв до коми}

m:integer; {число знакiв пiсля коми}

end;

var zero,od:chyslo;

fi:text;

function max(n,m:integer):integer;

procedure vvid(var x:chyslo);

procedure vyvid(x:chyslo);

function poriadok(x:integer):integer;

function por(x:chyslo):integer;

function mpor(x:chyslo):integer;

function riv(x,y:chyslo):boolean;

function stdes(x:chyslo):integer;

function bilse(x,y:chyslo):boolean;

procedure dodavan(x,y:chyslo;var z:chyslo);

procedure vidnim(x,y:chyslo;var z:chyslo);

procedure pidvst(l:integer;var x:chyslo);

procedure ponst(l:integer;var x:chyslo);

procedure mnoint(x:chyslo;l:integer;var y:chyslo);

procedure zaokrug(l:integer;var x:chyslo);

procedure mnojen(x,y:chyslo;var z:chyslo);

procedure stepin(x:chyslo;l:integer;var y:chyslo);

procedure dilen(x,y:chyslo;var z:chyslo);

procedure dilenna(x,y:chyslo;var z:chyslo);

procedure intchyslo(k:integer;var t:chyslo);

procedure zerod;

implementation

function max(n,m:integer):integer;

begin

{бiльше з 2 чисел}

if (n>=m) then max:=n else max:=m

end;

procedure vvid(var x:chyslo);

{ввiд числа}

var i:integer;

begin

clrscr;

x:=zero;

with x do begin

write('Введiть число знакiв до коми ');

readln(n);

write('Введiть число знакiв пiсля коми ');

readln(m);

for i:=n downto 1 do begin gotoxy(20-i,10);read(a[i]);end;

gotoxy(20,10);

write('.');

for i:=1 to m do begin gotoxy(20+i,10);read(b[i]);end;

end;

end;

procedure vyvid(x:chyslo);

var i:integer;

begin

{вивiд числа}

with x do begin

if (n>0) then

for i:=n downto 1 do write(fi,a[i])

else

write(fi,'0');

write(fi,'.');

if (m>0) then

for i:=1 to m do write(fi,b[i]);

end;

end;

function poriadok(x:integer):integer;

var i,des:integer;

begin

{перша значуща цифра}

i:=1;des:=1;

while x>=des do begin

des:=des*10;

i:=i+1;

end;

poriadok:=i-1;

end;

function por(x:chyslo):integer;

var i:integer;

begin

{перша значуща цифра}

i:=nom;

while ((x.a[i]=0)and(i>0)) do i:=i-1;

por:=i;

end;

function mpor(x:chyslo):integer;

var i:integer;

begin

{число знакiв пiсля коми}

i:=nom;

while ((x.b[i]=0) and (i>0)) do

begin

i:=i-1;

end;

mpor:=i;

end;

function riv(x,y:chyslo):boolean;

var i,ni:integer;

begin

ni:=0;

x.n:=por(x);

x.m:=mpor(x);

y.n:=por(y);

y.m:=mpor(y);

if((x.n<>y.n)or(x.m<>y.m)) then ni:=1

else

begin

for i:=1 to nom do if (x.a[i]<>y.a[i]) then ni:=1;

for i:=1 to nom do if (x.b[i]<>y.b[i]) then ni:=1

end;

if (ni=1) then riv:=false else riv:=true;

end;

function stdes(x:chyslo):integer;

{розряд числа}

var i,n1:integer;

begin

x.n:=por(x);

x.m:=mpor(x);

if(riv(x,zero)) then n1:=-nom-1

else

if (por(x)>0) then n1:=por(x)-1

else

begin

i:=1;

while (x.b[i]=0) do i:=i+1;

n1:=-i;

end;

stdes:=n1;

end;

function bilse(x,y:chyslo):boolean;

var ni:boolean;

i,l:integer;

begin

{перевiрка яке число бiльше}

if (riv(x,y)) then ni:= false

else

i:=nom;

while ((x.a[i]=y.a[i])and(i>0)) do i:=i-1;

if (i>0) then

if(x.a[i]>y.a[i]) then ni:=true else ni:=false;

if (i=0) then

begin

i:=1;

while ((x.b[i]=y.b[i])and(i<nom)) do i:=i+1;

if(x.b[i]>y.b[i]) then ni:=true else ni:=false;

end;

bilse:=ni;

end;

procedure intchyslo(k:integer;var t:chyslo);

begin

t:=od;

if (k<10) then

begin

t.n:=1;

t.a[1]:=k;

end;

if ((k>=10) and (k<100)) then

begin

t.n:=2;

t.a[2]:=k div 10;

t.a[1]:=k-t.a[2]*10;

end;

end;

procedure dodavan(x,y:chyslo;var z:chyslo);

var i,perenos:integer;

begin

{додавання двох чисел}

z:=zero;

z.m:=max(x.m,y.m);

z.n:=max(x.n,y.n);

perenos:=0;

for i:=z.m downto 1 do begin

z.b[i]:=x.b[i]+y.b[i]+perenos;

if z.b[i]>=10 then

begin

z.b[i]:=z.b[i]-10;

perenos:=1;

end

else perenos:=0;

end;

for i:=1 to z.n do begin

z.a[i]:=x.a[i]+y.a[i]+perenos;

if z.a[i]>=10 then

begin

z.a[i]:=z.a[i]-10;

perenos:=1;

end

else perenos:=0;

end;

if (perenos=1) then begin z.n:=z.n+1;z.a[z.n]:=1 end;

z.m:=mpor(z);

end;

procedure vidnim(x,y:chyslo;var z:chyslo);

var i,j:integer;

begin

{вiднiмання двох чисел}

z:=zero;

z.m:=max(x.m,y.m);

z.n:=max(x.n,y.n);

for i:=z.m downto 1 do

if (x.b[i]>=y.b[i]) then z.b[i]:=x.b[i]-y.b[i]

else

begin

x.b[i]:=x.b[i]+10;

z.b[i]:=x.b[i]-y.b[i];

j:=i-1;

while ((x.b[j]=0)and(j>=1)) do

begin {4}

x.b[j]:=x.b[j]+9;

j:=j-1;

end;

if (j>=1) then x.b[j]:=x.b[j]-1

else

begin

j:=1;

while(x.a[j]=0) do

begin

x.a[j]:=9;

j:=j+1;

end;

x.a[j]:=x.a[j]-1;

end;

end;

i:=1;

for i:=1 to z.n do

if(x.a[i]>=y.a[i]) then z.a[i]:=x.a[i]-y.a[i]

else

begin

x.a[i]:=x.a[i]+10;

z.a[i]:=x.a[i]-y.a[i];

j:=i+1;

while (x.a[j]=0) do

begin

x.a[j]:=x.a[j]+9;

j:=j+1;

end;

x.a[j]:=x.a[j]-1;

end;

z.n:=por(z);

z.m:=mpor(z);

end;

procedure pidvst(l:integer;var x:chyslo);

procedure pidv(var x:chyslo);

var i:integer;

begin

with x do begin

for i:=n+1 downto 2 do a[i]:=a[i-1];

a[1]:=b[1];

for i:=1 to m-1 do b[i]:=b[i+1];

b[m]:=0;

x.n:=por(x);

x.m:=mpor(x);

end;

end;

var i:integer;

begin

{домноження на 10^l}

for i:=1 to l do pidv(x);

x.n:=por(x);

x.m:=mpor(x);

end;

procedure ponst(l:integer;var x:chyslo);

procedure pon(var x:chyslo);

var i:integer;

begin

with x do begin

for i:=m+1 downto 2 do b[i]:=b[i-1];

b[1]:=a[1];

for i:=1 to n-1 do a[i]:=a[i+1];

a[n]:=0;

x.n:=por(x);

x.m:=mpor(x);

end;

end;

var i:integer;

begin

{дiлення на 10^l}

for i:=1 to l do pon(x);

x.n:=por(x);

x.m:=mpor(x);

end;

procedure mnoint(x:chyslo;l:integer;var y:chyslo);

var i,perenos,dob:integer;

begin

{домноження на цiле число}

y:=zero;

perenos:=0;

for i:=x.m downto 1 do

begin

dob:=x.b[i]*l+perenos;

if (dob>=10) then begin

perenos:=dob div 10;

dob:=dob-10*perenos;

end

else perenos:=0;

y.b[i]:=dob;

end;

for i:=1 to x.n do

begin

dob:=x.a[i]*l+perenos;

if (dob>=10) then begin

perenos:=dob div 10;

dob:=dob-10*perenos;

end

else perenos:=0;

y.a[i]:=dob;

end;

if (perenos>0) then begin

y.a[x.n+1]:=perenos;

end;

y.n:=por(y);

y.m:=mpor(y);

end;

procedure zaokrug(l:integer;var x:chyslo);

{заокруглення з точнiстю}

var i:integer;odst:chyslo;

begin

odst:=od;

ponst(l,odst);

if x.b[l+1]<5 then for i:=l+1 to nom do x.b[i]:=0

else

begin

for i:=l+1 to nom do x.b[i]:=0;

dodavan(x,odst,x);

end;

end;

procedure mnojen(x,y:chyslo;var z:chyslo);

var i:integer;

s,t:chyslo;

begin

{множення двох чисел}

s:=zero;

for i:=y.m downto 1 do

begin

mnoint(x,y.b[i],t);

ponst(i,t);

dodavan(s,t,s);

end;

for i:=1 to y.n do

begin

mnoint(x,y.a[i],t);

pidvst(i-1,t);

dodavan(s,t,s);

end;

z:=s;

zaokrug(nom-1,z);

z.n:=por(z);

z.m:=mpor(z);

zaokrug(z.m,z);

z.n:=por(z);

z.m:=mpor(z);

end;

procedure stepin(x:chyslo;l:integer;var y:chyslo);

var i:integer;

begin

y:=od;

for i:=1 to l do mnojen(y,x,y);

end;

procedure dilen(x,y:chyslo;var z:chyslo);

label 1;

var u,v:chyslo;i,j,k,l,t1,t2:integer;

begin

{дiлення двох чисел}

t1:=0;t2:=0;

z:=zero;

if(riv(x,y)) then z:=od;

if (bilse(x,y)) then

begin

i:=0;

while (bilse(x,y)) do begin pidvst(1,y);i:=i+1 end;

t1:=i;

end;

if (bilse(y,x)) then

begin

i:=0;

while (bilse(y,x)) do begin pidvst(1,x);i:=i+1 end;

ponst(1,x);t2:=i-1;

end;

for i:=1 to nom-t2 do

begin

j:=0;

pidvst(1,x);

u:=zero;

1:mnoint(y,j,u);

if (riv(x,u)) then begin k:=j end

else

if (bilse(u,x)) then begin k:=j-1;end

else

begin j:=j+1;goto 1; end;

z.b[i]:=k;

mnoint(y,k,v);

vidnim(x,v,x);

end;

pidvst(t1,z);

ponst(t2,z);

zaokrug(nom-1,z);

z.n:=por(z);

z.m:=mpor(z);

end;

procedure dilenna(x,y:chyslo;var z:chyslo);

var i:integer;t1,t2,t3,t4,t5:chyslo;

{уточнення дiлення}

begin

t1:=x;t2:=y;

dilen(x,y,z);

for i:=1 to 20 do

begin

mnojen(y,z,t3);

if (bilse(t3,x)) then

begin

vidnim(t3,x,t4);

dilen(t4,y,t5);

vidnim(z,t5,z)

end

else

if (bilse(x,t3)) then

begin

vidnim(x,t3,t4);

dilen(t4,y,t5);

dodavan(z,t5,z);

end;

zaokrug(nom-1,z);

z.n:=por(z);

z.m:=mpor(z);

zaokrug(mpor(z),z);

z.n:=por(z);

z.m:=mpor(z);

end;

end;

procedure zerod;

var i:integer;

begin

with zero do

begin

n:=0;

m:=20;

for i:=1 to 50 do a[i]:=0;

for i:=1 to 50 do b[i]:=0;

end;

od:=zero;

od.n:=1;

od.a[1]:=1;

end;

end.

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

program kurs0;

{$M 65520,0,655360}

uses biblunit,Crt;

{iлюстрацiя роботи програми}

var t1,t2,t3,t4,t5,t6:chyslo;

i,m:integer;

fi:text;

begin

zerod;

assign(fi,'tor\\res.txt');

rewrite(fi);

vvid(t1);

vvid(t2);

clrscr;

writeln(fi,'аргументи');

vyvid(t1);

writeln(fi);

vyvid(t2);

writeln(fi);

writeln(fi,'Сума');

dodavan(t1,t2,t3);

vyvid(t3);

writeln(fi);

writeln('Рiзниця');

vidnim(t1,t2,t4);

vyvid(t4);

writeln(fi);

writeln(fi,'Добуток');

mnojen(t1,t2,t5);

vyvid(t5);

writeln(fi);

writeln(fi,'Частка');

dilenna(t1,t2,t6);

vyvid(t6);

writeln(fi);

close(fi);

end.

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

program kurs1;

{$M 65520,0,655360}

{знаходження числа e}

uses biblunit,Crt;

var factor,od1,suma,t1,t2,t3:chyslo;

i,m:integer;

begin

assign(fi,'tor\\rese.txt');

rewrite(fi);

clrscr;

zerod;

od1:=od;

ponst(47,od1);

factor:=od;

mnoint(od,2,suma);i:=2;

repeat

writeln('i=',i);

intchyslo(i,t1);

mnojen(factor,t1,factor);

dilen(od,factor,t2);

dodavan(suma,t2,suma);

i:=i+1;

until(bilse(od1,t2));

writeln(fi,'Значення числа e');

vyvid(suma);

close(fi);

end.

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

program kurs2;

{$M 65520,0,655360}

{знаходження числа pi}

uses biblunit,Crt;

var ko1,ko2,ko3,suma,suma1,suma2,spi,t0,t1,t2,t3,od1,dwa,try,kt:chyslo;

i,m,k:integer;

begin

assign(fi,'tor\\respi.txt');

rewrite(fi);

clrscr;

zerod;

{блок знаходження кореня з 3}

od1:=od;

ponst(45,od1);

try:=od;

try.a[1]:=3;

dwa:=od;

dwa.m:=1;

dwa.a[1]:=0;

dwa.b[1]:=5;

ko1:=od;

ko2:=od;

ko1.m:=1;

ko2.m:=1;

ko1.b[1]:=7;

ko2.b[1]:=8;

repeat

dodavan(ko1,ko2,ko3);

mnojen(ko3,dwa,ko3);

mnojen(ko3,ko3,t2);

if (bilse(t2,try)) then ko2:=ko3 else ko1:=ko3;

if (bilse(t2,try)) then vidnim(t2,try,t1)

else vidnim(try,t2,t1);

until (bilse(od1,t1));

dilen(od,ko3,ko3);

writeln('корiнь пiдрахували');

{блок пiдсумовування ряду}

suma:=od;

m:=1;

t3:=od;

i:=1;

repeat

m:=-m;

mnoint(t3,3,t3);

k:=2*i+1;

intchyslo(k,kt);

mnojen(t3,kt,t1);

dilen(od,t1,t2);

if (m>0) then dodavan(suma,t2,suma)

else vidnim(suma,t2,suma);

i:=i+1;

until (bilse(od1,t2));

mnoint(suma,6,spi);

mnojen(spi,ko3,spi);

writeln(fi,'Значення число П');

writeln;

vyvid(spi);

writeln(fi);

close(fi);

end.

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

program kurs3;

{$M 65520,0,655360}

{знаходження числа pi методом Ейлера}

uses biblunit,Crt;

var suma,suma1,suma2,spi,t0,t1,t2,t3,od1,dwa,try,kt,chot,dev:chyslo;

i,m,k:integer;

begin

assign(fi,'tor\\respi1.txt');

rewrite(fi);

clrscr;

zerod;

od1:=od;

ponst(45,od1);

dwa:=od;

dwa.m:=1;

dwa.a[1]:=0;

dwa.b[1]:=5;

mnojen(dwa,dwa,chot);

try:=od;

try.a[1]:=3;

dilen(od,try,try);

mnojen(try,try,dev);

{dwa=1/2 try=1/3 chot=1/4 dev=1/9}

{блок пiдсумовування ряду}

suma1:=dwa;

m:=1;

t3:=od;

i:=1;

t0:=dwa;

repeat

m:=-m;

mnojen(t0,chot,t0);

k:=2*i+1;

intchyslo(k,kt);

dilen(od,kt,t2);

mnojen(t2,t0,t1);

if (m>0) then dodavan(suma1,t1,suma1)

else vidnim(suma1,t1,suma1);

i:=i+1;

until (bilse(od1,t1));

writeln('Перший крок пройшов');

suma2:=try;

m:=1;

t0:=try;

i:=1;

repeat

m:=-m;

mnojen(t0,dev,t0);

k:=2*i+1;

intchyslo(k,kt);

dilen(od,kt,t2);

mnojen(t2,t0,t1);

if (m>0) then dodavan(suma2,t1,suma2)

else vidnim(suma2,t1,suma2);

i:=i+1;

until (bilse(od1,t1));

dodavan(suma1,suma2,suma);

mnoint(suma,4,spi);

zaokrug(45,spi);

writeln(fi,'Значення число П');

writeln;

vyvid(spi);

writeln(fi);

close(fi);

end.

Результати роботи програми

Значення числа e

2.7182818284590452353602874713526624977572470936998

Значення число П (метод Шарпа)

3.14159 26535 89793 23846 26433 83279 50288 41971 69399

Значення число П (метод Ейлера)

3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510


Подобные документы

  • Розробка програми калькулятора, що може виконувати найголовніші арифметичні операції над двома числами. Вимоги до апаратного і програмного забезпечення. Опис форм та компонентів програми. Розробка алгоритмів програмного забезпечення. Опис коду програми.

    курсовая работа [57,1 K], добавлен 31.05.2013

  • Аналіз системи збору первинної інформації та розробка структури керуючої ЕОМ АСУ ТП. Розробка апаратного забезпечення інформаційних каналів, структури програмного забезпечення. Алгоритми системного програмного забезпечення. Опис програмних модулів.

    дипломная работа [1,9 M], добавлен 19.08.2012

  • Аналіз предметної області, опис проекту бази даних, моделей майбутнього програмного забезпечення гри для персонального комп'ютера "Міста". Функціональні можливості програмного забезпечення, які необхідно реалізувати. Інтерфейс програмного забезпечення.

    курсовая работа [2,3 M], добавлен 02.06.2016

  • Розробка компонентів програмного забезпечення системи збору даних про хід технологічного процесу. Опис програмного забезпечення: сервера, що приймає дані про хід технологічного процесу, КОМ для його імітування, робочої станції для відображення даних.

    курсовая работа [1,3 M], добавлен 20.11.2010

  • Розробка програмного забезпечення для управління транспортними платформами на базі програмованого логічного контролера S7-300 в Simatic STEP-7. Аналіз програмного забезпечення, розрахунок показників його надійності. Опис алгоритму функціонування системи.

    дипломная работа [2,1 M], добавлен 17.05.2012

  • Розв’язання нелінійних алгебраїчних рівнянь методом хорд. Опис структури програмного проекту та алгоритмів розв’язання задачі. Розробка та виконання тестового прикладу. Інші математичні способи знаходження коренів рівнянь, та опис виконаної програми.

    курсовая работа [4,1 M], добавлен 28.09.2010

  • Цілі та головні задачі систем метаданих, їх структура та елементи, опис словників та класифікаторів. Розробка логіко-функціональної схеми надбудови, її функціональне призначення. Економічне обґрунтування доцільності розробки програмного продукту.

    дипломная работа [1,7 M], добавлен 26.10.2012

  • Дослідження алгоритму роботи та коду програми. Оцінка методом "чорного ящика". Тестування і налагодження розробленої програми на алгоритмічній мові високого рівня. Оцінювання якості програмного забезпечення за об’єктно-орієнтованими метриками зв’язності.

    курсовая работа [143,1 K], добавлен 11.03.2021

  • Опис підрозділу гнучких виробничих систем (ГВС) як об‘єкта управління. Проектування алгоритмічного забезпечення системи оперативного управління. Складання розкладу роботи технологічного обладнання. Розробка програмного забезпечення підсистем СОУ ГВС.

    курсовая работа [2,0 M], добавлен 11.07.2012

  • Первинний опис програмного забезпечення графічний редактор. Функціональна специфікація класів. Проектування архітектури програми, структури даних та графічного інтерфейсу. Опис алгоритму природною мовою. Аналіз впливу зміни вимог на зміну архітектури.

    курсовая работа [2,4 M], добавлен 07.10.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.