Исправить ошибку в цикле - Pascal

Узнай цену своей работы

Формулировка задачи:

Листинг программы
  1. Program Lab13;
  2. label 20;
  3. label 10;
  4. Var
  5. x,y,x1,y1,a,a0,e,g,dx,dy,grad,f0,f1:real;
  6. i,j,n:integer;
  7. Function f(x,y:real):real;
  8. begin
  9. f:=6*x-0.9*y+exp(0.36*x*x+0.16*y*y);
  10. End;
  11. begin
  12. x:=1;
  13. y:=1;
  14. i:=1;
  15. j:=0;
  16. a:=0.1;
  17. a0:=a;
  18. e:=0.1;
  19. n:=20;
  20. g:=0.0001;
  21. Writeln(' N a x y df/dx df/dy grad f(x,y) f(x,y)');
  22. dx:=(f(x+g,y)-f(x,y))/g;
  23. dy:=(f(x,y+g)-f(x,y)/g);
  24. grad:=dx*dx+dy*dy;
  25. grad:=sqrt(grad);
  26. while e<=grad do
  27. begin
  28. f0:=f(x,y);
  29. 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);
  30. x1:=x;
  31. y1:=y;
  32. x:=x-dx*a;
  33. y:=y=dx*a;
  34. f1:=f(x,y);
  35. while f0>f1 do
  36. begin
  37. j:=j+1:
  38. f:=f1;
  39. x1:=x;
  40. y1:=y;
  41. x:=x-dx*a*j;
  42. y:=y=dy*a*j:
  43. f1:=f(x,y);
  44. end;
  45. x:=x1;
  46. y:=y1;
  47. inc(i);
  48. if i<n then
  49. begin a:=a*(j-1);
  50. if a<o tjem
  51. begom a:=a0/10;
  52. a0:=a;
  53. end;
  54. goto 10;
  55. end;
  56. if i=n then
  57. goto 20;
  58. end;
  59. end;
  60. 20:
  61. 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);
  62. end.

Решение задачи: «Исправить ошибку в цикле»

textual
Листинг программы
  1. Function f(x,y:real):real;
  2. begin
  3.   f:=6*x-0.9*y+exp(0.36*x*x+0.16*y*y);
  4. End;
  5.  
  6. Var
  7.   x,y,x1,y1,a,a0,e,g,dx,dy,grad,f0,f1:real;
  8.   i,j,n:integer;
  9.  
  10. begin
  11.   x:=1;
  12.   y:=1;
  13.   i:=1;
  14.   j:=0;
  15.   a:=0.1;
  16.   a0:=a;
  17.   e:=0.1;
  18.   n:=20;
  19.   g:=0.0001;
  20.   Writeln(' N      a       x    y    df/dx   df/dy    grad f(x,y)        f(x,y)');
  21.   dx:=(f(x+g,y)-f(x,y))/g;
  22.   dy:=(f(x,y+g)-f(x,y)/g);
  23.   grad:=dx*dx+dy*dy;
  24.   grad:=sqrt(grad);
  25.   while (e<=grad) and (i<>n) do
  26.     begin
  27.       f0:=f(x,y);
  28.       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);
  29.       x1:=x;
  30.       y1:=y;
  31.       x:=x-dx*a;
  32.       y:=y-dx*a;
  33.       f1:=f(x,y);
  34.       while f0>f1 do
  35.         begin
  36.           j:=j+1;
  37.           f0:=f1;
  38.           x1:=x;
  39.           y1:=y;
  40.           x:=x-dx*a*j;
  41.           y:=y-dy*a*j;
  42.           f1:=f(x,y);
  43.         end;
  44.       x:=x1;
  45.       y:=y1;
  46.       inc(i);
  47.       if i<n then
  48.         begin
  49.           a:=a*(j-1);
  50.           if a<0 then
  51.             begin
  52.               a:=a0/10;
  53.               a0:=a;
  54.             end;
  55.         end;
  56.     end;
  57.   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);
  58. end.

Объяснение кода листинга программы

  1. Создаётся функция f с параметрами x и y, которая возвращает значение типа real.
  2. Задаются переменные:
    • x, y, x1, y1, a, a0, e, g, dx, dy, grad, f0, f1 типа real.
    • i, j, n типа integer.
  3. Присваиваются начальные значения переменным: x := 1, y := 1, i := 1, j := 0, a := 0.1, a0 := a, e := 0.1, n := 20, g := 0.0001.
  4. Выводится заголовок таблицы.
  5. Вычисляются значения dx и dy.
  6. Вычисляется значение градиента grad и его корень.
  7. Запускается цикл while, в котором происходит оптимизация функции. Каждая итерация цикла вычисляет новые значения переменных и выводит их значения, пока значения e и i удовлетворяют условию.
  8. Выводятся финальные значения переменных после цикла.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.231 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут