По идее drawgrafik рисует график любой функции. Переделай чтобы она не вызывала Func, а считывала абсциссу из файла. Если будет трудно - убери '|' из вывода. Черточки дорисуешь сам. Вообщем разомнись...
Код: Выделить всё
uses crt,graph;
const
b=4.5;
h=0.1;
var a:real;
f:text;
name:string;
gd,gm:integer;
function Func(x:real;vibor:byte):real;
begin
if (vibor<>1) and (vibor<>2) then
begin
writeln('Funkcia ne opredelenna!');
readln;
exit;
end
else
begin
case vibor of
1:Func:=exp(2.3*ln(x));
2:Func:=sin(x)/cos(x);
end;
end;
end;
procedure drawgrafik(aF,bF:real;vib:byte);
var x,dx,max,min,koef,hF,g:real;
k,x0,y0:integer;
begin
hF:=aF;
g:=bF;
clearviewport;
dx:=(bF-af)/639;
x:=aF; max:=func(aF,vib); min:=func(aF,vib);
for k:=1 to 640 do
begin
if func(x,vib)>max then max:=func(x,vib);
if func(x,vib)<min then min:=func(x,vib);
x:=x+dx;
end;
koef:=479/(max-min);
x:=aF;
moveto(0,round(479-koef*(func(aF,vib)-min)));
for k:=1 to 639 do
begin
x:=x+dx;
setbkcolor(black);
setcolor(green);
lineto(k,round(479-koef*(func(x,vib)-min)));
end;
x0:=round(639*aF/(aF-bF));
line(x0,0,x0,479);
y0:=round(479-479*(min/(min-max)));
line(0,y0,639,y0);
PutPixel(x0,y0,red);
setcolor(white);
OutTextXY(x0+3,y0+4,'0');
OutTextXY(x0-10,6,'y');
OutTextXY(615,y0+3,'x');
end;
begin
clrscr;
write('Vvedite imia i put faila: ');
readln(name);
assign(f,name);
rewrite(f);
writeln(f,' ------------------');
writeln(f,'| x | x^2,3| tg(x) |');
writeln(f,' ------------------');
a:=1.5;
while a<=b do
begin
writeln(f,'|',a:3:1,'|',Func(a,1):6:3,'|',Func(a,2):7:3,'|');
a:=a+h;
end;
writeln(f,' ------------------');
gd:=detect;
initgraph(gd, gm, '');
if graphresult <> grok then
begin
writeln('Oshibka pri zapuske graficheskogo rezhima!');
readln;
halt;
end
else
begin
DrawGrafik(1,50,2);
readln;
closegraph;
end;
close(f);
end.
чуть не забыл: кинь в папку с программой сам модуль и драйвер.