Swiftkill

TPU Funcs

Oct 2nd, 2019
250
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 22.08 KB | None | 0 0
  1. {***************************************************************************}
  2. {*                                                                         *}
  3. {*  FUNCS.PAS     Модуль функциональных блоков программы                   *}
  4. {*  Ярослав Стерхов 1997 МТ7-21                 Турбо-Паскаль 5.5          *}
  5. {*                                                                         *}
  6. {***************************************************************************}
  7. {Функциональные части программы}
  8. {$F+,N+,E+,D-}
  9. UNIT Funcs;{Functions}
  10. INTERFACE
  11. USES CRT,Graph,Screen,IntrFace;
  12.  
  13. VAR
  14.   ExitOrNot:Boolean;
  15.  
  16. {Подтверждение выхода}
  17. PROCEDURE DoExit;
  18. {Работа с матрицей}
  19. PROCEDURE DoMatrix;
  20. {Работа с интегралом}
  21. PROCEDURE DoIntegral;
  22. {Работа с графиком}
  23. PROCEDURE DoPlot;
  24.  
  25. CONST
  26.   MenuData:TMenuData =(
  27.   (Name:'Сортировка матрицы';KeyInd:1; Key:['C','c','1','C','c']; Proc: DoMatrix),
  28.   (Name:'найти Интеграл';    KeyInd:7; Key:['B','b','2','И','и']; Proc: DoIntegral),
  29.   (Name:'построить График';  KeyInd:11; Key:['U','u','3','Г','г']; Proc: DoPlot),
  30.   (Name:'Выход в ДОС';       KeyInd:1; Key:['D','d','4','В','в']; Proc: DoExit));
  31.  
  32. IMPLEMENTATION
  33. {***************************************************************************}
  34. {**********************  Сортировка строк матрицы  *************************}
  35. {***************************************************************************}
  36. TYPE
  37. {Тип размерности элемента матрицы}
  38.   MSize = 1..11;
  39. {Матрица}
  40.   TRow   = array[MSize] of Integer;
  41.   Matrix = RECORD
  42.               elements: array[MSize] of TRow;
  43.               cols,rows:MSize;
  44.   END;
  45.  
  46. {***************************************************************************}
  47. {* Показать справку об использовании редактора матрицы                     *}
  48. {* используется в: DoMatrix                                                *}
  49. {***************************************************************************}
  50.  
  51. PROCEDURE HelpOnMatrix;
  52. VAR W    :PWindow;
  53.     PrevW:PWindow;
  54.     a    :Byte;
  55.     c    :Char;
  56.     wr,op:Rect;
  57. BEGIN
  58.  PrevW := CurWindow;
  59.   AssignRect(wr,10,6,71,19);
  60.   AssignRect(op,11,7,70,18);
  61.   A := Attrib(Black,Cyan);
  62.   New(W);
  63.   CreateWindow(W, 'Справка', wr,op, a,a, TRUE);
  64.   GlobalOFF;
  65.   a := Attrib(Yellow,Cyan);
  66.   WriteString(1,2,'   При вводе/редактировании матрицы вы можете',a);
  67.   WriteString(1,3,' использовать клавиши управления курсором для',a);
  68.   WriteString(1,4,' перемещения от элемента к элементу и <Enter>',a);
  69.   WriteString(1,5,' для изменения значения элемента.            ',a);
  70.   WriteString(1,6,'   Для окончания ввода выделите надпись ''око-',a);
  71.   WriteString(1,7,' нчание ввода матрицы'' и нажмите <Enter>.   ',a);
  72.   a := Attrib(Black,LightGray);
  73.   GlobalON;
  74.   WriteString(2,25,gStrings[3],a);
  75.   GlobalOff;
  76.   REPEAT
  77.     c :=ReadKey;
  78.   UNTIL c=#27;
  79.   HideWindow(W);
  80.   WriteChar(1,25,' ',80,a);
  81.   WriteString(2,25,gStrings[2],a);
  82.   GlobalOff;
  83.   CurWindow := PrevW;
  84.   DisposeWindow(W);
  85. END;
  86.  
  87. {***************************************************************************}
  88. {* сортировать строки M по неубыванию первых элементов                     *}
  89. {* используется в: DoMatrix                                                *}
  90. {***************************************************************************}
  91. PROCEDURE MatrixSort(var M:Matrix);
  92. var
  93.   Rmin : TRow;
  94.   K,I : MSize;
  95.   n   : MSize;
  96. BEGIN
  97.   FOR K:=1 TO M.rows-1 DO BEGIN
  98.     Rmin := M.elements[K];
  99.     n := k;
  100.     FOR I:=K+1 TO M.Rows DO BEGIN
  101.       IF M.elements[I,1] > Rmin[1] THEN BEGIN
  102.         Rmin := M.elements[I];
  103.         n :=I;
  104.       END;
  105.     END;
  106.     M.elements[n]:=M.elements[k];
  107.     M.elements[k]:=Rmin;
  108.   END;
  109. END;
  110.  
  111. {***************************************************************************}
  112. {* Показать матрицу Matr в виде таблицы                                    *}
  113. {* используется в: DoMatrix                                                *}
  114. {***************************************************************************}
  115. PROCEDURE ShowMatrix(var Matr:Matrix);
  116. var
  117.     W      :PWindow;
  118.     PrevW  :PWindow;
  119.     wr,op  :Rect;
  120.     Rw,Cl  :MSize;
  121.     S,ms,ns:String;
  122.     M      :Matrix;
  123.     a      :Byte;
  124.     c      :Char;
  125. BEGIN
  126.   M:=Matr;
  127.   PrevW:=CurWindow;
  128.   Str(M.rows,ms);
  129.   Str(M.cols,ns);
  130.   AssignRect(wr,(80-M.Cols*7-4) div 2,
  131.              (25-M.Rows-4) div 2,
  132.              (80-M.Cols*7-4) div 2 + M.Cols*7+6,
  133.              (25-M.Rows-4) div 2 + M.Rows+4);
  134.   AssignRect(op,wr.left+2,wr.top+1,wr.right-1, wr.bottom-1);
  135.   a := Attrib(White,Blue);
  136.   New(W);
  137.   CreateWindow(W, 'Матрица '+ms+' x '+ns, wr,op, a,a, TRUE);
  138.  
  139.   GlobalOff;
  140.   FOR Rw:=1 TO M.rows DO
  141.    FOR Cl:=1 TO M.cols DO BEGIN
  142.      Str(M.elements[Rw][Cl]:6,S);
  143.      WriteString((Cl-1)*7+1,Rw,S,Attrib(Yellow,Blue));
  144.    END;
  145.   WriteChar(1,Rw+1,'_',m.Cols*7+2,Attrib(Yellow,Blue));
  146.   CenterString(Rw+2,'Нажмите любую клавишу...',FALSE,Attrib(Yellow,Blue));
  147.   REPEAT UNTIL KeyPressed;
  148.   c:=ReadKey;
  149.   HideWindow(W);
  150.   DisposeWindow(W);
  151.   CurWindow:=PrevW;
  152. END;
  153.  
  154. {***************************************************************************}
  155. {* Осуществить редактировние матрицы М                                     *}
  156. {* используется в: DoMatrix                                                *}
  157. {***************************************************************************}
  158. FUNCTION ReadMatrix(var M:Matrix):Boolean;
  159. VAR
  160.   W,PrevW:PWindow;
  161.   wr,op  :Rect;
  162.   Rw,Cl,
  163.   pRw,pCl:MSize;
  164.   S,ms,ns:String;
  165.   a      :Byte;
  166.  
  167.   ch     :Char;
  168.   el     :Integer;
  169.   Entered,
  170.   Ended  :Boolean;
  171. BEGIN
  172.   PrevW:=CurWindow;
  173.   Str(M.rows,ms);
  174.   Str(M.cols,ns);
  175.   AssignRect(wr,(80-M.Cols*7-4) div 2,
  176.              (25-M.Rows-4) div 2,
  177.              (80-M.Cols*7-4) div 2 + M.Cols*7+6,
  178.              (25-M.Rows-4) div 2 + M.Rows+2);
  179.   AssignRect(op,wr.left+2,wr.top+1,wr.right-1, wr.bottom-1);
  180.   a := Attrib(White,Blue);
  181.   New(W);
  182.   CreateWindow(W, 'Матрица '+ms+' x '+ns, wr,op, a,a, TRUE);
  183.  
  184.   GlobalOff;
  185.   FOR Rw:=1 TO M.rows DO
  186.    FOR Cl:=1 TO M.cols DO BEGIN
  187.      Str(M.elements[Rw][Cl]:6,S);
  188.      WriteString((Cl-1)*7+1,Rw,S,Attrib(Yellow,Blue));
  189.    END;
  190.   CenterString(M.Rows+1,'Окончание ввода матрицы',FALSE,Attrib(White,Blue));
  191.  
  192.   {Вывод статус-строки}
  193.   GlobalOn;
  194.   WriteChar(1,25,' ',80,Attrib(Black,LightGray));
  195.   WriteString(2,25,'F1 - Справка   <┘ - Ввод ',Attrib(Black,LightGray));
  196.   GlobalOFF;
  197.  
  198.   {Начало агоритма ввода матрицы}
  199.   Rw:=1; Cl:=1;
  200.   Str(M.elements[Rw][Cl]:6,S);
  201.   WriteString((Cl-1)*7+1,Rw,S,Attrib(Yellow,Black));
  202.   Ended := False;
  203.   REPEAT
  204.    ch := ReadKey;
  205.    pRw:= Rw;
  206.    pCl:= Cl;
  207.    CASE ch OF
  208.      #13: {редактирование элемента/обработка завершения}
  209.           {Индекс Rw = 11 эквивалентен строке выхода}
  210.          IF Rw = 11 THEN Ended:=TRUE ELSE BEGIN
  211.              Str(M.rows,ms); Str(M.cols,ns);
  212.              el:=AskInteger('Элемент ('+ms+';'+ns+')',
  213.                     'Введите значение элемента:',M.elements[Rw][Cl],
  214.                     Entered,DumbCheck);
  215.              IF Entered THEN M.elements[Rw][Cl] := el;
  216.              GlobalOn;
  217.              WriteChar(1,25,' ',80,Attrib(Black,LightGray));
  218.              WriteString(2,25,'F1 - Справка   <┘ - Ввод ',Attrib(Black,LightGray));
  219.              GlobalOFF;
  220.           END;
  221.  
  222.      #00: {расширенный код}
  223.           BEGIN
  224.              ch:=ReadKey;
  225.              CASE ch OF
  226.                #59: {F1}
  227.                    HelpOnMatrix;
  228.                #72: {вверх}
  229.                    IF Rw=11 THEN rw:=M.Rows ELSE
  230.                     IF Rw>1 THEN Dec(Rw);
  231.                #75: {влево}
  232.                    IF Cl=1 THEN Cl:=M.Cols ELSE Dec(Cl);
  233.                #77: {вправо}
  234.                    IF Cl=M.Cols THEN Cl:=1 ELSE Inc(Cl);
  235.                #80: {вниз}
  236.                    IF Rw>=M.Rows THEN Rw:=11 ELSE Inc(Rw);
  237.              END;
  238.           END;
  239.    END;
  240.    IF NOT ((pRw=Rw) AND (pCl=Cl)) THEN BEGIN
  241.       IF pRw=11 THEN
  242.          CenterString(M.Rows+1,'Окончание ввода матрицы',FALSE,Attrib(White,Blue))
  243.       ELSE BEGIN
  244.         Str(M.elements[pRw][pCl]:6,S);
  245.         WriteString((pCl-1)*7+1,pRw,S,Attrib(Yellow,Blue));
  246.       END;
  247.       IF Rw=11 THEN
  248.          CenterString(M.Rows+1,'Окончание ввода матрицы',FALSE,Attrib(White,Black))
  249.       ELSE BEGIN
  250.         Str(M.elements[Rw][Cl]:6,S);
  251.         WriteString((Cl-1)*7+1,Rw,S,Attrib(Yellow,Black));
  252.       END;
  253.    END;
  254.   UNTIL Ended;
  255.   HideWindow(W);
  256.   DisposeWindow(W);
  257.   CurWindow:=PrevW;
  258. END;
  259.  
  260.  
  261. {***************************************************************************}
  262. {* сортировать строки M по неубыванию первых элементов  (основная)         *}
  263. {***************************************************************************}
  264. FUNCTION MatrixSize(Value:Real):Boolean;far;
  265. VAR MS:Boolean;
  266. BEGIN
  267.   MS := (Value>=3) AND (Value<=10);
  268.   IF NOT MS THEN
  269.        Message('Размерность матрицы - от 3 до 10!',Attrib(Yellow,Red));
  270.   MatrixSize:=MS;
  271. END;
  272.  
  273. PROCEDURE DoMatrix;
  274. LABEL lab1,lab2;
  275. VAR
  276.   M       : Matrix;
  277.   Entered : Boolean;
  278.   ToExit  : Boolean;
  279.   Step    : Integer;
  280.  
  281. BEGIN
  282.   Message('Сортировка матрицы',Attrib(Black,LightGray));
  283.   Step:=1;
  284.   Entered:=FALSE;
  285.   ToExit:=FALSE;
  286.   REPEAT
  287.     CASE Step OF
  288.        0:  ToExit:=TRUE;
  289.        1:  BEGIN
  290.             M.Rows:=AskInteger('Ввод',
  291.             'Введите количество строк матрицы (3..10)',3,Entered,MatrixSize);
  292.             IF Entered THEN Inc(Step) ELSE Dec(Step);
  293.            END;
  294.        2:  BEGIN
  295.             M.Cols:=AskInteger('Ввод',
  296.              'Введите количество столбцов матрицы (3..10)',3,Entered,MatrixSize);
  297.             IF Entered THEN Inc(Step) ELSE Dec(Step);
  298.            END;
  299.     END;
  300.   UNTIL  (Step=3) OR ToExit;
  301.   IF ToExit THEN Exit;
  302.   ReadMatrix(M);
  303.   MatrixSort(M);
  304.   ShowMatrix(M);
  305. END;
  306.  
  307. {***************************************************************************}
  308. {****************  Вычисление определенного интеграла  *********************}
  309. {***************************************************************************}
  310. TYPE
  311.   XToYFunc = FUNCTION (x:real):real;
  312.  
  313. {***************************************************************************}
  314. {* вычисление функции f при значении аргумента x (в радианах)              *}
  315. {* используется в: DoIntegral                                              *}
  316. {***************************************************************************}
  317. FUNCTION Func1(x:real):real;
  318. BEGIN
  319.   Func1:= cos(x)/x
  320. END;
  321. {***************************************************************************}
  322. {* вычисление интегральной суммы функции f при аппроксимации n отрезками   *}
  323. {* (шаг итерации) на промежутке [a;b]                                      *}
  324. {* используется в: Integral                                                *}
  325. {***************************************************************************}
  326. FUNCTION Iteration( f: XToYFunc; a,b:real; n:Word) : real;
  327. VAR
  328.   x, dx:real;
  329.   sum :real;
  330. BEGIN
  331.   x := a;
  332.   dx := (b-a)/n;
  333.   sum := (f(a)+f(b))/2 * dx;
  334.   REPEAT
  335.     x := x + dx;
  336.     sum := sum + f(x) * dx;
  337.   UNTIL x = b;
  338.   Iteration := sum;
  339. END;
  340.  
  341. {***************************************************************************}
  342. {* вычисление интеграла функции f на промежутке [a;b] с точностью до eps   *}
  343. {* используется в: DoIntegral                                              *}
  344. {***************************************************************************}
  345. PROCEDURE Integral( f: XtoYFunc; a,b:real; eps:real; var value:Real);
  346. VAR
  347.   Prev,Cur : real;
  348.   n        : Word;
  349. BEGIN
  350.   Prev := 0;
  351.   n    := 1;
  352.   Cur  := Iteration(f,a,b,n);
  353.   REPEAT
  354.     Prev := Cur;
  355.     n := n * 2;
  356.     Cur := Iteration(f,a,b,n);
  357.     GotoXY(1,20);
  358.   UNTIL (abs(Cur - Prev) < eps) OR (n >= 32768);
  359.   Value:=Cur;
  360. end;
  361.  
  362.  
  363. {***************************************************************************}
  364. {* вычисление интеграла функции f на промежутке [a;b] с точностью до eps   *}
  365. {***************************************************************************}
  366. PROCEDURE DoIntegral;
  367. VAR
  368.  epsilon:Real;
  369.  a,b    :Real;
  370.  Value  :Real;
  371.  Entered:Boolean;
  372.  ToExit :Boolean;
  373.  Step   :Byte;
  374.  S      :String;
  375.  
  376. BEGIN
  377.  Message('Вычисление интеграла функции Cos(X)/X',Attrib(Black,LightGray));
  378.  Step:=1;
  379.  Entered:=FALSE;
  380.  ToExit:=FALSE;
  381.  REPEAT
  382.     CASE Step OF
  383.        0:  ToExit:=TRUE;
  384.        1:  BEGIN
  385.              a:=AskReal('Ввод параметров','Введите нижий предел интегрирования',
  386.                             0,Entered, DumbCheck);
  387.              IF Entered THEN Inc(Step) ELSE Dec(Step);
  388.            END;
  389.        2:  BEGIN
  390.              b:=AskReal('Ввод параметров','Введите верхний предел интегрирования',
  391.                             0,Entered,DumbCheck);
  392.              IF Entered THEN BEGIN
  393.                 IF b<=a THEN
  394.                    Message('Должно быть больше нижнего!',Attrib(Yellow,Red))
  395.                 ELSE Inc(Step);
  396.              END ELSE Dec(Step);
  397.            END;
  398.        3:  BEGIN
  399.               Epsilon:=AskReal('Ввод параметров','Введите точность интегрирования',
  400.                       0,Entered,DumbCheck);
  401.               IF Entered THEN Inc(Step) ELSE Dec(Step);
  402.            END;
  403.     END;
  404.   UNTIL (Step=4) OR ToExit;
  405.   IF ToExit THEN Exit;
  406.  
  407.   Integral( Func1, a,b, epsilon, value);
  408.   Str(value:7:5,S);
  409.   Message('Найдено значение интеграла: '+S+'.',Attrib(Yellow,Blue));
  410. END;
  411.  
  412. {***************************************************************************}
  413. {**********************  Построение графика функции  ***********************}
  414. {******************************* CRT,Graph *********************************}
  415. {***************************************************************************}
  416.  
  417. { тип-функция от параметра t}
  418. TYPE
  419.   FofT = FUNCTION(t:real):real;
  420.   {Процедура изготовление сетки}
  421.  
  422. { глобальные переменные - параметры функции A и B }
  423. VAR
  424.   par_A,par_B :real;
  425.  
  426. CONST
  427.   BgiPath:String = '';
  428.  
  429. {***************************************************************************}
  430. {* Наша функция (астроида)                                                 *}
  431. {***************************************************************************}
  432. FUNCTION YofT(t:real):real;far;
  433. BEGIN YofT := par_A * sin(t)*sin(t)*sin(t); END;
  434.  
  435. FUNCTION XofT(t:real):real;far;
  436. BEGIN XofT := par_B * cos(t)*cos(t)*cos(t); END;
  437.  
  438. {***************************************************************************}
  439. {* Построить график функции, заданной параметрически (x,y)                 *}
  440. {*    t1,t2 - промежуток;                                                  *}
  441. {*    dt - шаг итерации;                                                   *}
  442. {*    px,py - масштаб по Ox и Oy (единиц/пиксел)                           *}
  443. {* используется в: DoPlot                                                  *}
  444. {***************************************************************************}
  445. PROCEDURE PlotParmFunc(x,y:FofT; t1,t2,dt:real; px,py:real);
  446. VAR
  447.  MaxX, MaxY  : Word; {Размеры экрана}
  448.  curx, cury,
  449.  prevx, prevy: Integer; {Координаты точек на экране}
  450.  x0, y0      : Word; {Начало координат}
  451.  curt        : Real; {Текущее значение параметра t}
  452.  GDriver,
  453.  GMode, GRes : Integer; {необходимо для инициализации Graph}
  454.  
  455. PROCEDURE DrawGrid;
  456.   VAR
  457.     i   :word;
  458.     s,s2:string;
  459.   BEGIN
  460.     {Координатные оси}
  461.     SetColor(White);
  462.     Line(X0,0,X0,MaxY);
  463.     Line(0,Y0,MaxX,Y0);
  464.     SetColor(LightBlue);
  465.     {Вертикальные линии}
  466.     i:=round(1/px);
  467.     REPEAT
  468.       Line(X0+i,0,X0+i,MaxY);
  469.       Line(X0-i,0,X0-i,MaxY);
  470.       i:=i + round(1/px);
  471.     UNTIL i >= X0;
  472.     {Горизонтальные линии}
  473.     i:= round(1/py);
  474.     REPEAT
  475.       Line(0,Y0+i,MaxX,Y0+i);
  476.       Line(0,Y0-i,MaxX,Y0-i);
  477.       i:=i + round(1/py);
  478.     UNTIL i >= Y0;
  479.     {Основная надпись}
  480.     SetColor(White);
  481.     OutTextXY(1,1,'Dimension of grid - 1 unit.');
  482.     OutTextXY(1,12,'Plot of parametrical function:');
  483.     Str(par_A:5:2,s);
  484.     SetColor(Yellow);
  485.     OutTextXY(20,24,'y = '+s+'*sin(t)^3');
  486.     Str(par_B:5:2,s);
  487.     OutTextXY(20,36,'x = '+s+'*cos(t)^3');
  488.     Str(t1:6:4,s);Str(t2:6:4,s2);
  489.     SetColor(White);
  490.     OutTextXY(1,48,'at t = '+s+'...'+s2+'.');
  491.     {Оси и начало координат}
  492.     OutTextXY(X0+2,1,'Y');
  493.     OutTextXY(MaxX-10,Y0+2,'X');
  494.     OutTextXY(X0+2,Y0+2,'O');
  495.   END;
  496.  
  497. BEGIN
  498.  {Инициализация}
  499.  Gdriver := Detect;
  500.  InitGraph(GDriver,GMode,BgiPath);
  501.  GRes := GraphResult;
  502.  IF Gres<>GrOk THEN BEGIN
  503.    {Выдадим сообщение}
  504.    InitInterFace;
  505.    Message(GraphErrorMsg(Gres),Attrib(Yellow,Red));
  506.    Exit;
  507.  END;
  508.  {Присвоение начальных значчений}
  509.  MaxX := GetMaxX;  MaxY := GetMaxY;
  510.  curt := t1;
  511.  x0 := MaxX div 2; y0 := MaxY div 2;
  512.  SetBkColor(Blue);
  513.  SetColor(LightGreen);
  514.  DrawGrid;
  515.  {первая точка графика}
  516.  prevx := x0 + round(x(curt)/px);
  517.  prevy := y0 - round(y(curt)/py);
  518.  {цикл нахождения точек и соединения их линиями}
  519.  REPEAT
  520.    curt:= curt + dt;
  521.    curx := round(x0 + x(curt)/px);
  522.    cury := round(y0 - y(curt)/py);
  523.    SetColor(Yellow);
  524.    Line(prevx,prevy,curx,cury);
  525.    prevx := curx;
  526.    prevy := cury;
  527.  UNTIL curt > t2;
  528.  {выход при нажатии клавиши}
  529.  REPEAT UNTIL KeyPressed;
  530.  CloseGraph;
  531.  InitInterFace;
  532. END;
  533.  
  534.  
  535. PROCEDURE DoPlot;
  536. VAR
  537.   S          :String;
  538.   Tbegin,Tend:Real;
  539.   DeltaT,Ratio:Real;
  540.   Entered    :Boolean;
  541.   ToExit     :Boolean;
  542.   Step       :Byte;
  543.   Dim        :Byte;
  544. CONST
  545.   Dimensions :ARRAY[1..4] OF TmenuItem = (
  546.  (Name:'В градусах';KeyInd:3; Key:['Г','г','1','U','u']; Proc: nil),
  547.  (Name:'В радианах';KeyInd:3; Key:['Р','р','2','H','h']; Proc: nil),
  548.  (Name:'В ''пи'' радиан';KeyInd:4; Key:['П','п','3','G','G']; Proc: nil),
  549.  (Name:'Отмена';KeyInd:1; Key:['о','О','4','J','j']; Proc: nil));
  550.  
  551. BEGIN
  552.   Message('Черчение графика кардиоиды',Attrib(Black,LightGray));
  553.   Step:=1;
  554.   Entered:=FALSE;
  555.   ToExit:=FALSE;
  556.   REPEAT
  557.     CASE Step OF
  558.        0:  ToExit:=TRUE;
  559.        1:  BEGIN
  560.             Dim := AskVariant('Параметры','Выберите размерность',4,Dimensions);
  561.             IF Dim=4 THEN Dec(Step) ELSE Inc(Step);
  562.            END;
  563.        2:  BEGIN
  564.             TBegin:=AskReal('Ввод','Введите начальное значение параметра',
  565.                   0,Entered,DumbCheck);
  566.             IF Entered THEN Inc(Step) ELSE Dec(Step);
  567.            END;
  568.        3:  BEGIN
  569.             TEnd:=AskReal('Ввод','Введите конечное значение параметра',
  570.                       0,Entered,DumbCheck);
  571.             IF Entered THEN BEGIN
  572.                IF Tend<=TBegin THEN
  573.                   Message('Должно быть больше начального!',Attrib(Yellow,Red))
  574.                ELSE Inc(Step);
  575.             END ELSE Dec(Step);
  576.            END;
  577.        4:  BEGIN
  578.              DeltaT:= AskReal('Ввод','Введите шаг изменения параметра',
  579.                       0.01,Entered,DumbCheck);
  580.              IF Entered THEN Inc(Step) ELSE Dec(Step);
  581.            END;
  582.        5:  BEGIN
  583.              par_A:= AskReal('Ввод параметров','Введите высоту кардиодиды:',
  584.                       10,Entered,DumbCheck);
  585.              IF Entered THEN Inc(Step) ELSE Dec(Step);
  586.            END;
  587.        6:  BEGIN
  588.              par_B:= AskReal('Ввод параметров','Введите ширину кардиодиды:',
  589.                       10,Entered,DumbCheck);
  590.              IF Entered THEN Inc(Step) ELSE Dec(Step);
  591.            END;
  592.        7:  BEGIN
  593.              Ratio:=AskReal('Ввод параметров','Введите масштаб (единиц/пиксел):',
  594.                       0.05,Entered,DumbCheck);
  595.              IF Entered THEN Inc(Step) ELSE Dec(Step);
  596.            END;
  597.     END;
  598.   UNTIL (Step=8) OR ToExit;
  599.  
  600.   IF ToExit THEN Exit;
  601.  
  602.   {Приведение ук.единиц к радианам}
  603.   CASE Dim OF
  604.     1:  BEGIN
  605.          TBegin := TBegin*Pi/180;
  606.          TEnd := TEnd*Pi/180;
  607.         END;
  608.     3:  BEGIN
  609.          TBegin := TBegin*Pi;
  610.          TEnd := TEnd*Pi;
  611.         END;
  612.   END;
  613.   ClrScr;
  614.   PlotParmFunc(XofT,YofT, TBegin,TEnd,DeltaT,Ratio,Ratio);
  615.   HideCursor;
  616. END;
  617.  
  618. PROCEDURE DoExit;
  619. BEGIN
  620.  ExitOrNot := Ask('Вы дейстительно хотите выйти?');
  621. END;
  622.  
  623. END.
Advertisement
Add Comment
Please, Sign In to add comment