
- •Содержание
- •Http://vk.Com/pomoshtulgu - создатели этой работы. Отчеты и курсовые на заказ, недорого. Введение
- •Задача расчета неопределенного интеграла
- •1.1 Содержательное описание задачи
- •1.3 Обсуждение задачи
- •Выбор и обоснование численного метода решения задачи
- •Методы нахождения интеграла
- •Математическая формулировка задачи
- •Разработка алгоритма
- •Разработка структур данных
- •Разработка структуры алгоритма
- •Текст программы
- •Описание переменных и структур данных
- •Описание функций
- •Текст программы на языке программирования Borland Pascal 7.0
Разработка структуры алгоритма
Для осуществления поставленной задачи требуется разработать структуру, позволяющую пользователю ввести данные в виде символьного выражения, осуществить проверку ввода на корректность, затем разбить выражение на интегралы и циклично передать эти выражения в подпрограмму-анализатор. В данной подпрограмме будет создана система условий, позволяющая проверить введенный интеграл на совместимость с различными методами подстановки под знак дифференциала, и, выбрав наиболее подходящий, считать различные коэффициенты. Посчитав и преобразовав коэффициенты, мы можем сформировать окончательное выражение и вывести его на дисплей. Стоит заметить, что по мере выполнения задачи следует помнить о первоначальном знаке у выражения, сохранять его и учитывать при расчётах. Преобразование коэффициентов может быть реализовано выборкой их из первоначального выражения в подстроку поэлементно циклом и последующим переводом в целочисленный
Схема алгоритма
Начало
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))