Кускова інтерполяція функцій кубічними многочленами Бесселя

Автор работы: Пользователь скрыл имя, 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

Содержимое работы - 2 файла

Головна_Курсова_Фугело.doc

— 697.00 Кб (Скачать файл)

   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)<>0) do

   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))or(z=0) do

   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(c2,b2)=same) do

      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'))and(str[l]<>',')and(str[l]<>'~') then break;

   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'))and(str[l]<>'~') then break;

   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'))and(str[l]<>',')and(str[l]<>'~') then break;

   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'))and(str[l]<>',')and(str[l]<>'~') then break;

   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(strtofloat(ch1),strtofloat(ch2)));

if deystv='umn' then otv.resh:=floattostr(strtofloat(ch1)*strtofloat(ch2));

if (deystv='del')or(deystv='drob') then otv.resh:=floattostr(strtofloat(ch1)/strtofloat(ch2));

if deystv='sum' then otv.resh:=floattostr(strtofloat(ch1)+strtofloat(ch2));

if deystv='min' then otv.resh:=floattostr(strtofloat(ch1)-strtofloat(ch2));

if otv.resh[1]='-' then otv.resh[1]:='~';

if pos('E',otv.resh)<>0 then unie(otv.resh,pos('E',otv.resh));

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'))and(str[l]<>',')and(str[l]<>'~') then break;

   if str[l]='~' then ch:=ch+'-'

      else ch:=ch+str[l];

   end;

otv.endstr:=n+length(ch)+length(deystv);

if deystv='cos' then otv.resh:=floattostr(cos(strtofloat(ch)));

if deystv='sin' then otv.resh:=floattostr(sin(strtofloat(ch)));

if deystv='tan' then otv.resh:=floattostr(sin(strtofloat(ch))/cos(strtofloat(ch)));

if deystv='ctg' then otv.resh:=floattostr(cos(strtofloat(ch))/sin(strtofloat(ch)));

if deystv='log' then otv.resh:=floattostr(log10(strtofloat(ch)));

if deystv='sinh' then otv.resh:=floattostr(sinh(strtofloat(ch)));

if deystv='cosh' then otv.resh:=floattostr(cosh(strtofloat(ch)));

if otv.resh[1]='-' then otv.resh[1]:='~';

if pos('E',otv.resh)<>0 then unie(otv.resh,pos('E',otv.resh));

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'))or(str[n]=')'))and((copy(str,n+1,3)='sin')or

      (copy(str,n+1,3)='cos')or(copy(str,n+1,3)='tan')or

      (copy(str,n+1,3)='ctg')or(copy(str,n+1,3)='log')) then

      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'))and(str[n+1]=',') then

      begin

      insert('0',str,n+1);

      goto b;

      end;

   if (((str[n]>='0')and(str[n]<='9'))or(str[n]=')'))and((str[n+1]='(')or

      (str[n+1]>='a')and(str[n+1]<='z')) then

      begin

      insert('&',str,n+1);

      goto b;

      end;

   if ((str[n]='*')or(str[n]='&')or(str[n]=' ')or(str[n]='/')or(str[n]='+')or(str[n]='-')or(str[n]='('))and(str[n+1]='-') then

      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'))and(str[n]<>',')and(str[n]<>'(')and(str[n]<>')')and(str[n]<>'~') then otv.resh:='norm';

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+1);

      break;

      end;

   end;

otv.resh:='';

for n:=1 to length(str2) do

   if ((str2[n]<'0')or(str2[n]>'9'))and(str2[n]<>',')and(str2[n]<>'(')and(str2[n]<>')')and(str2[n]<>'~') then

      otv.resh:='norm';

if otv.resh<>'norm' then

   begin

   delete(str,opsk,clsk-opsk+1);

   insert(copy(str2,2,length(str2)-2),str,opsk);

   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.endstr-otv.startstr+1);

            insert(otv.resh,str2,otv.startstr);

            goto c;

            end;

         if copy(str2,n,4)='sin ' then

            begin

            unitrig(str2,n,'sin');

            delete(str2,otv.startstr,otv.endstr-otv.startstr+1);

ТИТУЛЬНА_Курсова_Фугело.doc

— 80.50 Кб (Открыть файл, Скачать файл)

Информация о работе Кускова інтерполяція функцій кубічними многочленами Бесселя