Задача: построить одновременно 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 dobegin
writeln(‘VVEDITE INTERVAL’);
readln(a,b);
if a>=b then writeln(‘OSHIBKA’); readln;
end; end;
if a<b thenbegin
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 dobeginbegin 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.
!
Пользуемся тегами ! klem4
mr.PiXEL
7.03.2007 3:31
Я написал новый код, но он не совсем корректно работает:
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
7.03.2007 5:16
Мона тему закрыть, решил. Совершенно тривиальное решение.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.