Автор работы: Пользователь скрыл имя, 16 Марта 2011 в 21:09, курсовая работа
Дана розробка повинна автоматизувати процес розрахунку аргументів функцій та власне їх значень у заданих рівновіддалених точках, збереження вхідної та вихідної інформації та розпізнавання введеної у відповідному вікні формули.
Програма виконує такі основні функції:
•Розпізнавання формули, яку введено у відповідному вікні;
•Пошук мінімального та максимального значення функції у певному діапазоні зміни аргументу, який вводиться у вікні програми;
•Побудова графіку функції у відповідному діапазоні;
•Розрахунок аргументів функцій та значень функцій у рівновіддалених точках, кількість яких вводиться у вікні програми та занесення розрахованих величин у відповідну таблицю;
•Проведення кускової інтерполяції кубічними многочленами Бесселя та побудова відповідної кривої.
ЗАВДАННЯ НА ДИПЛОМНУ РОБОТУ СТУДЕНТУ 3
АНОТАЦІЇ 5
ЗМІСТ 7
ТЕОРЕТИЧНА ЧАСТИНА 9
1. ТЕХНІЧНЕ ЗАВДАННЯ 10
1.Підстави для розробки 10
2.Призначення розробки 10
3.Аналіз вимог до програмного забезпечення 10
1.Функціональні вимоги 10
2.Вимоги до складу та параметрів технічних засобів 11
3.Вимоги до інтерфейсу 11
4.Вимоги до інформаційної та програмної сумісності 12
5.Вимоги до тестування програмного забезпечення 12
1.4.Вимоги до програмної документації 12
1.4.1. Склад супроводжувальної документації 12
1.4.2. Вимоги до супроводжувальної документації 13
1.5. Стадії та етапи розробки 13
1.6. Порядок контролю і приймання 14
ПРАКТИЧНА ЧАСТИНА 15
2. АРХІТЕКТУРА, ФУНКЦІОНАЛЬНІ ТА ТЕХНІЧНІ ПОКАЗНИКИ 16
2.1. Призначення та область застосування 16
2.2. Опис та обґрунтування обраної архітектури 16
2.3. Функціональна специфікація 18
1.Опис функціональних можливостей 18
2.Опис інтерфейсу користувача 18
2.4.Технічна специфікація 23
2.4.1. Опис діаграми модулів 23
2.4.2. Опис і обґрунтування вхідних та вихідних даних 24
2.5. Математичне забезпечення 25
3. КОНСТРУЮВАННЯ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ 29
3.1. Опис і обґрунтування обраних програмних засобів 29
3.2. Опис програми 29
3.2.1. Функціональні можливості 29
3.2.2. Опис логічної структури 30
3.2.3. Виклик і завантаження 32
3.2.4. Використані технічні засоби 32
4. ПРОГРАМА ТА МЕТОДИКА ВИПРОБУВАНЬ 33
4.1. Об‘єкт випробувань 33
4.2. Використані технічні засоби 33
4.3. Порядок та методика випробувань 33
4.4. Результати випробувань 35
5. ВИСНОВКИ 36
6. ВИКОРИСТАНА ЛІТЕРАТУРА 37
7. ДОДАТКИ 38
Додаток А. Код програми 38
a:='0';
b:='0';
exit;
end;
min1:=false;
min2:=false;
if pos('-',a)=1 then
begin
min1:=true;
delete(a,1,1);
end;
if pos('-',b)=1 then
begin
min2:=true;
delete(b,1,1);
end;
min:=false;
if (min1=true)or(min2=true) then min:=true;
if (min1=true)and(min2=true)then min:=false;
a2:=a;
b2:=b;
a:='';
z:=0;
if min=true then a:='-';
ch1:=0;
while maxmin(a2,b2)=less do
begin
temp:='10';
multiply(a2,temp);
a:=a+'0';
z:=2;
end;
while (pos(',',a2)<>0)or(pos(',',b2)
begin
temp:='10';
multiply(a2,temp);
temp:='10';
multiply(b2,temp);
end;
b:=b2;
c:=0;
c2:='0';
min:=false;
min2:=false;
while ((length(a)-z+1<zn)and(z<>0))
begin
min1:=false;
while maxmin(c2,b2)=less do
begin
if (min2=true)and(min1=true)then
a:=a+'0';
ch1:=ch1+1;
if ch1>length(a2) then min:=true;
if min=true then
begin
a2:=a2+'0';
if z=0 then z:=length(a)+1;
end;
c2:=c2+a2[ch1];
min1:=true;
end;
min2:=true;
while (maxmin(c2,b2)=more)or(maxmin(
begin
substract(c2,b2);
b2:=b;
c:=c+1;
end;
a:=a+inttostr(c);
if (c2='')or(c2='0') then break;
c:=0;
end;
if z<>0 then insert(',',a,z);
b:='0';
delnull(a);
delnull(b);
end;
procedure unie(str:string; n:word);
var ch1,ch2:string;
l,z:word;
min:boolean;
begin
ch1:='';
ch2:='';
z:=0;
if str[n+1]='-' then str[n+1]:='~';
for l:=n-1 downto 1 do
begin
if ((str[l]<'0')or(str[l]>'9'))
if str[l]='~' then ch1:='-'+ch1
else ch1:=str[l]+ch1;
end;
min:=false;
if ch1[1]='-' then
begin
min:=true;
delete(ch1,1,1);
end;
for l:=n+1 to length(str) do
begin
if ((str[l]<'0')or(str[l]>'9'))
if str[l]='~' then ch2:=ch2+'-'
else ch2:=ch2+str[l];
end;
if abs(strtofloat(ch2))>30 then
begin
otv.resh:='0';
exit;
end;
if pos(',',ch1)<>0 then
begin
z:=length(ch1)-pos(',',ch1);
delete(ch1,pos(',',ch1),1);
end;
otv.resh:=ch1;
if ch2[1]<>'-' then
begin
for l:=1 to strtoint(ch2) do
begin
z:=z+1;
otv.resh:=otv.resh+'0';
end;
if (z<>0)and(z<>length(otv.resh)) then insert(',',otv.resh,z);
end;
if ch2[1]='-' then
begin
delete(ch2,1,1);
for l:=1 to strtoint(ch2) do
otv.resh:='0'+otv.resh;
insert(',',otv.resh,2);
end;
delnull(otv.resh);
if min=true then otv.resh:='~'+otv.resh;
end;
procedure uni(str:string; n:word; deystv:string);
var ch1,ch2:string;
l:word;
begin
ch1:='';
ch2:='';
for l:=n-1 downto 1 do
begin
if ((str[l]<'0')or(str[l]>'9'))
if str[l]='~' then ch1:='-'+ch1
else ch1:=str[l]+ch1;
end;
otv.startstr:=n-length(ch1);
for l:=n+1 to length(str) do
begin
if ((str[l]<'0')or(str[l]>'9'))
if str[l]='~' then ch2:=ch2+'-'
else ch2:=ch2+str[l];
end;
otv.endstr:=n+length(ch2);
if deystv='step' then otv.resh:=floattostr(power(
if deystv='umn' then otv.resh:=floattostr(
if (deystv='del')or(deystv='drob'
if deystv='sum' then otv.resh:=floattostr(
if deystv='min' then otv.resh:=floattostr(
if otv.resh[1]='-' then otv.resh[1]:='~';
if pos('E',otv.resh)<>0
then unie(otv.resh,pos('E',otv.
end;
procedure unitrig(str:string; n:word; deystv:string);
var l:word;
ch:string;
begin
otv.startstr:=n;
for l:=n+1+length(deystv) to length(str) do
begin
if ((str[l]<'0')or(str[l]>'9'))
if str[l]='~' then ch:=ch+'-'
else ch:=ch+str[l];
end;
otv.endstr:=n+length(ch)+
if deystv='cos' then otv.resh:=floattostr(cos(
if deystv='sin' then otv.resh:=floattostr(sin(
if deystv='tan' then otv.resh:=floattostr(sin(
if deystv='ctg' then otv.resh:=floattostr(cos(
if deystv='log' then otv.resh:=floattostr(log10(
if deystv='sinh' then otv.resh:=floattostr(sinh(
if deystv='cosh' then otv.resh:=floattostr(cosh(
if otv.resh[1]='-' then otv.resh[1]:='~';
if pos('E',otv.resh)<>0
then unie(otv.resh,pos('E',otv.
end;
function erranalise(str:string):string;
var n:word;
sk:integer;
label a,b;
begin
sk:=0;
for n:=1 to length(str) do
begin
if str[n]='(' then sk:=sk+1;
if str[n]=')' then sk:=sk-1;
end;
if sk<>0 then
begin
erranalise:='0';
exit;
end;
a:;
for n:=1 to length(str)-3 do
if (((str[n]>='0')and(str[n]<='9'
(copy(str,n+1,3)='cos')or(
(copy(str,n+1,3)='ctg')or(
begin
insert('*',str,n+1);
goto a;
end;
b:;
for n:=1 to length(str)-1 do
begin
if ((str[n]<'0')or(str[n]>'9'))
begin
insert('0',str,n+1);
goto b;
end;
if (((str[n]>='0')and(str[n]<='9'
(str[n+1]>='a')and(str[n+1]<='
begin
insert('&',str,n+1);
goto b;
end;
if ((str[n]='*')or(str[n]='&')or(
str[n+1]:='~';
end;
erranalise:=str;
end;
function analise(str:string):string;
var str2:string;
n,m,opsk,clsk:word;
label a,b,c;
begin
str:='('+str+')';
str:=erranalise(str);
str2:='';
repeat
a:otv.resh:='';
for n:=1 to length(str) do
if ((str[n]<'0')or(str[n]>'9'))
if otv.resh<>'norm' then goto b;
str2:=str;
opsk:=0;
clsk:=0;
for n:=1 to length(str) do
begin
if str[n]='(' then opsk:=n;
if str[n]=')' then
begin
clsk:=n;
str2:=copy(str,opsk,clsk-opsk+
break;
end;
end;
otv.resh:='';
for n:=1 to length(str2) do
if ((str2[n]<'0')or(str2[n]>'9'))
otv.resh:='norm';
if otv.resh<>'norm' then
begin
delete(str,opsk,clsk-opsk+1);
insert(copy(str2,2,length(
goto a;
end;
for m:=1 to 5 do
begin
c:;
for n:=1 to length(str2)-4 do
if m=3 then
begin
if copy(str2,n,4)='cos ' then
begin
unitrig(str2,n,'cos');
delete(str2,otv.startstr,otv.
insert(otv.resh,str2,otv.
goto c;
end;
if copy(str2,n,4)='sin ' then
begin
unitrig(str2,n,'sin');
delete(str2,otv.startstr,otv.
Информация о работе Кускова інтерполяція функцій кубічними многочленами Бесселя