Привет вам, админы!!!
Ваши проги привели моих однокурсников в шок)))
А преподы, кажется, что-то задумали...(
В общем мне нужен совет по поводу графика функции...
Нужно протабуллировать функцию y=arccos(x) в области [-0.99; 0.99], результаты занести в файл, а потом из этого же файла по результатах построить график...нужно чтоб сам график рисовался точками толщиной в 3 пикселя, тёмно-серым цветом, а подписи к обозначениям длины на осях были в стиле Gothic...фух...вот это загнули...я сам чуть не лишился дара речи от такого...оси примерно такие как в файле, который добавляю...
Прикрепленные файлы
GRAPHIC.PAS ( 745 байт )
Кол-во скачиваний: 293
М | Ознакомься с Правилами, п.8. |
Type
Trecord = record
x:real;
y:real;
end;
Tfile = file of Trecord;
....
var a:trecord;
...
{при считывание переменная а будет имметь вид
a.x
a.y
при табулирование функции очередное значение заносим просто в файл
потом считываем переменную а и строим график}
program d;
Const
a:double = 1;
b:double = 3;
step:double = 0.1;
eps:double = 0.00001;
var
x,r:double;
begin
x:=a;
while abs (b-x)>eps do begin
if x<=2 then r:=sqr(ln(abs(x-2)))+sqrt(x+3)
else r:=exp(6-2*x)+2*sqr(cos(x-3))*cos(x-3);
writeln(x:10, r:10);
x:=x+step
end;
readln
end.
береш пишеш функцию аркосинуса сибе в програму
function ArcCos(x: real): real;
begin
if Abs(x) < 10E-3 then ArcCos := Pi/2
else ArcCos := ArcTan(Sqrt(1 - Sqr(x)) / x) + Pi * Byte(x < 0)
end;
assign(f,'file.rec');
rewrire(f);
a.x:=-1;
while a.x<1 do begin
a.y:=arccos(a.x);
write(f,a);
a.x:=a.x+0.01; {0.01 это шаг с которым значени х меняет}
end;
close(f);
function ArcCos(x: real): real;
begin
if Abs(x) < 10E-3 then ArcCos := Pi/2
else ArcCos := ArcTan(Sqrt(1 - Sqr(x)) / x) + Pi * Byte(x < 0)
end;
assign(f,'file.rec');
rewrire(f);
a.x:=-1;
while a.x<1 do begin
a.y:=arccos(a.x);
write(f,a);
a.x:=a.x+0.01; {0.01 это шаг с которым значени х меняет}
end;
close(f);
Ошибки синтаксические исправь: Rewrite вместо rewrire, например... И в следующий раз говори, как именно сделал, и что за ошибка...
примерно вот так тое єт без построение графика
program arccos1;
Type
Trecord = record
x:real;
y:real;
end;
Tfile = file of Trecord;
function arccos(x:real):real;
begin
if Abs(x) < 10E-3 then arccos:=Pi/2
else arccos := arctan(sqrt(1-sqr(x))/x)+pi*Byte(x<0)
end;
var
a:Trecord;
f:Tfile;
{ + описание переменных для графического режима}
begin
assign(f,'file.rec');
rewrite(f);
a.x:=-1;
while a.x<1 do begin
a.y:=arccos(a.x);
write(f,a);
a.x:=a.x+0.01;
end;
close(f);
{подключение гр режима
считывание из файла
постройка графика}
end.
volvo
ты не могбы подсказать как зделать так чтобы действительный тип стал целый для построки графика
у есть идея:
каждую координату умножить на 100 (поскольку у нас шаг 0.01)
оюрезать хвост(дробную часть)
записать у текстовый файл
тоесть он будет выгледить так
100 200
101 201
... ...
и потоб строить график
но я не знаю как обрезать дробную часть
volvo
function arccos(x:real):real;
begin
if Abs(x) < 10E-3 then arccos:=Pi/2
else arccos := arctan(sqrt(1-sqr(x))/x)+pi*Byte(x<0)
end;
program argcos1;
Uses graph;
Type
Trecord = record
x:real;
y:real;
end;
Tfile = file of Trecord;
function arccos(x:real):real;
begin
if (1 - Abs(x)) < 10E-3 then Arccos := x * Pi/2
else Arccos := ArcTan( (x) / Sqrt(1 - Sqr(x)) )
end;
var
a:Trecord;
f:Tfile;
grD :integer;
grM :integer;
errC:integer;
begin
assign(f,'file.rec');
rewrite(f);
a.x:=-1;
while a.x<1 do begin
a.y:=arccos(a.x);
write(f,a);
a.x:=a.x+0.01;
end;
close(f);
detectgraph(grd,grm);
Initgraph(grd,grm,' ');
errc:=graphresult;
if errc=0 then begin
reset(f);
while not eof(f) do begin
read(f,a);
putpixel(trunc((a.x+1)*100)+200,trunc(100*a.y)+200,15);
end;
readln;
CloseGraph;
end;
end.
function ArcCos(x: real): real;, выдает 1.01973, что это? Арксинус? Не может быть, Арксинус (pi/6) должен быть 0.55106 радиан... Это именно арккосинус. Так что верни как было...
begin
if Abs(x) < 10E-3 then ArcCos := Pi/2
else ArcCos := ArcTan(Sqrt(1 - Sqr(x)) / x) + Pi * Byte(x < 0)
end;
begin
writeln(arccos(pi/6):10 :5);
end.
А вот, кстати, и подтверждение, что приведенная функция - именно АркКосинус:
program argcos1;(файлы EGAVGA.BGI и GOTH.CHR из папки \BGI должны быть в одной папке с программой. Можно, конечно, слинковать их с основной программой http://volvo71.narod.ru/faq_folder/bgiexe.htm , но я думаю ЭТОГО твои преподаватели, yakudza_m, тебе точно не простят)...
Uses graph;
function ArcCos(x: real): real;
begin
if Abs(x) < 10E-3 then ArcCos := Pi/2
else ArcCos := ArcTan(Sqrt(1 - Sqr(x)) / x) + Pi * Byte(x < 0)
end;
type
Trecord = record
x: real;
y: real;
end;
Tfile = file of Trecord;
const
eps = 0.01;
scaleX = 250;
scaleY = 100;
var
a:Trecord;
f:Tfile;
grD :integer;
grM :integer;
errC:integer;
dbl: real;
s: string;
begin
assign(f,'file.rec'); rewrite(f);
a.x := -1 + eps;
while a.x < 1 do begin
a.y := arccos(a.x);
write(f, a);
a.x := a.x + eps;
end;
close(f);
initgraph(grd, grm, '');
errc := graphresult;
if errc = grOk then begin
setcolor(lightred);
line(20, 3 * getmaxy div 4, getmaxx - 20, 3 * getmaxy div 4);
line(getmaxx div 2, 20, getmaxx div 2, getmaxy - 20);
settextstyle(gothicfont, horizdir, 1);
settextjustify(centertext, centertext);
dbl := -1;
while dbl <= 1 do begin
str(dbl:4:2, s);
outtextxy((getmaxx div 2) + trunc(dbl * scaleX),
(3 * getmaxy div 4) + 20, s);
dbl := dbl + 0.25;
end;
reset(f);
read(f, a);
setcolor(lightgray);
setlinestyle(solidLn, 0, thickWidth);
moveto((getmaxx div 2) + trunc(scaleX * a.x),
(3 * getmaxy div 4) - trunc(scaleY * a.y));
while not eof(f) do begin
read(f, a);
lineto((getmaxx div 2) + trunc(scaleX * a.x),
(3 * getmaxy div 4) - trunc(scaleY * a.y));
end;
close(f);
readln;
closegraph;
end;
end.
ух ты!
ну вы жжоте, парни!
я даж прозрел от такого мастерства...
а если поменять функцию на другую, например на синус 2 пи икс, то она тож работать будет?
а как сделать в программе плавающий центр координат и масштабируемый график??
у вас есть какие-нибудь советы по этому поводу??