Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.06.2013, 18:20   #1
Trump
 
Регистрация: 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.
Trump вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построение графика функции с автоматическим масштабированием (Turbo Pascal) Tiran09 Помощь студентам 0 11.12.2011 23:09
Turbo Pascal построение таблицы Viktoria90 Помощь студентам 7 13.01.2010 22:58
Массивы и построение таблицы значений х,у по графику (Turbo Pascal) JIUMOH Помощь студентам 6 21.12.2009 20:30