Арифметичні обчислення з високою точністю
Розробка програмного забезпечення на алгоритмічній мові 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