Исправить ошибку в цикле - Pascal
Формулировка задачи:
Program Lab13; label 20; label 10; Var x,y,x1,y1,a,a0,e,g,dx,dy,grad,f0,f1:real; i,j,n:integer; Function f(x,y:real):real; begin f:=6*x-0.9*y+exp(0.36*x*x+0.16*y*y); End; begin x:=1; y:=1; i:=1; j:=0; a:=0.1; a0:=a; e:=0.1; n:=20; g:=0.0001; Writeln(' N a x y df/dx df/dy grad f(x,y) f(x,y)'); dx:=(f(x+g,y)-f(x,y))/g; dy:=(f(x,y+g)-f(x,y)/g); grad:=dx*dx+dy*dy; grad:=sqrt(grad); while e<=grad do begin f0:=f(x,y); writeln(i:3,' ',a:4:4,' ',x:4:4,' ',y:4:4,' ',dx:4:4,' ',dy:4:4,'grad:4:4',' ',f(x,y):4:4); x1:=x; y1:=y; x:=x-dx*a; y:=y=dx*a; f1:=f(x,y); while f0>f1 do begin j:=j+1: f:=f1; x1:=x; y1:=y; x:=x-dx*a*j; y:=y=dy*a*j: f1:=f(x,y); end; x:=x1; y:=y1; inc(i); if i<n then begin a:=a*(j-1); if a<o tjem begom a:=a0/10; a0:=a; end; goto 10; end; if i=n then goto 20; end; end; 20: Writeln(i:3,' ',a:4:4,' ',x:4:4,' ',y:4:4,' ',dx:4:4,' ',dy:4:4,' ',grad:4:4,' ',f(x.y):4;4); end.
Решение задачи: «Исправить ошибку в цикле»
textual
Листинг программы
Function f(x,y:real):real; begin f:=6*x-0.9*y+exp(0.36*x*x+0.16*y*y); End; Var x,y,x1,y1,a,a0,e,g,dx,dy,grad,f0,f1:real; i,j,n:integer; begin x:=1; y:=1; i:=1; j:=0; a:=0.1; a0:=a; e:=0.1; n:=20; g:=0.0001; Writeln(' N a x y df/dx df/dy grad f(x,y) f(x,y)'); dx:=(f(x+g,y)-f(x,y))/g; dy:=(f(x,y+g)-f(x,y)/g); grad:=dx*dx+dy*dy; grad:=sqrt(grad); while (e<=grad) and (i<>n) do begin f0:=f(x,y); writeln(i:3,' ',a:4:4,' ',x:4:4,' ',y:4:4,' ',dx:4:4,' ',dy:4:4,' ', grad:4:4,' ',f(x,y):4:4); x1:=x; y1:=y; x:=x-dx*a; y:=y-dx*a; f1:=f(x,y); while f0>f1 do begin j:=j+1; f0:=f1; x1:=x; y1:=y; x:=x-dx*a*j; y:=y-dy*a*j; f1:=f(x,y); end; x:=x1; y:=y1; inc(i); if i<n then begin a:=a*(j-1); if a<0 then begin a:=a0/10; a0:=a; end; end; end; Writeln(i:3,' ',a:4:4,' ',x:4:4,' ',y:4:4,' ',dx:4:4,' ',dy:4:4,' ',grad:4:4,' ',f(x,y):4:4); end.
Объяснение кода листинга программы
- Создаётся функция
f
с параметрамиx
иy
, которая возвращает значение типаreal
. - Задаются переменные:
x
,y
,x1
,y1
,a
,a0
,e
,g
,dx
,dy
,grad
,f0
,f1
типаreal
.i
,j
,n
типаinteger
.
- Присваиваются начальные значения переменным:
x := 1
,y := 1
,i := 1
,j := 0
,a := 0.1
,a0 := a
,e := 0.1
,n := 20
,g := 0.0001
. - Выводится заголовок таблицы.
- Вычисляются значения
dx
иdy
. - Вычисляется значение градиента
grad
и его корень. - Запускается цикл
while
, в котором происходит оптимизация функции. Каждая итерация цикла вычисляет новые значения переменных и выводит их значения, пока значенияe
иi
удовлетворяют условию. - Выводятся финальные значения переменных после цикла.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д