::: µ¨ÆÄÀÌ Tip&Trick :::

µ¨ÆÄÀÌ Tip&Trick ¼º°Ý¿¡ ¸ÂÁö ¾Ê´Â ±¤°í,ºñ¹æ,Áú¹®ÀÇ ±ÛÀº Áï½Ã »èÁ¦Çϸç
³»¿ëÀ» º¹»çÇÏ¿© »ç¿ëÇÒ °æ¿ì ¹Ýµå½Ã À̰÷(http://www.howto.pe.kr)À» Ãâó·Î ¸í½ÃÇÏ¿© ÁÖ¼¼¿ä


Category

  ±è¿µ´ë(2003-03-06 21:53:34, Hit : 3542, Vote : 901
 ¹®ÀÚ¿­ ¼ö½Ä¹®Àå(expression)ÀÇ °á°ú ±¸Çϱâ

// È­¸éÀÇ Edit1ÀÇ Text¿¡ sqrt(43.23*12+3.1/1.64) ¸¦ ÀÔ·ÂÇϰí
// ¹öưÀ» Ŭ¸¯ÇÏ½Ã¸é ±× °á°ú¸¦ °è»êÇØ¼­ º¸¿©ÁÝ´Ï´Ù
// ¸¸¾à À߸øµÈ ¼ö½ÄÀÌ¸é ¿¡·¯³­ ¹®ÀÚ·Î ÄÉ·µÀ» À̵¿½Ãŵ´Ï´Ù
//
// ¼Ò½º Ãâó: http://www.geocities.com/SiliconValley/Hills/9167/index.htm

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, forms, Dialogs,
  StdCtrls;

type
  Tform1 = class(Tform)
    Edit1: TEdit;
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  form1: Tform1;

implementation
{$R *.DFM}

procedure Eval(formula: String;      {Expression to be evaluated}
               var Value: double;    {Return value}
               var ErrPos: Integer); {error position}
const
  Digit: Set of Char = ['0'..'9'];
var
  Posn: Integer;  {Current position in formula}
  CurrChar: Char; {character at Posn in formula}

  procedure ParseNext;
  begin
    repeat
      Posn := Posn+1;
      if Posn <= Length(formula) then
        CurrChar := formula[Posn]
      else
        CurrChar := ^M;
   until CurrChar<>' ';
  end {ParseNext};

  function add_subt: Real;
  var
    E: Real;
    Opr: Char;

    function mult_DIV: Real;
    var
      S   : Real;
      Opr : Char;

      function Power: Real;
      var
        T : Real;

        function Signedop: Real;

          function Unsignedop: Real;
          type
            StdFunc = (fabs,    fsqrt, fsqr, fsin, fcos,
                       farctan, fln,   flog, fexp, ffact);
            StdFuncList = array[StdFunc] of String[6];

          const
            StdFuncName: StdFuncList =
            ('ABS','SQRT','SQR','SIN','COS',
            'ARCTAN','LN','LOG','EXP','FACT');
          var
            E, L, Start    : Integer;
            Funnet         : Boolean;
            F              : Real;
            Sf             : StdFunc;

            function Fact(I: Integer): Real;
            begin
              if I > 0 then
              begin
                Fact := I*Fact(I-1);
              end
              else
                Fact := 1;
            end {Fact};

          begin {function Unsignedop}
            if CurrChar in Digit then
            begin
              Start := Posn;
              repeat
                ParseNext
              until not (CurrChar in Digit);
              if CurrChar = '.' then
                repeat
                  ParseNext
                until not (CurrChar in Digit);
              if CurrChar = 'E' then
              begin
                ParseNext;
                repeat
                  ParseNext
                until not (CurrChar in Digit);
              end;
              Val(Copy(formula,Start,Posn-Start),F,ErrPos);
            end
            else if CurrChar = '(' then
            begin
              ParseNext;
              F := add_subt;
              if CurrChar=')' then
                ParseNext
              else
                ErrPos := Posn;
            end
            else
            begin
              Funnet := False;
              for sf := fabs tO ffact do
                if not Funnet then
                begin
                  l := Length(StdFuncName[sf]);
                  if Copy(formula,Posn,l)=StdFuncName[sf] then
                  begin
                    Posn := Posn+l-1;
                    ParseNext;
                    f := Unsignedop;
                    case sf of
                      fabs:     f := abs(f);
                      fsqrt:    f := SqrT(f);
                      fsqr:     f := Sqr(f);
                      fsin:     f := Sin(f);
                      fcos:     f := Cos(f);
                      farctan:  f := ArcTan(f);
                      fln :     f := LN(f);
                      flog:     f := LN(f)/LN(10);
                      fexp:     f := EXP(f);
                      ffact:    f := fact(Trunc(f));
                    end;
                    Funnet := True;
                  end;
                end;
              if not Funnet then
              begin
                ErrPos := Posn;
                f := 0;
              end;
            end;
            Unsignedop := F;
          end {Unsignedop};

        begin {Signedop}
          if CurrChar='-' then
          begin
            ParseNext;
            Signedop := -Unsignedop;
          end
          else
            Signedop := Unsignedop;
        end {Signedop};

      begin {Power}
        T := Signedop;
        while CurrChar='^' do
        begin
          ParseNext;
          if t <> 0 then
            t := EXP(LN(abs(t))*Signedop)
          else
            t := 0;
        end;
        Power := t;
      end {Power};

    begin {mult_DIV}
      s := Power;
      while CurrChar in ['*','/'] do
      begin
        Opr := CurrChar;
        ParseNext;
        case Opr of
          '*': s := s * Power;
          '/': s := s / Power;
        end;
      end;
      mult_DIV := s;
    end {mult_DIV};

  begin {add_subt}
    E := mult_DIV;
    while CurrChar in ['+','-'] do
    begin
      Opr := CurrChar;
      ParseNext;
      case Opr of
        '+': e := e + mult_DIV;
        '-': e := e - mult_DIV;
      end;
    end;
    add_subt := E;
  end {add_subt};

begin {PROC Eval}
  if formula[1] = '.' then
    formula := '0' + formula;
  if formula[1]='+' then
    Delete(formula,1,1);
  for Posn:=1 to Length(formula) do
    formula[Posn] := Upcase(formula[Posn]);
  Posn := 0;
  ParseNext;
  Value := add_subt;
  if CurrChar=^M then
    ErrPos := 0
  else
    ErrPos := Posn;
end {PROC Eval};

procedure Tform1.Button1Click(Sender: TObject);
var
  Value: double;
  ErrPos: Integer;
begin
  Eval(Edit1.Text, Value, ErrPos);
  Label1.Caption := FloatToStr(Value); // °á°ú°ª

  if ErrPos > 0 then // ¿¡·¯°¡ ÀÖ´Ù¸é ÇØ´ç ¹®ÀڷΠij·µÀ» À§Ä¡ ½ÃŲ´Ù
  begin
    Edit1.SetFocus;
    {µÎ¹øÂ° ¹®ÀÚ À§Ä¡·Î Ä¿¼­¸¦ º¸³½´ë}
    Edit1.SelStart := ErrPos - 1;
    {¹®ÀÚ¸¦ ¼±ÅÃÇÏÁö ¾ÊÀº »óÅ·Π¸¸µç´Ù}
    Edit1.SelLength := 0;
  end;
end;

end.





611   [µ¥ÀÌÅͺ£À̽º] DB¿¡ ÀúÀåµÈ JPEG(JPG)¸¦ DBGrid¿¡ Ãâ·ÂÇÏ±â  ±è¿µ´ë 2003/03/06 5319 1263
610   [µ¥ÀÌÅͺ£À̽º] µ¿ÀûÀ¸·Î À妽º ¸¸µé±â  ±è¿µ´ë 2003/03/06 4623 1150
609   [µ¥ÀÌÅͺ£À̽º] Excel ODBC¸¦ »ç¿ëÇÏ¿© xls¸¦ Å×À̺í·Î »ç¿ëÇÏ±â  ±è¿µ´ë 2003/03/06 7008 1657
608   [µ¥ÀÌÅͺ£À̽º] DB aliasÁß ORACLE alias ¸í ±¸ÇÏ±â  ±è¿µ´ë 2003/03/06 4088 989
607   [ÀϹÝ/ÄÄÆ÷³ÍÆ®] QuickReport¿¡¼­ ÇÁ¸°ÅÍ ¹Ù²Ù¾î¼­ Ãâ·ÂÇÏ±â  ±è¿µ´ë 2003/03/06 6517 1589
606   [ÀϹÝ/ÄÄÆ÷³ÍÆ®] RichEdit ÀÇ ³»¿ëÀ» Bitmap À¸·Î ¸¸µé±â  ±è¿µ´ë 2003/03/06 3442 889
605   [ÀϹÝ/ÄÄÆ÷³ÍÆ®] RichEdit ¿¡¼­ ¹®ÀÚ(¿­)¸¦ ã¾Æ ±ÛÀÚ¼Ó¼º ¹Ù²Ù±â  ±è¿µ´ë 2003/03/06 4844 1224
604   [ÀϹÝ/ÄÄÆ÷³ÍÆ®] RichEdit ¿¡¼­ Ä¿¼­¸¦ óÀ½, ¸¶Áö¸·À¸·Î º¸³»±â  ±è¿µ´ë 2003/03/06 7134 1514
603   [À©µµ¿ìÁî API] ½ÇÇàÁßÀÎ ¸ðµç ÇÁ·Î±×·¥ Minimized ½ÃŰ±â  ±è¿µ´ë 2003/03/06 4744 1248
602   [½Ã½ºÅÛ] µ¨ÆÄÀÌ·Î DOS ÇÁ·Î±×·¥(Console application) ¸¸µé±â  ±è¿µ´ë 2003/03/06 21740 7636
601   [COM/OLE] Registering *.tlb files without Delphi  ±è¿µ´ë 2003/03/06 6768 1150
600   [³×Æ®¿÷/ÀÎÅͳÝ] How to bring a network down - "Win Nuke"  ±è¿µ´ë 2003/03/06 7426 2007
599   [À©µµ¿ìÁî API] Æú´õ³ª ÆÄÀÏÀÇ À©µµ¿ìÁî µî·ÏÁ¤º¸ dialog ¶ç¿ì±â  ±è¿µ´ë 2003/03/06 5169 1484
598   [ÀϹÝ/ÄÄÆ÷³ÍÆ®] À̹ÌÁö¸¦ ¸¶¿ì½º·Î drag ÇØ¼­ zoom ÇÏ±â  ±è¿µ´ë 2003/03/06 3760 1040
597   [À©µµ¿ìÁî API] ¿ÜºÎ ÇÁ·Î±×·¥À» ÃÖ»óÀ§·Î ¼³Á¤ÇÏ±â  ±è¿µ´ë 2003/03/06 5354 1245
596   [ÀϹÝ/ÄÄÆ÷³ÍÆ®] TObjectÀÇ ÇÁ·ÎÆÛƼ¸¦ ¹®ÀÚ¿­·Î ÂüÁ¶ÇÏ±â  ±è¿µ´ë 2003/03/06 5284 1603
595   [À©µµ¿ìÁî API] ÇÁ·Î±×·¥À¸·Î Screensaver µî·ÏÇÏ´Â µÎ°¡Áö ¹æ¹ý  ±è¿µ´ë 2003/03/06 4589 1283
594   [µ¥ÀÌÅͺ£À̽º] ƯÁ¤ ÆûÀÇ ÇöÀç ÆíÁýÁßÀÎ DB Field ±¸ÇÏ±â  ±è¿µ´ë 2003/03/06 4147 1120
593   [À©µµ¿ìÁî API] KeyDownÀÇ BeepÀ½À» ¾ø¾ÖÀÚ...  ±è¿µ´ë 2003/03/06 4806 1234
592   [½Ã½ºÅÛ] How do I use SetWindowsHookEx ?  ±è¿µ´ë 2003/03/06 7053 977
591   [½Ã½ºÅÛ] Redirecting DOS Application Output  ±è¿µ´ë 2003/03/06 4832 1230
590   [ÀϹÝ/ÄÄÆ÷³ÍÆ®] µÎ°³ÀÇ RichEdit »çÀÌ¿¡ ³»¿ë º¹»çÇÏ±â  ±è¿µ´ë 2003/03/06 6016 1401
589   [ÀϹÝ/ÄÄÆ÷³ÍÆ®] ƯÁ¤ ColorÀÇ Invert Color ±¸ÇÏ±â  ±è¿µ´ë 2003/03/06 4377 1324
  [ÀϹÝ/ÄÄÆ÷³ÍÆ®] ¹®ÀÚ¿­ ¼ö½Ä¹®Àå(expression)ÀÇ °á°ú ±¸ÇÏ±â  ±è¿µ´ë 2003/03/06 3542 901
587   [½Ã½ºÅÛ] ¿Àµð¿À CDÀÇ º¼·ý Á¶ÀýÇÏ±â  ±è¿µ´ë 2003/03/06 3745 1034
586   [ÀϹÝ/ÄÄÆ÷³ÍÆ®] À©µµ¿ìÁî "³¯Â¥/½Ã°£" ¼³Á¤È­¸é ¶ç¿ì±â  ±è¿µ´ë 2003/03/06 6263 1833
585   [½Ã½ºÅÛ] ¸¶ÀÌÅ© º¼·ý Á¶ÀýÇÏ±â  ±è¿µ´ë 2003/03/06 4753 1296
584   [¸ÖƼ¹Ìµð¾î] JPEG, WAVE ¸¦ resource ÆÄÀÏ¿¡ ³Ö°í Àоî¿À±â  ±è¿µ´ë 2003/03/06 5462 1240
583   [ÀϹÝ/ÄÄÆ÷³ÍÆ®] desktop ¹è°æÈ­¸éÀ» ÆûÀÇ ¹è°æÈ­¸éÀ¸·Î ±×¸®±â  ±è¿µ´ë 2003/03/06 3786 1044
582   [À©µµ¿ìÁî API] ·¹Áö½ºÆ®¸®ÀÇ º¯°æ¿©ºÎ ¾Ë¸®´Â 2°¡Áö ¹æ¹ý  ±è¿µ´ë 2003/03/06 4845 1300
581   [ÀϹÝ/ÄÄÆ÷³ÍÆ®] StringGrid ÀÇ ³»¿ëÀ» Ŭ¸³º¸µå·Î º¹»çÇÏ±â  ±è¿µ´ë 2003/03/06 4563 1065
580   [µ¥ÀÌÅͺ£À̽º] Save DBGrid To Excel  ±è¿µ´ë 2003/03/06 7268 2048
579   [COM/OLE] DelphiÀÇ OCX¸¦ InstallShield·Î ¹èÆ÷ÇÏ´Â ¹æ¹ý  ±è¿µ´ë 2003/03/06 8493 5665
578   [ÀϹÝ/ÄÄÆ÷³ÍÆ®] ASCII printing  ±è¿µ´ë 2003/03/06 5423 6326
577   [ÀϹÝ/ÄÄÆ÷³ÍÆ®] OEM conversion  ±è¿µ´ë 2003/03/06 4393 1267
576   [ÀϹÝ/ÄÄÆ÷³ÍÆ®] MemoÀÇ ÇàÀÇ ¹®ÀÚ¼ö¸¦ Á¦ÇÑÇϰí WordWrap½ÃŰ±â  ±è¿µ´ë 2003/03/06 5347 1320
575   [À©µµ¿ìÁî API] DDE ¾²Áö ¾Ê°í IEÀÇ ÇöÀç URL °¡Á®¿À±â  ±è¿µ´ë 2003/03/06 6070 1691
574   [À©µµ¿ìÁî API] RichEdit¿¡ ÀÔ·ÂÇÑ ¹®ÀåÀÇ ½ÇÁ¦ ³ôÀÌ ±¸ÇÏ±â  ±è¿µ´ë 2003/03/06 5135 1434
573   [ÀϹÝ/ÄÄÆ÷³ÍÆ®] StringGrid ÀÇ ¼±Åÿµ¿ª¸¸ Ŭ¸³º¸µå·Î º¹»çÇÏ±â  ±è¿µ´ë 2003/03/06 4996 1114
572   [ÀϹÝ/ÄÄÆ÷³ÍÆ®] StringGrid ¿¡¼­ ÇÁ·Î±×·¥À¸·Î MultiSelect ½ÃŰ±â  ±è¿µ´ë 2003/03/06 5655 1200

[1][2][3][4][5][6][7][8][9] 10 ..[25] [´ÙÀ½ 10°³]
 

Copyright 1999-2023 Zeroboard / skin by zero