- 001
- 002
- 003
- 004
- 005
- 006
- 007
- 008
- 009
- 010
- 011
- 012
- 013
- 014
- 015
- 016
- 017
- 018
- 019
- 020
- 021
- 022
- 023
- 024
- 025
- 026
- 027
- 028
- 029
- 030
- 031
- 032
- 033
- 034
- 035
- 036
- 037
- 038
- 039
- 040
- 041
- 042
- 043
- 044
- 045
- 046
- 047
- 048
- 049
- 050
- 051
- 052
- 053
- 054
- 055
- 056
- 057
- 058
- 059
- 060
- 061
- 062
- 063
- 064
- 065
- 066
- 067
- 068
- 069
- 070
- 071
- 072
- 073
- 074
- 075
- 076
- 077
- 078
- 079
- 080
- 081
- 082
- 083
- 084
- 085
- 086
- 087
- 088
- 089
- 090
- 091
- 092
- 093
- 094
- 095
- 096
- 097
- 098
- 099
- 100
uses
graphabc;
var
a, b, c, d, e, x: longint;
a1, a3, b3, a4, b4, b1, c1, c2, y: longint;
a2, b2: integer;
procedure osordinat;
begin
line(325, 25, 325, 425, clblack);
line(25, 225, 625, 225, clblack);
line(320, 30, 325, 25, clblack);
line(330, 30, 325, 25, clblack);
line(620, 220, 625, 225, clblack);
line(620, 230, 625, 225, clblack);
end;
begin
c1 := 325; c2 := 225;
Writeln('Уравнение имеет вид A*(X^2)+B*(Y^2)+C*X+D*Y+E = 0');Writeln('Введите параметры A,B,C,D,E');Write('Параметр A = ');read(a);Writeln(a);Write('Параметр B = ');read(b);Writeln(b);Write('Параметр C = ');read(c);Writeln(c);Write('Параметр D = ');read(d);Writeln(d); Write('Параметр E = ');//для сокращения строк, здесь просто ввод данных
read(e);
Writeln(e);
a3 := round((b * sqr(c) + a * sqr(d) - (4 * a * b * e)) / (4 * sqr(a) * b));
b3 := round((b * sqr(c) + a * sqr(d) - (4 * a * b * e)) / (4 * sqr(b) * a));
a4 := round((c / (2 * a)));
b4 := round((d / (2 * b)));
if a3 < 0 then begin
if b3 < 0 then writeln('no') else
begin
writeln('Гипербола вида : ((Y+', b4, ')^2)/', b3, ' - ((X+', a4, ')^2)/', a3, ' = 1');
a1 := round(sqrt(abs(a3)));b1 := round(sqrt(abs(b3)));a2 := -a4;b2 := -b4;
x := -1;
repeat
if x = 325 then break;
x := (x + 1);
if (sqr(x - a2) + sqr(a1)) >= 0 then
begin
if abs(y) > 225 then writeln('Слишком большое значение получается, попробуй снова') else begin
y := round((b1 / a1) * (sqrt((sqr(x - a2) + sqr(a1))) + b2));
circle(c1 + 2 * x, c2 - 2 * y, 1);
circle(c1 + 2 * x, c2 + 2 * y, 1);
osordinat;
circle(c1 + 10 * a2, c2 - 10 * b2, 1);
end;
end;
until abs(y) = 225;
x := 1;
repeat
if x = -325 then break;
x := (x - 1);
if (sqr(x - a2) + sqr(a1)) >= 0 then
begin
if abs(y) > 225 then writeln('Слишком большое значение получается, попробуй снова') else begin
y := round((b1 / a1) * (sqrt((sqr(x - a2) + sqr(a1))) + b2));
circle(c1 + 2 * x, c2 - 2 * y, 1);
circle(c1 + 2 * x, c2 + 2 * y, 1);
osordinat;
circle(c1 + 10 * a2, c2 - 10 * b2, 1);
end;
end;
until abs(y) = 225;
end
end
else
begin
if b3 > 0 then begin
a1 := round(sqrt(abs(a3)));b1 := round(sqrt(abs(b3)));a2 := (-1 * a4);b2 := (-1 * b4);
ellipse((c1 + 10 * a1 + 10 * a2), (c2 - 10 * b2 - 10 * b1), (c1 + 10 * a2 - 10 * a1), (c2 - 10 * b2 + 10 * b1));
osordinat;
circle(c1 + 10 * a2, c2 - 10 * b2, 1);
writeln('Элипс вида : ((X+', a4, ')^2)/', a3, ' + ((Y+', b4, ')^2)/', b3, ' = 1');
end
else begin
writeln('Гипербола вида : ((X+', a4, ')^2)/', a3, ' - ((Y+', b4, ')^2)/', (-1) * b3, ' = 1');
a1 := round(sqrt(abs(a3)));b1 := round(sqrt(abs(b3)));a2 := -a4;b2 := -b4;
begin
x := a2 + a1 - 1;
repeat
if x > 325 then break;
x := (x + 1);
if (sqr(x - a2) - sqr(a1)) >= 0 then begin
y := round((b1 / a1) * (sqrt((sqr(x - a2) - sqr(a1))) + b2));
if abs(y) > 225 then writeln('Слишком большое значение получается, попробуй снова') else begin
circle(c1 + 2 * x, c2 - 2 * y, 1);
circle(c1 + 2 * x, c2 + 2 * y, 1);
osordinat;
end;
end;
until abs(y) = 225;
x := a2 - a1 + 1;
repeat
if x < -325 then break;
x := (x - 1);
if (sqr(x - a2) - sqr(a1)) >= 0 then begin
if abs(y) > 225 then writeln('Слишком большое значение получается, попробуй снова') else begin
y := round((b1 / a1) * (sqrt((sqr(x - a2) - sqr(a2))) + b2));
circle(c1 + 2 * x, c2 - 2 * y, 1);
circle(c1 + 2 * x, c2 + 2 * y, 1);
osordinat;end; end; until abs(y) = 225;end; end;end;end. //Чтобы сократить колличество строк
Первокурсник, представляю код от бога, который должен рисовать и распознавать по введенным данным кривую 2-го порядка. Если вы умрете со смеху, я не виноват.