24.02.2018, 20:58 | #1 (permalink) |
Member
Регистрация: 14.12.2017
Сообщений: 18
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Итерационные циклы for … to … do ЯП- Pascal
Задача: |
24.02.2018, 20:58 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Возможно вы моментально найдете решение своей задачи ознакомившись с этими ссылками Pascal, циклы Pascal, циклы, управляемые условиями Pascal, циклы, управляемые условиями Итерационные формулы |
24.02.2018, 21:16 | #3 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
И вообще, эта задача уже была у нас:
Нужно вычислить площадь фигуры. Delphi7 |
24.02.2018, 21:39 | #4 (permalink) |
Member
Регистрация: 14.12.2017
Сообщений: 18
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Получается что в моем случае программа будет выглядеть примерно так?
Код:
uses SysUtils; const x0=0; xk=2*3.14; eps=1E-7; var n,i:integer; s,x,h,s1,x1,delta:real; function f(y:real):real; begin f:=cos(x); end; function Antider(y:real):real; begin Antider:=-y*y*y+y*y*15/2-y*18; end; Begin n:=2; s:=(f(x0)+f((x0+xk)/2))*(xk-x0)/4+(f((x0+xk)/2)+f(xk))*(xk-x0)/4; delta:=1; While delta>eps do begin s1:=s; n:=n+2; h:=(xk-x0)/n; x:=x0; s:=0; for i:=1 to n do begin x1:=x+h; s:=f(x)+f(x1)+s; x:=x1; end; s:=s*h/2; delta:=abs(s-s1); end; writeln('Trapezium:'); writeln('s = ',s:0:10); writeln('s1= ',s1:0:10); writeln('n= ',n); writeln; n:=2; s:=(f(x0)+f((x0+xk)/2)*4+f(xk))*(xk-x0)/6; delta:=1; While delta>eps do begin s1:=s; n:=n+2; h:=(xk-x0)/n; x:=x0; s:=0; for i:=1 to (n div 2) do begin x1:=x+h*2; s:=f(x)+f(x+h)*4+f(x1)+s; x:=x1; end; s:=s*h/3; delta:=abs(s-s1); end; writeln('Simpson:'); writeln('s = ',s:0:10); writeln('s1= ',s1:0:10); writeln('n= ',n); writeln; Write('Accurate value: '); Writeln((Antider(xk)-Antider(x0)):0:10); Readln End. |
24.02.2018, 22:00 | #5 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Не совсем. Надо всё-таки хоть немного вникнуть, а не тупо передирать. Функция Antider (сокр. от Antideriviative) — это первообразная. А потому в Вашем случае это будет так:
Код:
function Antider(y:real):Real; begin Antider:=sin(y); end; P.S. Мне кажется, функция Cos выбрана неудачно: лучше бы что-нибудь положительное во всём интервале. Или, если уж Вы непременно хотите косинус, то интервал лучше выбрать от -π/2 до +π/2. Тогда в результате должно получиться 2. P.P.S. Величину π в явном виде задавать не надо, есть стандартная константа Pi. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
24.02.2018, 22:20 | #6 (permalink) |
Member
Регистрация: 14.12.2017
Сообщений: 18
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Да вы правы именно 2 и получается при y=cosx в отрезке от -π/2 до +π/2.
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|