Помощь - Поиск - Пользователи - Календарь
Полная версия: Все тот же график
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
mr.PiXEL
Задача: построить одновременно sinx и cosx на вводимом интервале, УЧЕСТЬ МАСШТАБИРОВАНИЕ.
Все сделал, кроме масштабирования ( масштаб задается тока в коде программы, а НАДО чтобы его сама определяла программа, т.к. интервал может быть хоть (0,001;0,002), хоть (-1000;1000) и график рисовался. ПОМОГИТЕ. Прошу не перенапрявлять на др. тему, т.к. я уже все просмотрел.

Код программы:

program functions;
uses graph, crt;
const
shag = 0.0001;
lgr = -50;
pgr = 50;
zcrtx = 320;
zcrty = 240;
mtrx = 10;
mtry = 10;
colorOXY = 4;
OXYminX = -400;
OXYmaxX = 400;
OXYminY = -400;
OXYmaxY = 400;

var driver, mode, i, d : integer;
x, y, z, a, b : real;
begin
clrscr;
a:=1; b:=0;
while a>=b do
begin
writeln(‘VVEDITE INTERVAL’);
readln(a,b);
if a>=b then writeln(‘OSHIBKA’); readln;
end; end;
if a<b then begin
initgraph(driver, mode, ‘’);
for i:=OXYminX to OXYmaxX do putpixel(zcrtX+i, zcrty, colorOXY);
for i:=OXYminY to OXYmaxY do putpixel(zcrtX, zcrty-i, colorOXY);

x:=a;
while x<=b do
begin
begin y:=sin(x); z:=cos(x);
putpixel(zcrtx+trunc(x*mtrx), zcrty-trunc(y*mtry), green);
putpixel(zcrtx+trunc(x*mtrx), zcrty-trunc(z*mtry), blue) end;
x:=x+shag;
end;
readkey;
closegraph;
end;
end.

wacko.gif wacko.gif wacko.gif wacko.gif wacko.gif
 ! 
Пользуемся тегами ! klem4

mr.PiXEL
Я написал новый код, но он не совсем корректно работает:

program sincos;
uses crt,graph;
type arr=array[1..4,1..200] of real;
ari=array[1..4,1..200] of integer;
procedure g_mn(x,y:arr; m,n,left,up,right,down:integer);
var xg,yg:ari;
xg0,yg0,i,k:integer;
kx,ky,xmin,xmax,ymin,ymax:real;
begin
xmin:=x[1,1];
xmax:=x[1,1];
ymin:=y[1,1];
ymax:=y[1,1];
for k:=1 to m do
for i:=1 to n do
begin
if ymin>y[k,i] then ymin:=y[k,i];
if ymax<y[k,i] then ymin:=y[k,i];
if xmin>x[k,i] then xmin:=x[k,i];
if xmax<x[k,i] then xmax:=x[k,i];
end;
kx:=(right-left)/(xmax-xmin);
ky:=(down-up)/(ymax-ymin);

if kx<ky then begin
ky:=kx;
down:=up+round((ymax-ymin)*ky);
end
else begin
kx:=ky;
right:=left +round((xmax-xmin)*kx);
end;
for k:=1 to m do
for i:=1 to n do begin
xg[k,i]:=left+round(kx*(x[k,i]-xmin));
yg[k,i]:=down-round(ky*(y[k,i]-ymin));
setcolor(7);
rectangle(left,up,right,down);
end;
if xmin*xmax<=0 then begin
xg0:=left-round(xmin*kx);
setcolor(m);
line(xg0,up,xg0,down);
end;
for k:=1 to m do begin
setcolor(k+8);
moveto(xg[k,1],yg[k,1]);
for i:=2 to n do lineto(xg[k,i],yg[k,i]);
end;
end;

function F1(x:real):real;
begin
F1:=sin(x)
end;
function F2(x:real):real;
begin
F2:=cos(x)
end;
var x,y:arr; n,i,gd,gm:integer;
a,b,dx:real;
begin
clrscr;
n:=200;
writeln('VVEDITE INTERVAL');
readln(a,b);
dx:=(b-a)/(n-1);
for i:=1 to n do begin
x[1,i]:=a+(i-1)*dx;
y[1,i]:=F1(x[1,i]);
x[2,i]:=x[1,i];
y[2,i]:=F2(x[2,i]);
end;
gd:=0;
initgraph(gd,gm,'');
g_mn(x,y,2,n,120,40,520,440);
readkey;
closegraph;
end.
mr.PiXEL
Мона тему закрыть, решил. Совершенно тривиальное решение.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.