Необходимо сравнить результаты метода Гаусса с точкой пересечения прямых на графике - Turbo Pascal
Формулировка задачи:
Необходимо сравнить результаты метода Гаусса с точкой пересечения прямых на графике.
График
Необходимо как то объединить два кода.
Метод Гаусса.
Листинг программы
- uses crt;
- const num=5;
- var a: array [1..num,1..num] of real;
- b, x: array [1..num] of real;
- n, i, j, k: integer;
- delenie: real;
- begin
- clrscr;
- writeln('Введите колич-во неизвестных величин:');
- readln(n);
- writeln;
- writeln('Вводите коэфф-ты матpицы A по стpокам нажимая ENTER:');
- for i:=1 to n do
- begin
- for j:=1 to n do
- read(a[i,j]);
- end;
- writeln;
- writeln('Введите вектоp В свободных членов:');
- for i:=1 to n do
- read (b[i]);
- writeln;
- writeln('Расширеная матрица:');
- for i:=1 to n do
- begin
- for j:=1 to n do
- write (a[i, j]:5:3,' ':2);
- write (b[i]:5:3,' ':2);
- writeln;
- end;
- for i:=1 to n-1 do
- begin
- for k:=i+1 to n do
- begin
- delenie:= a[k,i] / a[i,i];
- for j:=i+1 to n do
- a[k,j]:= a[k,j] - a[i,j] * delenie;
- b[k]:= b[k] - b[i] * delenie;
- end;
- end;
- for i:=n downto 1 do
- begin
- for j:= i+1 to n do
- b[i]:= b[i] - a[i,j] * x[j];
- x[i]:= b[i] / a[i,i];
- end;
- writeln;
- writeln('ОТВЕТ:');
- for i:=1 to n do
- writeln('X[',i:1,']=', x[i]:1:2);
- readkey;
- end.
Листинг программы
- uses graph;
- function F1(x:real):real;
- begin
- F1:=5+x
- end;
- function F2(x:real):real;
- begin
- F2:=-7-2*x
- end;
- var a,b,m:real;
- x,x1,y1:real;
- x0,y0,i:integer;
- s,s1:string;
- begin
- x0:=0;
- initgraph(x0,y0,'');
- a:=-16;
- b:=10;
- x0:=getmaxX div 2;
- y0:=getmaxY div 2;
- m:=(y0-40)/F1(b);
- line(x0-round(17*m),y0,x0+round(17*m),y0);{оси}
- line(x0,0,x0,getmaxY);
- for i:=1 to 16 do
- begin
- line(x0-3,y0-round(i*m),x0+3,y0-round(i*m));
- line(x0-3,y0+round(i*m),x0+3,y0+round(i*m));
- line(x0+round(i*m),y0-3,x0+round(i*m),y0+3);
- line(x0-round(i*m),y0-3,x0-round(i*m),y0+3);
- if i mod 2=0 then
- begin
- str(i,s);
- outtextXY(x0-25,y0-round(i*m),s);
- outtextXY(x0-30,y0+round(i*m),'-'+s);
- outtextXY(x0+round(i*m),y0+10,s);
- outtextXY(x0-round(i*m)-10,y0+10,'-'+s);
- end;
- end;
- outtextXY(x0+round(16*m),y0-20,'X');
- outtextXY(x0+5,10, 'Y');
- x:=a;
- setcolor(12);
- while x<=b do
- begin
- if x=a then moveto(x0+round(x*m),y0-round(F1(x)*m))
- else lineto(x0+round(x*m),y0-round(F1(x)*m));
- x:=x+0.1;
- end;
- x:=a;
- setcolor(10);
- while x<=b do
- begin
- if x=a then moveto(x0+round(x*m),y0-round(F2(x)*m))
- else lineto(x0+round(x*m),y0-round(F2(x)*m));
- if abs(F1(x)-F2(x))<0.01 then
- begin
- x1:=x;
- y1:=F1(x);
- end;
- x:=x+0.1;
- end;
- setcolor(14);
- setfillstyle(1,14);
- fillellipse(x0+round(x1*m),y0-round(y1*m),3,3);
- {название}
- setcolor(12);
- outtextXY(10,80,'y=5+x');
- setcolor(10);
- outtextXY(10,100,'y=-7-2x');
- setcolor(14);
- str(x1:0:1,s);
- str(y1:0:1,s1);
- outtextXY(10,120,'x='+s+' y='+s1);
- readln
- end.
Решение задачи: «Необходимо сравнить результаты метода Гаусса с точкой пересечения прямых на графике»
textual
Листинг программы
- uses crt,graph;
- const n=2;
- var a,a1:array [1..n,1..n] of real;
- b,b1,x:array [1..n] of real;
- function f(a,b,c,x:real):real;
- begin
- f:=-a*x/b+c/b;
- end;
- var i, j, k,x0,y0: integer;
- delenie,xn,xk,m,z,x1,y1:real;
- s,s1:string;
- begin
- clrscr;
- a[1,1]:=1;a[1,2]:=-1;b[1]:=-5;
- a[2,1]:=-2;a[2,2]:=-1;b[2]:=7;
- a1:=a;
- b1:=b;
- writeln('Расширеная матрица:');
- for i:=1 to n do
- begin
- for j:=1 to n do
- write (a[i,j]:6:2);
- write (b[i]:6:2);
- writeln;
- end;
- for i:=1 to n-1 do
- begin
- for k:=i+1 to n do
- begin
- delenie:= a[k,i] / a[i,i];
- for j:=i+1 to n do
- a[k,j]:= a[k,j] - a[i,j] * delenie;
- b[k]:= b[k] - b[i] * delenie;
- end;
- end;
- for i:=n downto 1 do
- begin
- for j:= i+1 to n do
- b[i]:= b[i] - a[i,j] * x[j];
- x[i]:= b[i] / a[i,i];
- end;
- writeln('ОТВЕТ:');
- for i:=1 to n do
- writeln('X[',i:1,']=', x[i]:1:2);
- write('Нажмите любую клавишу для просиотра графика');
- readln;
- x0:=0;
- initgraph(x0,y0,'');{инициализация графического режима}
- xn:=-16;
- xk:=10;{интервал по Х}
- x0:=getmaxX div 2;{начало координат по Х}
- y0:=getmaxY div 2;{начало координат по Y}
- m:=(y0-40)/F(a1[1,1],a1[1,2],b1[1],xk);
- line(x0-round(17*m),y0,x0+round(17*m),y0);{оси}
- line(x0,0,x0,getmaxY);
- for i:=1 to 16 do{максимальное количество засечек в одну сторону}
- begin
- line(x0-3,y0-round(i*m),x0+3,y0-round(i*m));{засечки на оси У}
- line(x0-3,y0+round(i*m),x0+3,y0+round(i*m));
- line(x0+round(i*m),y0-3,x0+round(i*m),y0+3); {засечки на оси Х}
- line(x0-round(i*m),y0-3,x0-round(i*m),y0+3);
- if i mod 2=0 then
- begin
- {подпись оси У}
- str(i,s);
- outtextXY(x0-25,y0-round(i*m),s);{соответственно засечкам}
- outtextXY(x0-30,y0+round(i*m),'-'+s);
- {подпись оси Х}
- outtextXY(x0+round(i*m),y0+10,s);
- outtextXY(x0-round(i*m)-10,y0+10,'-'+s);
- end;
- end;
- {подписи концов осей}
- outtextXY(x0+round(16*m),y0-20,'X');
- outtextXY(x0+5,10, 'Y');
- {график}
- z:=xn;
- setcolor(12);
- while z<=xk do
- begin
- if z=xn then moveto(x0+round(z*m),y0-round(F(a1[1,1],a1[1,2],b1[1],z)*m))
- else lineto(x0+round(z*m),y0-round(F(a1[1,1],a1[1,2],b1[1],z)*m));
- z:=z+0.1;
- end;
- z:=xn;
- setcolor(10);
- while z<=xk do
- begin
- if z=xn then moveto(x0+round(z*m),y0-round(F(a1[2,1],a1[2,2],b1[2],z)*m))
- else lineto(x0+round(z*m),y0-round(F(a1[2,1],a1[2,2],b1[2],z)*m));
- 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
- begin
- x1:=z;
- y1:=F(a1[2,1],a1[2,2],b1[2],z);
- end;
- z:=z+0.1;
- end;
- setcolor(14);
- setfillstyle(1,14);
- fillellipse(x0+round(x1*m),y0-round(y1*m),3,3);
- {название}
- setcolor(12);
- outtextXY(10,80,'y=5+x');
- setcolor(10);
- outtextXY(10,100,'y=-7-2x');
- setcolor(14);
- str(x1:0:1,s);
- str(y1:0:1,s1);
- outtextXY(10,120,'x='+s+' y='+s1);
- readln
- end.
Объяснение кода листинга программы
Этот код написан на языке Turbo Pascal и предназначен для отображения результатов метода Гаусса на графике. Он использует библиотеку graph, чтобы создать график. В этом коде используются следующие переменные:
- a, b, x: массивы, представляющие собой прямые, которые пересекаются в точке пересечения.
- a1, b1, x1, x2: переменные, используемые для вычисления точки пересечения.
- s, s1: строки, используемые для подписи осей и названия графика.
- i, j, k, x0, y0: переменные, используемые для итерации по точкам пересечения.
- n: число, представляющее собой размер массивов. Функция f используется для вычисления коэффициента перед переменной x в методе Гаусса. Код начинается с инициализации графического режима и определения начальных координат осей X и Y. Затем он выполняет итерацию по точкам пересечения, вычисляя координаты этих точек и подписывая оси и график. После выполнения всех итераций, код рисует точку пересечения на графике и подписывает ее. Затем он выводит название графика и координаты точки пересечения. Наконец, код завершается, ожидая ввода от пользователя.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д