Методичні вказівки до обов’язкового домашнього завдання з дисципліни «Організація баз даних та знань», страница 12

      DM.quIntPW.ParamByName('id2').AsInteger :=

                                           DM.Num_Substance ;

      DM.quIntPW.ParamByName('p2').AsFloat    := p ;

         if GetVars(DM.quIntPW) then begin

            if (ip[2][1]=ip[2][2]) then

                for i := 1 to AN do  iP[i][3] := iP[i][1]

            else

                for i := 1 to AN do

                   iP[i][3] := iP[i][1]+

                       (iP[i][2] - iP[i][1])/(ip[2][2]-

                        ip[2][1]) * (p-ip[2][1]) ;

         end;

      ShowNumbers ;

   END;

end;

Procedure TfmCalcNH3Satur.ShowNumbers ;

// Показать числа расчета или поиска

var i :Integer;

begin

  for i := 1 to AN do sgRes.Cells[1,i] :=

                        FloatToStrF(iP[i][3],ffExponent, 7,3)

end;

end.

Форма розрахунку термодинамічних властивостей

сухої перегрітої пари аміаку

Рисунок 8. Зовнішній вигляд форми розрахунку властивостей

                                 сухої перегрітої пари аміаку

unit uSearchSupH;

interface

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics,

  Controls, Forms,

  Dialogs, Grids, StdCtrls, Buttons, ExtCtrls, SqlExpr;

// К-во отображаемых результатов и всего результатов

Const NN = 5;

type

  TfmCalcNH3sh = class(TForm)

    paInd: TPanel;    Panel2: TPanel;    Panel3: TPanel;

    bbClose: TBitBtn; Panel4: TPanel;    Panel5: TPanel;

    Panel6: TPanel;   Panel7: TPanel;    Panel8: TPanel;

    Panel9: TPanel;   Panel10: TPanel;   Panel11: TPanel;

    edP: TEdit;       bbChoose: TBitBtn; sgRes: TStringGrid;

    bbSearchT: TBitBtn;                  edT: TEdit;

    procedure FormCreate(Sender: TObject);

    procedure bbChooseClick(Sender: TObject);

    procedure bbSearchTClick(Sender: TObject);

    procedure edTExit(Sender: TObject);

  private { Private declarations }

    // 4 соседние узловые точки

    Xmin, Ymin, Xmax, Ymax :Extended ;

    p,t, x,y,z :Extended ; // Текущие значения параметров

    //------------------------------------------------

    // Искомые значения в 4 соседних узловых точках. |

    //   0 соответствует номеру точки                |

    //   1 соответствует x-координате;               |

    //   2 соответствует y-координате:               |

        iP :Array[0..NN, 1..4] of Extended ;      // |

        iR :Array[1..NN] of Extended ; // Результаты |

    // имеются ли данные по точке?                   |

        isP :Array[1..4] of boolean;              // |

    //------------------------------------------------

  public

    { Public declarations }

    Function GetVars(qu :TSQLQuery) :Integer ;

    Procedure InitArr ;

    Procedure SqueezeA ;

    Function Flatness(i :Integer; x,y :Extended) :Extended;

    Procedure CalcProperties ;

    Procedure ShowNumbers ;

  end;

var fmCalcNH3sh: TfmCalcNH3sh;

implementation   uses uFmGr, uDM, DB, uDebug;  {$R *.dfm}

procedure TfmCalcNH3sh.FormCreate(Sender: TObject);

Const st :array [1..NN] of string = (

  'Давление p, Па',  'Температура t, °C',

  'Удельный объем v", м3/кг',

  'Удельная энтальпия i"`, Дж/кг',

  'Удельная энтропия s", Дж/(кг*K)' );

var i :Integer;

begin

   sgRes.ColWidths[0] := 450 ;  sgRes.ColWidths[1] := 150 ;

   sgRes.Cells[0,0] := 'Показатель' ; sgRes.Cells[1,0] := 'Значение' ;

       For i := 1 to NN do sgRes.Cells[0,i] := st[i] ;

    InitArr ;

end;

procedure TfmCalcNH3sh.bbChooseClick(Sender: TObject);

begin if fmGrSub.ChoiceSubstance then begin

         paInd.Caption := DM.name_Substance ;

      end;

end;

Procedure TfmCalcNH3sh.InitArr ;

Var i,j :Integer;

begin Xmin := -1 ; Xmax := Xmin ; Ymin := -273 ;

      Ymax := Ymin ;

     For i := 1 to 4 do begin

       isP[i]:= false; // Точка не определена

         For j := 0 to NN do iP[j][i] := -273 ;

     end;

end;

Function TfmCalcNH3sh.GetVars(qu :TSQLQuery) :Integer ;

var i,j, nf :Integer ;

begin

   // ShowMessage('Вошли в GetVars');

   InitArr ; Result := 0;

   qu.Open ; qu.First ; nf := qu.FieldCount ;

   // ShowMessage('Открыли набор');

      while (not qu.Eof) do begin