• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Графич. режим паскаль(или формула)

  • Автор темы Guest
  • Дата начала
G

Guest

Тут...вот...эээ....вообщем программа какбЭ не работает:
Построить график трактрисы
Код:
program graf_rezh;

uses crt, graph;

var gd, gm, a: integer;
x, y, phi: real;

BEGIN
clrscr;
gd:= detect;

initgraph(gd, gm,'');

If GrOk <> 0 Then exit;

SetBkColor(RED);
gd := GetMaxX div 2; gm := GetMaxY div 2;
phi := 0; a:= 60;

While phi <= pi do
Begin

x := (a * (cos(phi) + ln(sin(phi/2)/cos(phi/2)))) * cos(phi);
y := a * sin(phi) * sin(phi);


PutPixel(Round(x) +gd, Round(y) + gm, 1);
phi := phi + 0.01;
End;

readkey;
closegraph;
END.
Выводит код ошибки "200"(бабульки у подъезда мне сказали что 200 ошибка - эт деление на ноль)


Код:
  x := (a * (cos(phi) + ln(sin(phi/2)/cos(phi/2)))) * cos(phi);
Отсюда убераю логарифм - все норм. только трактриса на трактрису не похожа.

Тут наверно математику надо знать.
 
D

Dock1100

Что-то мне подсказівает что тут ошибка:
Код:
While phi <= pi do
Begin

x := (a * (cos(phi) + ln(sin(phi/2)/cos(phi/2)))) * cos(phi);
y := a * sin(phi) * sin(phi);


PutPixel(Round(x) +gd, Round(y) + gm, 1);
phi := phi + 0.01;
End;
Попробуйте так:
Код:
While phi <= pi do
Begin
if (phi<>180) then 
begin
x := a*(ln(sin(phi/2)/cos(phi/2))+cos(phi));
y := a * sin(phi);
PutPixel(Round(x) +gd, Round(y) + gm, 1);

x:=-x;
PutPixel(Round(x) +gd, Round(y) + gm, 1);
end;

phi := phi + 0.01;
End;
 
D

Dock1100

а так:
Код:
While phi <= pi do
Begin
if (cos(phi/2)<>0) then 
begin
x := a*(ln(sin(phi/2)/cos(phi/2))+cos(phi));
y := a * sin(phi);
PutPixel(Round(x) +gd, Round(y) + gm, 1);

x:=-x;
PutPixel(Round(x) +gd, Round(y) + gm, 1);
end;

phi := phi + 0.01;
End;
 
D

Dock1100

Вот должно работать, у меня график нормально рисует.
<!--shcode--><pre><code class='DElphi'>program graf_rezh;

uses crt, graph;

var gd, gm, a: integer;
x, y, phi: real;

BEGIN
clrscr;
gd:= detect;

initgraph(gd, gm,'');

If GrOk <> 0 Then exit;

SetBkColor(0);
gd := GetMaxX div 2; gm := GetMaxY div 2;
phi := 0; a:= 60;
setcolor(8);
if (cos(phi/2)<>0)and(sin(phi/2)<>0) then
begin
x := a*(ln(sin(phi/2)/cos(phi/2))+cos(phi));
y := a * sin(phi);
end;
moveto(Round(x) +gd,- Round(y) + gm);
phi := phi + 0.01;
While phi <= pi do
Begin
if (cos(phi/2)<>0)and(sin(phi/2)<>0) then
begin
x := a*(ln(sin(phi/2)/cos(phi/2))+cos(phi));
y := a * sin(phi);
lineto(Round(x) +gd,- Round(y) + gm);

end;

phi := phi + 0.01;
End;
setcolor(15);
moveto(0,gm);
lineto(639,gm);
moveto(gd,0);
lineto(gd,479);


readkey;
closegraph;
END.[/CODE]
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!