Фичи программирования
Предлагаю вашему внимаю некоторые «фичи» которые, может быть, помогут в решении задач 🙂
Содержание
Коэффициент линейного уравнения
1 2 3 |
a:=y2-y1; b:=x1-x2; c:=-x1*(y2-y1)+y1*(x2-x1); |
Лежит ли точка на прямой
1 2 3 |
p:=false; if (x3-x1)*(y2-y1)-(y3-y1)*(x2-x1)=0 then p:=true; |
Расположение точек
1 2 3 4 5 |
l:='1'; z1:=(x3-x1)*(y2-y1)-(y3-y1)*(x2-x1); z2:=(x4-x1)*(y2-y1)-(y4-y1)*(x2-x1); if z1*z2<0; then l:='2'; |
Расположение отрезков
1 2 3 4 5 6 7 8 9 |
p:=true; z1:=(x3-x1)*(y2-y1)-(y3-y1)*(x2-x1); z2:=(x4-x1)*(y2-y1)-(y4-y1)*(x2-x1); if z1*z2>0 then p:=false; z3:=(x1-x3)*(y4-y3)-(y1-y3)*(x4-x3); z4:=(x2-x3)*(y4-y3)-(y2-y3)*(x4-x3); if z3*z4>0 then p:=false; |
Точка пересечения отрезков
1 2 |
y=(a1c2-a2c1)/(a2b1-a1b2); x=(b1c2-b2c1)/(b2a1-b1a2); |
Расстояние между точками
1 |
d:=sqrt((x1-x2)^2+(y1-y2)^2); |
Расстояние от точки до прямой
1 2 3 4 5 |
a:=y2-y1; b:=x1-x2; c:=-x1*(y2-y1)+y1(x2-x1); t:=sqrt(a*a+b*b); d:=abs((a*x3+b*y3+c)/t); |
Выпуклость многоугольников
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
L:='выпуклый' for i:=1 to n do begin j:=i+1; k:=j+1; if i=n then k:=1; m:=i-1; if i=1; then m:=n; z1:=(x[m]-x[i])*(y[j]-y[i])-(y[m]-y[i])*(x[j]-x[i]); z2:=(x[k]-x[i])*(y[j]-y[i])-(y[k]-y[i])*(x[j]-x[i]); if z1*z2<0 then l:='Невыпулый'; end; |
Площадь многоугольника
1 2 3 4 5 6 7 8 9 10 |
ymin:=y[1]; for k:= 2 to n do if ymin >y[k] then ymin:=y[k]; for k:=1 to n+1 do y1[k]:=y[k]-ymin; s:=0; for k:=1 to n do s:=s+(x[i+1]-x[i])*(y1[i+1]+y1[i]); s:=abs(s)/2; |
Метод Гауса
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
uses crt; const n=2; var m : array[0..n,0..n+1] of real; x : array[0..n] of real; i,j,k:integer; a,s:real; begin for j:=0 to n do for i:=0 to n do m[j,i]:=random(4)+1; for k:=0 to n do begin a:=m[k,k]; for i:=0 to n+1 do m[k,i]:=m[k,i]/a; for j:=k to n-1 do begin a:=m[j+1,k]; for i:= 0 to n+1 do m[j+1,i]:=m[j+1,i]-m[k,i]*a; end; end; for k:=n downto 0 do begin x[k]:=m[k,n+1]; for j:=n-1 downto k do x[k]:=x[k]-m[k,j+1]*x[j+1]; end; end. |
Дифференцирование
1 2 3 4 5 6 7 8 9 10 11 |
const d=0.0001; x=2; {y=x*x+2} var f,dx:real; begin dx:=x+d; f:=((dx*dx+2)-(x*x+2))/d; writeln(f); end. |
Хорда
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
var x,xk,xk1,a,b:real; function f(x:real):real; begin f:=x*x+x-2; end; begin a:=-3; b:=0; xk1:=a; xk := a - (f(a)*(b-a)) / (f(b)-f(a)); while abs(xk-xk1)>=0.00001 do begin x:=xk1; if f(xk)*f(a)<0 then xk1:=xk-f(xk)*(xk-a)/(f(xk)-f(a)) else xk1:=xk-f(xk)*(b-xk)/(f(b)-f(xk)); xk:=x; end; end. |
Интегрирование
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
const x1=1; x2=3; n=1000; {y=x*x+2} var s,y,h,x:real; i:integer; begin h:=(x2-x1)/n; s:=0; x:=x1; for i:=1 to n-1 do begin y:=x*x+2; s:=s+y*h; {!} x:=x+h; end; writeln(s); end. {right rect} const x1=1; x2=3; n=1000; {y=x*x+2} var s,y,h,x:real; i:integer; begin h:=(x2-x1)/n; s:=0; x:=x1; for i:=1 to n-1 do begin {!} x:=x+h; y:=x*x+2; s:=s+y*h; end; writeln(s); end. {middle rect} const x1=1; x2=3; n=1000; {y=x*x+2} var s,y,h,x:real; i:integer; begin h:=(x2-x1)/n; s:=0; x:=x1; for i:=1 to n-1 do begin {!} y:=(x+h/2)*(x+h/2)+2; s:=s+y*h; {!} x:=x+h; end; writeln(s); end. {middle rect} const x1=1; x2=3; n=1000; {y=x*x+2} var s,y1,y2,h,x:real; i:integer; begin h:=(x2-x1)/n; s:=0; x:=x1; for i:=1 to n-1 do begin {!} y1:=x*x+2; y2:=(x+h)*(x+h)+2; s:=s+(y1+y2)*h/2; {!} x:=x+h; end; writeln(s); end. |
Простые Итерации
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
uses crt; var x,f,x0:real; begin clrscr; x:=2; x0:=0; while abs(x-x0)>0.000001 do begin x0:=sqrt(x+2); x:=x0; end; writeln(x0); end. |
Касательные
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
var d,x,xk,xk1,a,b:real; function f(x:real):real; begin f:=x*x+x-2; end; function f1(x:real):real; begin f1:=2*x-1; end; begin a:=-3; b:=0; d:=0.0001; xk:=a; xk1:=b; while abs(xk-xk1)>=d do begin x:=xk1; xk1:=xk-f(xk)/f1(xk); xk:=x; end; end. |
melt
| #
У Вас там кое-где ошибки в коде: точка с запятой пропущены, хотя, это мелочь
Reply
tux
| #
Исправил
Reply