Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Решение неопред. интегралов. Delph.http://vk.co...docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.47 Mб
Скачать
    1. Разработка структуры алгоритма

Для осуществления поставленной задачи требуется разработать структуру, позволяющую пользователю ввести данные в виде символьного выражения, осуществить проверку ввода на корректность, затем разбить выражение на интегралы и циклично передать эти выражения в подпрограмму-анализатор. В данной подпрограмме будет создана система условий, позволяющая проверить введенный интеграл на совместимость с различными методами подстановки под знак дифференциала, и, выбрав наиболее подходящий, считать различные коэффициенты. Посчитав и преобразовав коэффициенты, мы можем сформировать окончательное выражение и вывести его на дисплей. Стоит заметить, что по мере выполнения задачи следует помнить о первоначальном знаке у выражения, сохранять его и учитывать при расчётах. Преобразование коэффициентов может быть реализовано выборкой их из первоначального выражения в подстроку поэлементно циклом и последующим переводом в целочисленный

    1. Схема алгоритма

Ниже приведена схема алгоритма вычисления значения неопределенного интеграла методом подведения под знак дифференциала. (рис. 1-12).

Начало

1

flag:=false;

end_of_action:=false;

f:=0;z:=0;j:=0;

x0:=AnsiPos(‘x’,arr);

mark:=arr[1];

x0=0

да

нет

да

нет

flag:=false;

end_of_action:=false;

f:=0;

z:=0;

j:=0;

x0:=AnsiPos('x',arr);

mark:=arr[1];

((x0<>0)and(AnsiPos('^',arr)=0)and(AnsiPos('/',arr)=0)and(AnsiPos('sin',arr)=0)and(AnsiPos('cos',arr)=0))

Find_numb(arr,2,’x’,numbX);

Str((numbX/2):3:3, substr)

Arr:= mark+ substr+’x^(2)’;

x1:=AnsiPos(‘x^(‘, arr);

Рисунок 1 – Схема алгоритма решения интеграла типа ‘xdx’

x2:=AnsiPos('/(',arr);

((x1>0) and (AnsiPos('/',arr)=0) and(flag=false))

find_numb(arr,x1+3,')',numb);

find_numb(arr,1,'x',numbX);

str((numbX/(numb+1)):3:3,substr); str((numb+1):3:3,substr2); arr:=mark+substr+'x^('+substr2+')';

flag:=true;

((x2>0)and(AnsiPos('^',arr)=0)and(arr[x2-1]<>'x')and(flag=false))

нет

нет

да

((AnsiPos(‘x’,arr)>0))

нет

(Pos('x/(',arr)>0)and(flag=false))

да

flag:=true;

j:=1; z:=AnsiPos('(',arr);

((Pos('x',arr)>0)and(arr[x2+1]<>'^'))

да

нет

find_express(arr,z,')',substr);

да

Рисунок 2 – Схема алгоритма решения степенного интеграла

start:=Pos('+',arr)+Pos('-',arr)+1;

theend:=z;

start:=Pos('(',arr)+1;

theend:=z;

z:=AnsiPos('x',arr);

arr[1]:='1';

arr[1]:='0';

flag:=true; z:=Pos('x^',arr);

f:=Pos(')',arr);

j:=1;

(((arr[f+1])='+')or((arr[f+1])='-'))

check_substr(substr2,numbX);

start:=AnsiPos('(',arr)+1; theend:=AnsiPos('+',arr)+AnsiPos('-',arr);;

start:=AnsiPos('+',arr)+AnsiPos('-',arr)+1; theend:=AnsiPos(')',arr);

find_express(arr,start,arr[theend-2],substr2);

(((arr[z+1])='+')or((arr[z+1])='-'))

да

нет

да

нет

да

нет

да

(arr[f+1]=')')or(arr[f+1]='^')

(arr[z+1])=')'

нет

find_express(arr,start,arr[theend-1],substr3);

check_substr(substr3,numbX);

find_numb(arr,AnsiPos('^',arr)+2,'x',numb);

find_numb(arr,2,'x',firstnumb);

z:=AnsiPos('(',arr);length(arr);1

j:=1

substr4:=substr4+ arr[z];

inc(j);

str((1/numbX):3:6,substr2); arr:=mark+substr2+'Ln('+substr+')';

str(firstnumb/(numbX*numb):5:5,substr); arr:=mark+substr+'Ln('+substr4+')';

Рисунок 3 – Схема алгоритма решения интеграла типа “x/((x^(2)+C’)

x3:=AnsiPos('e^(',arr);

substr:=substr+arr[z];

z:=AnsiPos('e',arr);Length(arr);1

substr2:=substr2+ arr[j];

j:=2;AnsiPos('e',arr)-1;1

arr[2]<>'e'

нет

да

find_numb(arr,x3+3,'x',numbX);

check_substr(substr2,firstnumb);

j:=2;

substr[j-1]:='1';

substr[1]:=mark;

str(firstnumb/(numbX):5:5,substr);

arr:=mark+substr;

flag:=true;

Рисунок 4 – Схема алгоритма решения экспоненциального интеграла

Str((Power(numb,firstnumb)):5:5,substr2;

arr:=arr+’/ln(‘+substr2+’)’;

flag:=true;

find_numb(arr,2,'^',numb);

find_numb(arr,AnsiPos('(',arr)+1,'x',firstnumb);

x4:=Pos('^',arr)-1;

((Pos('^(',arr)>0)and(flag=false)and(Pos('x',arr)>0)and((ord(arr[x4])>=48)or(ord(arr[x4])<=57))and(AnsiPos('/',arr)=0)and(x1=0)and((AnsiPos('sin',arr)+AnsiPos('cos',arr))=0))

((AnsiPos('sin',arr)<>0)and(AnsiPos('x',arr)<>0)and(flag=false)and(AnsiPos('cos',arr)=0))and((AnsiPos('sin',arr)+AnsiPos('cos',arr))=0))

нет

нет

да

нет

да

find_numb(arr,2,'s',firstnumb);

find_numb(arr,AnsiPos('n',arr)+2,'x',numbX);

(AnsiPos('^',arr)<>0)

да

str((firstnumb/(numbX*4)):5:5,substr);

str((numbX*2):5:5,substr2);

mark='+'

нет

да

Else’

arr:='+'+substr+'('+substr2+'x)-sin('+substr2+'x)';

arr:='-'+substr+ '('+substr2+'x)-sin('+substr2+'x)'

Рисунок 5 – Схема алгоритма решения интеграла “a^(x)”

x6:=AnsiPos('cos',arr);

arr:=substr;

flag:=true;

substr:=substr+'*cos('+substr2+'x)';

substr:='-'+substr+'*cos('+substr2+'x)'

mark='+'

str(firstnumb/(numbX):5:5,substr);

str(numbX:5:5,substr2);

find_numb(arr,2,'s',firstnumb);

find_numb(arr,AnsiPos('n',arr)+2,'x',numbX);

нет

да

Рисунок 6 – Схема алгоритма решения интеграла типа “sin(x)^(n)*cos(x)”

((x6<>0)and(AnsiPos('x',arr)<>0)and(flag=false)and(AnsiPos('sin',arr)=0))and((AnsiPos('sin',arr)+AnsiPos('cos',arr))=0))

arr[z]='x'

нет

да

inc(f);

find_numb(arr,2,'c',firstnumb);

find_numb(arr,AnsiPos('s',arr)+2,'x',numbX);

find_numb(arr,2,'c',firstnumb);

find_numb(arr,AnsiPos('s',arr)+2,'x',numbX);

Find_numb(arr,2,’x’,numbX);

Find_numb(arr,x1+3,’)’, numbX);

(AnsiPos('^',arr)<>0)

нет

да

str((firstnumb/(numbX*4)):5:5,substr);

str((numbX*2):5:5,substr2); arr:= mark+ substr+ '('+substr2+'x)+ sin('+substr2+'x)'; flag:=true;

str(firstnumb/(numbX):5:5,substr); str(numbX:5:5,substr2);

arr:=mark+substr+'*sin('+substr2+'x)'; flag:=true;

((AnsiPos('sin',arr)<>0)and(AnsiPos('cos',arr)<>0)and(AnsiPos('x',arr)<>0)and(AnsiPos('^',arr)<>0)and(flag=false))

нет

да

да

z:=1;length (arr);1

нет

Рисунок 7 – Схема алгоритма решения интеграла типа cos(x) и cos(x)^(2)

f=2

нет

да

x:=AnsiPos('^',arr); z:=AnsiPos('o',arr)+3;

f:=AnsiPos('n',arr)+2;

arr[x]<>'('

нет

нет

find_numb(arr,AnsiPos('^',arr)+2,')',numb);

find_numb(arr,AnsiPos('n',arr)+2,'x',numbX);

dec(x);

да

((arr[x-1]='n')and(arr[z]=arr[f]))

да

Рисунок 7 – Схема чтения алгоритма интеграла типа sin(x)^(x)*cos(x)

AnsiPos('s',arr)<AnsiPos('c',arr)

нет

да

subnumb:=firstnumb;

((arr[x-1]='n')and(arr[z]=arr[f]))

нет

да

find_numb(arr,2,'c',firstnumb);

find_numb(arr,2,'s',firstnumb)

find_numb(arr,AnsiPos('*',arr)+1,'c',firstnumb)

find_numb(arr,AnsiPos('*',arr)+1,'s',firstnumb);

firstnumb:=firstnumb*subnumb;

numb:=numb+1;str(firstnumb/(numbX*numb):5:5, substr3);str(numb:5:5,substr); str(numbX:5:5,substr2);

arr:=mark+substr3+'sin('+substr2+'x)^('+substr+')'; flag:=true;

find_numb(arr,AnsiPos('o',arr)+3,'x',numbX);

Рисунок 8 – Схема алгоритма анализа интеграла табличного интеграла типа типа sin(x)^(x)*cos(x)

find_numb(arr,AnsiPos('^',arr)+2,')',numb);

нет

AnsiPos('s',arr)<AnsiPos('c',arr)

arr:='+'+substr3+'cos('+substr2+'x)^('+substr+')';

arr:='-'+substr3+'cos('+substr2+'x)^('+substr+')'

mark='+'

firstnumb:=firstnumb*subnumb;

numb:=numb+1;

subnumb:=firstnumb

flag:=true;

да

да

да

find_numb(arr,AnsiPos('*',arr)+1,'s',firstnumb);

find_numb(arr,AnsiPos('*',arr)+1,'c',firstnumb)

find_numb(arr,2,'c',firstnumb);

find_numb(arr,2,'s',firstnumb)

AnsiPos('s',arr)<AnsiPos('c',arr)

нет

нет

firstnumb:=firstnumb*subnumb;

numb:=numb+1; str(firstnumb/(numbX*numb):5:5,substr3);

str(numb:5:5,substr);

str(numbX:5:5,substr2);

Рисунок 9 – Схема алгоритма решения интеграла типа sin(x)^(x)*cos(x)

z:=AnsiPos('(',arr)+1;

flag_of_dustribution1:=false;

flag_of_dustribution2:=false;

find_numb(arr,2,'/',subnumb);

sign:=arr[1];

arr[1]:='0';

x7:=AnsiPos('/',arr);

z:=AnsiPos('^',arr) +2;

((x7<>0)and(AnsiPos('x^',arr)<>0)and(arr[z]='2')and(flag=false))

нет

да

Рисунок 10 – Схема алгоритма чтения табличных интеграла типа 1/(x^(2)+a^(2))

нет

(z<=length(arr))

((z<AnsiPos('+',arr))or(z<AnsiPos('-',arr)))

да

да

да

да

нет

нет

нет

flag_of_dustribution2<> true

flag_of_dustribution1<>true

flag=true

substr2:=substr2+ arr[z];

flag:=false;

flag_of_dustribution2:=true;

arr[z]='x'

нет

да

нет

да

((arr[z]='x')or(arr[z]=')'))

substr:=substr+arr[z];

flag:=true;

flag_of_dustribution1:=true;

inc(z);

z:=0;

нет

да

Рисунок 11 – Схема алгоритма анализа табличных интегралов 1/(x^(2)+a^(2))

str(firstnumb/(numbX*numb):5:5,substr3); str(numbX:5:5,substr2); str(numb:5:5,substr);

arr:=mark+'(2*'+substr3+')ln|('+substr2+'x+'+substr+')/('+substr2+'x-'+substr+')|';

arr:=mark+'('+substr3+')arctg('+substr2+'x/'+substr+')'

check_substr(substr2,numb);

check_substr(substr2,numbX);

check_substr(substr3,numbX);

check_substr(substr,numb);

val(substr2,numbX,pr);

val(substr,numb,pr);

firstnumb:=subnumb;

numbX:=abs(numbX);

numb:=abs(numb);

numbX:=sqrt(numbX);

numb:=sqrt(numb);

val(substr3,numbX, pr);

val(substr2,numb,pr); firstnumb:=subnumb;

firstnumb:=1;

firstnumb=0

firstnumb:=1;

firstnumb=0

arr:=mark+'('+substr+')arctg('+substr3+'x/'+substr2+')'

arr:=mark+'(2*'+substr+')ln|('+substr3+'x+'+substr2+')/('+substr3+'x-'+substr2+')|';

да

да

нет

нет

да

да

numbX:=abs(numbX); numb:=abs(numb);

numbX:=sqrt(numbX);

numb:=sqrt(numb);

str(firstnumb/(numbX*numb):3:3,substr);

str(numbX:3:3,substr3);

str(numb:3:3,substr2);

(AnsiPos('+',arr)<>0)

(AnsiPos('+',arr)<>0)

нет

нет

Конец

Рисунок 12 – Схема алгоритма решения табличных интегралов 1/(x^(2)+a^(2))