Регистрация: 11.05.2013
Сообщений: 4
|
построение графиков в turbo pascal
проблема с построением графиков. Где и что нужно исправить? Очень нужна помощь.
программа:
Код:
program zk;
uses capwrgr,crt;
var
Un,Uk,g,n,m,k,err:integer;
U,s,Nd,Cmax,Cmin:real;
bul:boolean;
sr,sr1:string;
f,max,min:array[1..5] of real;
BEGIN
clrscr;
repeat
writeln('vvedite kol-vo grafikov ot 3 do 5');
readln(sr);
val(sr,k,err);
if ((k=3) or (k=4) or (k=5)) and (err=0) then bul:=true else bul:=false;
if bul=false then
begin
clrscr;
writeln('Nevernoe znachenie! Povtorite vvod')
end
else writeln;
until bul=true;
for m:=1 to k do
repeat
writeln('vvedite znachenie kontsentratsii Nd',m,' iz diapazona ot 1*10e18 do 1*10e23 m-3');
read(Nd);
{ val(sr1,Nd,err);}
if (Nd>=1*10e18) and (Nd<=1*10e23) and (err=0) then bul:=true else bul:=false;
if bul=false then
begin
clrscr;
writeln('Nevernoe znachenie! Povtorite vvod')
end
else writeln;
f[m]:=Nd;
until bul=true;
readln;
repeat
writeln('vvedite kolichestvo znacheniy napryazheniya');
readln(sr1);
val(sr1,n,err);
if (n>0) and (err=0) then bul:=true else bul:=false;
if bul=false then
begin
clrscr;
writeln('Nevernoe znachenie! Povtorite vvod')
end
else writeln;
until bul=true;
U:=0;
Un:=0;
Uk:=-12;
s:=(Uk-Un)/(n-1);
for m:=1 to k do
begin
U:=0;
for g:=1 to n do
begin
a[g]:=U;
b[m,g]:=cap(f[m],U);
U:=U+s;
end;
end;
for m:=1 to k do
begin
max[m]:=-999999999;
min[m]:=999999999;
end;
Cmax:=-999999999;
Cmin:=999999999;
for m:=1 to k do
for g:=1 to n do
begin
if max[m]<b[m,g] then max[m]:=b[m,g]*10e6;
if min[m]>b[m,g] then min[m]:=b[m,g]*10e6;
if Cmax<b[m,g] then Cmax:=b[m,g];
if Cmin>b[m,g] then Cmin:=b[m,g];
end;
wr(n,k);
gr(n,k,Cmax,Cmin,max,min);
END.
модуль:
Код:
unit capwrgr;
interface
uses crt,graph;
var
k,r,m:integer;
U:real;
t:string;
a:array[0..100] of real;
b:array[0..100,1..5] of real;
function cap(var f:array of real;U:real):real;
procedure wr(var n,k:integer);
procedure gr(var n,k:integer;Cmax,Cmin:real;max,min:array of real);
implementation
function cap(var f:array of real;U:real):real;
const
q=1.6e-19; {elementarny zaryad, Kl}
Es=11.8; {otnositel'naya dielektricheskaya pronitsaemost' kremniya}
Eo=8.85e-12; {dielektricheskaya postoyannaya}
fi=0.6; {poverkhnostny patentsial dlya perehoda zoloto-kremniy}
begin
cap:=sqrt((q*Eo*Es*f[m])/(2*(fi-U)));
end;
procedure wr;
var
j,m:integer;
begin
clrscr;
for m:=1 to k do
begin
writeln('Napryazhenie U,V | Yomkost C',m,',F/m2');
for j:=1 to n do
writeln(a[j],' |',b[m,j]);
readln;
end;
readkey;
end;
procedure gr;
var
kf:real;
i,j,
x,y,
grdriver,
grmode:integer;
begin
grdriver:=vga;
grmode:=vgahi;
initgraph(grdriver, grmode, 'd:\bp\bgi');
setlinestyle (userbitln, $8888,normwidth);
for i:=0 to n do
begin
line(getmaxx-round(580/(n+1)),450-round((420/(n-1))*i),
getmaxx-round((580*(n+1))/(n+1)),450-round((420/(n-1))*i));{gor}
line(60+round((580*i)/n),30,
60+round((580*i)/n),450);{ver}
end;
for i:=0 to n do
begin
str(round(a[n-i]),t);
outtextxy(55+round((580*i)/n+1),455,t);end;{otsifrovka X}
for i:=0 to n do
begin
str(((Cmin-i*(Cmin-Cmax)/(n-1))*1e7):7:2,t);
outtextxy(0,446-round((420/(n-1))*i),t);end;{otsifrovka Y}
outtextxy(0,0,'C*1e7, f');
outtextxy(600,445,'U, V');
setlinestyle(0,1,1);
kf:=(420/(Cmax-Cmin)*1e-7);
for m:=1 to k do
begin
moveto(getmaxx-round(580/(n+1)),round(30+3*kf*(max[k-m+1]-min[k-m+1])));
readln;
for j:=1 to n do
begin
x:=getmaxx-round((580*j)/(n));
y:=round((getmaxy-kf*min[m]-60)-(3*kf*(max[m]-min[m])*(b[m,j]-b[m,n])/(b[m,1]-b[m,n])));
setcolor(m);
lineto(x,y);
circle(x,y,3);
end;
end;
setcolor(15);
readln;
closegraph;
end;
end.
Последний раз редактировалось Trump; 30.06.2013 в 18:25.
|