Необходимо сравнить результаты метода Гаусса с точкой пересечения прямых на графике - Turbo Pascal

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

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

Необходимо сравнить результаты метода Гаусса с точкой пересечения прямых на графике.
Необходимо как то объединить два кода. Метод Гаусса.
Листинг программы
  1. uses crt;
  2. const num=5;
  3. var a: array [1..num,1..num] of real;
  4. b, x: array [1..num] of real;
  5. n, i, j, k: integer;
  6. delenie: real;
  7. begin
  8. clrscr;
  9. writeln('Введите колич-во неизвестных величин:');
  10. readln(n);
  11. writeln;
  12. writeln('Вводите коэфф-ты матpицы A по стpокам нажимая ENTER:');
  13. for i:=1 to n do
  14. begin
  15. for j:=1 to n do
  16. read(a[i,j]);
  17. end;
  18. writeln;
  19. writeln('Введите вектоp В свободных членов:');
  20. for i:=1 to n do
  21. read (b[i]);
  22. writeln;
  23. writeln('Расширеная матрица:');
  24. for i:=1 to n do
  25. begin
  26. for j:=1 to n do
  27. write (a[i, j]:5:3,' ':2);
  28. write (b[i]:5:3,' ':2);
  29. writeln;
  30. end;
  31. for i:=1 to n-1 do
  32. begin
  33. for k:=i+1 to n do
  34. begin
  35. delenie:= a[k,i] / a[i,i];
  36. for j:=i+1 to n do
  37. a[k,j]:= a[k,j] - a[i,j] * delenie;
  38. b[k]:= b[k] - b[i] * delenie;
  39. end;
  40. end;
  41. for i:=n downto 1 do
  42. begin
  43. for j:= i+1 to n do
  44. b[i]:= b[i] - a[i,j] * x[j];
  45. x[i]:= b[i] / a[i,i];
  46. end;
  47. writeln;
  48. writeln('ОТВЕТ:');
  49. for i:=1 to n do
  50. writeln('X[',i:1,']=', x[i]:1:2);
  51. readkey;
  52. end.
График
Листинг программы
  1. uses graph;
  2. function F1(x:real):real;
  3. begin
  4. F1:=5+x
  5. end;
  6. function F2(x:real):real;
  7. begin
  8. F2:=-7-2*x
  9. end;
  10. var a,b,m:real;
  11. x,x1,y1:real;
  12. x0,y0,i:integer;
  13. s,s1:string;
  14. begin
  15. x0:=0;
  16. initgraph(x0,y0,'');
  17. a:=-16;
  18. b:=10;
  19. x0:=getmaxX div 2;
  20. y0:=getmaxY div 2;
  21. m:=(y0-40)/F1(b);
  22. line(x0-round(17*m),y0,x0+round(17*m),y0);{оси}
  23. line(x0,0,x0,getmaxY);
  24. for i:=1 to 16 do
  25. begin
  26. line(x0-3,y0-round(i*m),x0+3,y0-round(i*m));
  27. line(x0-3,y0+round(i*m),x0+3,y0+round(i*m));
  28. line(x0+round(i*m),y0-3,x0+round(i*m),y0+3);
  29. line(x0-round(i*m),y0-3,x0-round(i*m),y0+3);
  30. if i mod 2=0 then
  31. begin
  32. str(i,s);
  33. outtextXY(x0-25,y0-round(i*m),s);
  34. outtextXY(x0-30,y0+round(i*m),'-'+s);
  35. outtextXY(x0+round(i*m),y0+10,s);
  36. outtextXY(x0-round(i*m)-10,y0+10,'-'+s);
  37. end;
  38. end;
  39. outtextXY(x0+round(16*m),y0-20,'X');
  40. outtextXY(x0+5,10, 'Y');
  41. x:=a;
  42. setcolor(12);
  43. while x<=b do
  44. begin
  45. if x=a then moveto(x0+round(x*m),y0-round(F1(x)*m))
  46. else lineto(x0+round(x*m),y0-round(F1(x)*m));
  47. x:=x+0.1;
  48. end;
  49. x:=a;
  50. setcolor(10);
  51. while x<=b do
  52. begin
  53. if x=a then moveto(x0+round(x*m),y0-round(F2(x)*m))
  54. else lineto(x0+round(x*m),y0-round(F2(x)*m));
  55. if abs(F1(x)-F2(x))<0.01 then
  56. begin
  57. x1:=x;
  58. y1:=F1(x);
  59. end;
  60. x:=x+0.1;
  61. end;
  62. setcolor(14);
  63. setfillstyle(1,14);
  64. fillellipse(x0+round(x1*m),y0-round(y1*m),3,3);
  65. {название}
  66. setcolor(12);
  67. outtextXY(10,80,'y=5+x');
  68. setcolor(10);
  69. outtextXY(10,100,'y=-7-2x');
  70. setcolor(14);
  71. str(x1:0:1,s);
  72. str(y1:0:1,s1);
  73. outtextXY(10,120,'x='+s+' y='+s1);
  74. readln
  75. end.

Решение задачи: «Необходимо сравнить результаты метода Гаусса с точкой пересечения прямых на графике»

textual
Листинг программы
  1. uses crt,graph;
  2. const n=2;
  3. var a,a1:array [1..n,1..n] of real;
  4.     b,b1,x:array [1..n] of real;
  5. function f(a,b,c,x:real):real;
  6. begin
  7. f:=-a*x/b+c/b;
  8. end;
  9. var i, j, k,x0,y0: integer;
  10.     delenie,xn,xk,m,z,x1,y1:real;
  11.     s,s1:string;
  12. begin
  13. clrscr;
  14. a[1,1]:=1;a[1,2]:=-1;b[1]:=-5;
  15. a[2,1]:=-2;a[2,2]:=-1;b[2]:=7;
  16. a1:=a;
  17. b1:=b;
  18. writeln('Расширеная матрица:');
  19. for i:=1 to n do
  20.  begin
  21.   for j:=1 to n do
  22.   write (a[i,j]:6:2);
  23.   write (b[i]:6:2);
  24.   writeln;
  25.  end;
  26. for i:=1 to n-1 do
  27.  begin
  28.   for k:=i+1 to n do
  29.    begin
  30.     delenie:= a[k,i] / a[i,i];
  31.     for j:=i+1 to n do
  32.     a[k,j]:= a[k,j] - a[i,j] * delenie;
  33.     b[k]:= b[k] - b[i] * delenie;
  34.    end;
  35.  end;
  36. for i:=n downto 1 do
  37.  begin
  38.   for j:= i+1 to n do
  39.   b[i]:= b[i] - a[i,j] * x[j];
  40.   x[i]:= b[i] / a[i,i];
  41.  end;
  42. writeln('ОТВЕТ:');
  43. for i:=1 to n do
  44. writeln('X[',i:1,']=', x[i]:1:2);
  45. write('Нажмите любую клавишу для просиотра графика');
  46. readln;
  47. x0:=0;
  48. initgraph(x0,y0,'');{инициализация графического режима}
  49. xn:=-16;
  50. xk:=10;{интервал по Х}
  51. x0:=getmaxX div 2;{начало координат по Х}
  52. y0:=getmaxY div 2;{начало координат по Y}
  53. m:=(y0-40)/F(a1[1,1],a1[1,2],b1[1],xk);
  54. line(x0-round(17*m),y0,x0+round(17*m),y0);{оси}
  55. line(x0,0,x0,getmaxY);
  56. for i:=1 to 16 do{максимальное количество засечек в одну сторону}
  57.  begin
  58.   line(x0-3,y0-round(i*m),x0+3,y0-round(i*m));{засечки на оси У}
  59.   line(x0-3,y0+round(i*m),x0+3,y0+round(i*m));
  60.   line(x0+round(i*m),y0-3,x0+round(i*m),y0+3); {засечки на оси Х}
  61.   line(x0-round(i*m),y0-3,x0-round(i*m),y0+3);
  62.   if i mod 2=0 then
  63.    begin
  64.     {подпись оси У}
  65.     str(i,s);
  66.     outtextXY(x0-25,y0-round(i*m),s);{соответственно засечкам}
  67.     outtextXY(x0-30,y0+round(i*m),'-'+s);
  68.     {подпись оси Х}
  69.     outtextXY(x0+round(i*m),y0+10,s);
  70.     outtextXY(x0-round(i*m)-10,y0+10,'-'+s);
  71.    end;
  72.  end;
  73. {подписи концов осей}
  74. outtextXY(x0+round(16*m),y0-20,'X');
  75. outtextXY(x0+5,10, 'Y');
  76. {график}
  77. z:=xn;
  78. setcolor(12);
  79. while z<=xk do
  80.  begin
  81.   if z=xn then moveto(x0+round(z*m),y0-round(F(a1[1,1],a1[1,2],b1[1],z)*m))
  82.   else lineto(x0+round(z*m),y0-round(F(a1[1,1],a1[1,2],b1[1],z)*m));
  83.   z:=z+0.1;
  84.  end;
  85. z:=xn;
  86. setcolor(10);
  87. while z<=xk do
  88.  begin
  89.   if z=xn then moveto(x0+round(z*m),y0-round(F(a1[2,1],a1[2,2],b1[2],z)*m))
  90.   else lineto(x0+round(z*m),y0-round(F(a1[2,1],a1[2,2],b1[2],z)*m));
  91.   if abs(F(a1[1,1],a1[1,2],b1[1],z)-F(a1[2,1],a1[2,2],b1[2],z))<0.01 then
  92.    begin
  93.     x1:=z;
  94.     y1:=F(a1[2,1],a1[2,2],b1[2],z);
  95.    end;
  96.   z:=z+0.1;
  97.  end;
  98. setcolor(14);
  99. setfillstyle(1,14);
  100. fillellipse(x0+round(x1*m),y0-round(y1*m),3,3);
  101. {название}
  102. setcolor(12);
  103. outtextXY(10,80,'y=5+x');
  104. setcolor(10);
  105. outtextXY(10,100,'y=-7-2x');
  106. setcolor(14);
  107. str(x1:0:1,s);
  108. str(y1:0:1,s1);
  109. outtextXY(10,120,'x='+s+'  y='+s1);
  110. readln
  111. end.

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

Этот код написан на языке Turbo Pascal и предназначен для отображения результатов метода Гаусса на графике. Он использует библиотеку graph, чтобы создать график. В этом коде используются следующие переменные:

  • a, b, x: массивы, представляющие собой прямые, которые пересекаются в точке пересечения.
  • a1, b1, x1, x2: переменные, используемые для вычисления точки пересечения.
  • s, s1: строки, используемые для подписи осей и названия графика.
  • i, j, k, x0, y0: переменные, используемые для итерации по точкам пересечения.
  • n: число, представляющее собой размер массивов. Функция f используется для вычисления коэффициента перед переменной x в методе Гаусса. Код начинается с инициализации графического режима и определения начальных координат осей X и Y. Затем он выполняет итерацию по точкам пересечения, вычисляя координаты этих точек и подписывая оси и график. После выполнения всех итераций, код рисует точку пересечения на графике и подписывает ее. Затем он выводит название графика и координаты точки пересечения. Наконец, код завершается, ожидая ввода от пользователя.

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


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

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

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

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

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

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