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

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

if (high(a)-low(a))=(high(b)-low(b)) then

   begin

   if (low(a)>low(b))or(low(a)=low(b)) then

      begin

      c:=low(a)-low(b);

      for ch1:=low(a) to high(a) do

         begin

         q:=a[ch1];

         a[ch1]:=b[ch1-c];

         b[ch1-c]:=q;

         end;

      end;

   if low(a)<low(b) then

      begin

      c:=low(b)-low(a);

      for ch1:=low(a) to high(a) do

        begin

         q:=a[ch1-c];

         a[ch1-c]:=b[ch1];

         b[ch1]:=q;

         end;

      end;

   end;

end;

procedure delnull(var a:string);

var min1:boolean;

begin

min1:=false;

if pos('-',a)=1 then

   begin

   min1:=true;

   delete(a,1,1);

   end;

if a='' then

   begin

   a:='0';

   exit;

   end;

while a[1]='0' do

   begin

   delete(a,1,1);

   if a='' then

      begin

      a:='0';

      break;

      end;

   end;

if pos(',',a)<>0 then

   while a[length(a)]='0' do

      delete(a,length(a),1);

if a[length(a)]=',' then delete(a,length(a),1);

if a='' then a:='0';

if a[1]=',' then a:='0'+a;

if (min1=true)and(a<>'0') then a:='-'+a;

end;

procedure multiply(var a,b:string);

var ch1,ch2,z,la,lb:cardinal;

   min1,min2,min:boolean;

   a1,b1,c:array of byte;

begin

delnull(a);

delnull(b);

min1:=false;

min2:=false;

z:=0;

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;

if pos(',',a)<>0 then

   begin

   z:=length(a)-pos(',',a);

   delete(a,pos(',',a),1);

   end;

if pos(',',b)<>0 then

   begin

   z:=abs(z+length(b)-pos(',',b));

   delete(b,pos(',',b),1);

   end;

la:=length(a);

lb:=length(b);

setlength(a1,la);

setlength(b1,lb);

setlength(c,la+lb);

for ch1:=0 to la-1 do

   a1[ch1]:=strtoint(a[ch1+1]);

for ch1:=0 to lb-1 do

   b1[ch1]:=strtoint(b[ch1+1]);

for ch1:=0 to la+lb do

   c[ch1]:=0;

for ch1:=la-1 downto 0 do

      for ch2:=lb-1 downto 0 do

    begin

      c[ch1+ch2+1]:=c[ch1+ch2+1]+a1[ch1]*b1[ch2];

      if c[ch1+ch2+1]>9 then

       begin

         c[ch1+ch2]:=c[ch1+ch2]+c[ch1+ch2+1]div 10;

         c[ch1+ch2+1]:=c[ch1+ch2+1]-(c[ch1+ch2+1]div 10)*10;

         end;

      end;

a:='';

b:='0';

if min=true then a:='-';

for ch1:=0 to la+lb-1 do

   a:=a+inttostr(c[ch1]);

if z<>0 then insert(',',a,abs(length(a)-z+1));

delnull(a);

delnull(b);

finalize(a1);

finalize(b1);

finalize(c);

end;

procedure addition(var a,b:string);

var ch1,z,z2,la:cardinal;

   min1,min2:boolean;

   a1,b1,c:array of byte;

begin

delnull(a);

delnull(b);

min1:=false;

min2:=false;

z:=0;

z2:=0;

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;

if pos(',',a)<>0 then

   begin

   z:=length(a)-pos(',',a);

   delete(a,pos(',',a),1);

   end;

if pos(',',b)<>0 then

   begin

   z2:=length(b)-pos(',',b);

   delete(b,pos(',',b),1);

   end;

if z>z2 then

   for ch1:=1 to z-z2 do

      b:=b+'0';

if z<z2 then

   begin

   for ch1:=1 to z2-z do

      a:=a+'0';

   z:=z2;

   end;

if length(a)>length(b) then

   for ch1:=1 to length(a)-length(b) do

      b:='0'+b;

if length(a)<length(b) then

   for ch1:=1 to length(b)-length(a) do

      a:='0'+a;

la:=length(a);

setlength(a1,la);

setlength(b1,la);

setlength(c,la+1);

for ch1:=0 to la-1 do

   begin

   a1[ch1]:=strtoint(a[ch1+1]);

   b1[ch1]:=strtoint(b[ch1+1]);

   c[ch1]:=0;

   end;

c[la]:=0;

if (min1=true)and(min2=false) then

   begin

   swapstr(a,b);

   substract(a,b);

   exit;

   end;

if (min1=false)and(min2=true) then

   begin

   substract(a,b);

   exit;

   end;

if (min1=true)and(min2=true) then

   begin

   a:='-'+a;

   substract(a,b);

   exit;

   end;

for ch1:=la-1 downto 0 do

   begin

   c[ch1+1]:=c[ch1+1]+a1[ch1]+b1[ch1];

   if c[ch1+1]>9 then

      begin

      c[ch1]:=c[ch1+1]div 10;

      c[ch1+1]:=c[ch1+1]-10;

      end;

   end;

a:='';

b:='0';

if min1=true then a:='-';

for ch1:=0 to la do

   a:=a+inttostr(c[ch1]);

if z<>0 then insert(',',a,abs(length(a)-z+1));

delnull(a);

delnull(b);

finalize(a1);

finalize(b1);

finalize(c);

end;

procedure substract(var a,b:string);

var ch1,z,z2,la:cardinal;

   min1,min2:boolean;

   a1,b1,c:array of shortint;

   max:func;

begin

delnull(a);

delnull(b);

min1:=false;

min2:=false;

z:=0;

z2:=0;

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;

if pos(',',a)<>0 then

   begin

   z:=length(a)-pos(',',a);

   delete(a,pos(',',a),1);

   end;

if pos(',',b)<>0 then

   begin

   z2:=length(b)-pos(',',b);

   delete(b,pos(',',b),1);

   end;

if z>z2 then

   for ch1:=1 to z-z2 do

      b:=b+'0';

if z<z2 then

   begin

   for ch1:=1 to z2-z do

      a:=a+'0';

   z:=z2;

   end;

if length(a)>length(b) then

   for ch1:=1 to length(a)-length(b) do

      b:='0'+b;

if length(a)<length(b) then

   for ch1:=1 to length(b)-length(a) do

      a:='0'+a;

la:=length(a);

setlength(a1,la);

setlength(b1,la);

setlength(c,la+1);

for ch1:=0 to la-1 do

   begin

   a1[ch1]:=strtoint(a[ch1+1]);

   b1[ch1]:=strtoint(b[ch1+1]);

   c[ch1]:=0;

   end;

c[la]:=0;

if (min1=true)and(min2=false) then

   begin

   addition(a,b);

   a:='-'+a;

   exit;

   end;

if (min1=true)and(min2=true) then

   begin

   swapstr(a,b);

   substract(a,b);

   exit;

   end;

if (min1=false)and(min2=true) then

   begin

   addition(a,b);

   exit;

   end;

max:=maxmin(a,b);

if max=less then swaparr(a1,b1);

for ch1:=la-1 downto 0 do

   begin

   c[ch1+1]:=c[ch1+1]+a1[ch1]-b1[ch1];

   if c[ch1+1]<0 then

      begin

      c[ch1]:=c[ch1]-1;

      c[ch1+1]:=c[ch1+1]+10;

      end;

   end;

a:='';

b:='0';

if max=less then a:='-';

for ch1:=0 to la do

   a:=a+inttostr(c[ch1]);

if z<>0 then insert(',',a,abs(length(a)-z+1));

delnull(a);

delnull(b);

finalize(a1);

finalize(b1);

finalize(c);

end;

procedure division(zn:cardinal; var a,b:string);

var ch1:cardinal;

   z:longint;

   min1,min2,min:boolean;

   c:shortint;

   a2,b2,c2:string;

   temp:string;

label m1;

begin

delnull(a);

delnull(b);

if (a='0')or(b='0') then

   begin

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

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

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