Исправить ошибку в цикле - 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
удовлетворяют условию. - Выводятся финальные значения переменных после цикла.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д