델파이 기본

2008. 10. 20. 16:58Delphi


2장. 프로그래밍 기본 요소

      1. 기본 자료형

    구분

    자료형

    크기

    범위

    정수형

    Shortint

    1

    -128 ~127

    Integer

    2

    -32768~32767

    LongInt

    4

    -2147483648~2147483647

    Byte

    1

    0~255

    Word

    2

    0~65535

    실수형

    Real

    6

    2.9*10E-39~1.7*10E38

    Single

    4

    1.5*10E-45~3.4*10E38

    Double

    8

    5.0*10E-324~1.7*10E308

    Extended

    10

    3.4*10E-4932~1.1*10E4932

    Comp

    8

    -2*10E63+1~2*10E63-1

    Currency

    8

    -922337203685477.5808~
       922337203685477.5807

       

      예제)


      var
      IntVariable:integer;
       

 

          참고사항)
         ㄱ)주석문 

      시작기호

      끝기호

      설명

      {

      }

      {}기호 사이의 모든 내용은 컴파일되지 않습니다.

      (*

      *)

      {}기호 사이의 모든 내용은 컴파일되지 않습니다.

      //

       

      한 줄이 주석문으로 처리되어 컴파일되지 않습니다.

     

         ㄴ) ; (세미콜론) 

      한줄이 끝났음을 알려주는 기호입니다.코드가 길어질 때 여러 라인에 걸쳐서 작성할 수 있도록 해줍니다. 단순문을 구분합니다.

         ㄷ) .(점)

           유닛 혹은 프로그램의 끝이란 것을 표시하기 위해서 사용됩니다.

         ㄹ)begin..end;

           코드의 한 단위를 싸서 다른 단위와 구분하기 위해서 사용합니다. 즉 복합문을 한 블록으로 싸기 위한 것입니다.


        예제)  

     if x=7 then
       begin
        Showmessage(‘x의 값을 0으로 변경합니다.’);
        x:=15       //End 앞에서는 ;(세미콜론) 없어도 무방합니다.
      end;          //End 뒤에는 꼭 세미콜론을 써야 합니다.

        

        자주 사용되는 루틴1)

    함수

    설명

    예제

    Low(X)

    X의 범위중 가장 최소값을 리턴합니다.


    var
      List1:array[0..3] of Double; //배열
      X:Word;

    begin
      for X:=Low(List1) to Hight(List1) do
      List1[X]:=X*3.4;
    end;

    High(X)

    X의 범위중 가장 최대값을 리턴합니다.

    Ord(X)

    X의 서수값을 리턴합니다.


    type
    Colors=(RED,GREEN,BLUE);
    var
    S:string;
    Begin
    S:='BLUE의 서수값은' + intToStr(Ord(BLUE)) + '입니다.' + #13#10;
    S:='"c"의 아스키값은'+IntToStr(Ord('c'));
    End;

    Pred(X)

    이전값을 리턴합니다.
    x-1과 같습니다.

     

    Succ(X)

    다음값을 리턴합니다.
    X+1과 같습니다.

     

    Dec(X)

    x값을 하나 감소시킵니다.

     

    Inc(X)

    x값을 하나 증가시킵니다.

     

    Abs(X)

    x의 절대값을 리턴합니다.
    x는 integer 혹은 real 타입입니다.

     I=Abs(-2.3); {I=2.3}

     

    ArcTan(X)

    X의 arctan값을 리턴합니다.

     

    Cos(X)

    X 의 코사인 값을 리턴합니다.

     

    Exp(X)

    x의 지수값을 리턴합니다.

    var S:string;

    begin
      S:='e='+FloatToStr(Exp(1.0));
      Canvas.TextOut(10,10,S);
    end;
     

    Frac(X)

    x의 소수점 이하 부분을 리턴합니다.


    var R:Real;

    begin
      R:=Frac(123.456); {0.456}
      R:=Frac(-123.456); {-0.456}
    end;

    Int(X)

    실수 x의 정수부분을 리턴합니다.

    var R:Real;

    begin
      R:=Int(123.456); {123.0}
      R:=Int(-123.456); {-123.0}
    end;
     

    Ln(X)

    x의 자연로그 값을 리턴합니다.

    var
      E:real;
      S:string;

    begin
      E:=exp(1.0);
      Str(ln(e):3:2,s);
      S:= 'ln(e)='+S;
      Canvas.TextOut(10,10,S);
    end;

    Pi

    3.1415926...

     

    Round(X)

    x의 반올림 혹은 반내림값을 리턴합니다.

     Label1.caption:=FloatToStr(1.6);

    Sin(X)

    x의 사인값을 리턴합니다.

     

    Sqr(X)

    x의 제곱값을 리턴합니다.

     

    Sqrt(X)

    X의 제곱근값을 리턴합니다.

     

    Trunc(X)

    실수형 x의 값에 대해서 소수점 부분을 잘라내고 정수부분만 리턴합니다.

     

     

    자주 사용되는 루틴2)

    함수

    기능설명

    예제

    concat(s1,s2,s3)

    문자열들을 순서대로 합쳐서 리턴합니다.

    s:=concat('Hot','Dog');

    CompareStr(s1,s2)

    대소문자를 구분해서 스트링을 비교합니다.

    var
      string1,string2:string;
      i=integer;

    begin
      string1:='string';
      string2:='String';
      i:=CompareStr(string1,string2);
      if i<0 then
        ShowMessage('스트링 값이 서로 틀립니다.');
    end;
     

    CompareText(s1,s2)

    서수값에 의해 스트링을 비교하여 대소문자를 구분하지 않습니다.

    var
      str1,str2:string;
      i: integer;

    begin
      str1:='AAA';
      str2:='aaa';
      i:=CompareText(str1,str2);
      if i<0 then
        ShowMessage('스트링 값이 틀립니다.')
    end;

    Copy(s,pos,len)

    문자열 s에서 pos위치부터 시작해서 len길이 만큼 리턴합니다.

     
    s:='123456';
    s:=Copy(S,2,3); {'234'}
    s:=Delete(S,2,3); {'156'}
     

    Delete(s,pos,len)

    문자열 s에서 pos위치부터 시작해서 len길이 만큼 지웁니다.

    FmtStr

    형식화된 스트링을 모읍니다.

     

    Format

    스트링을 형식화합니다.

     

    Insert(src,tgt,pos)

    문자열 tgt의 pos위치에서부터 문자열 src를 삽입합니다.

    s:='8931387';
    Insert('-',S,4); {'893-1387'}

    Length(s)

    문자열 s의 길이를 리턴합니다.

     

    LowerCase(s)

    문자열 s를 소문자로 바꿔줍니다.

     

    Pos(substring,s)

    문자열 s에서 substring을 찾아 시작되는 첫 위치값을 리턴합니다.

    s:='   123.4';

    while Pos(' ',s)>0 do

    S[Pos(' ',s)]:='0';{공백을 0으로 바꾸기}

    SetLength(s,newlen)

    동적으로 문자열s의 길이를 다시 지정합니다.

     

    Str(x,s)

    정수타입을 문자열 변수로 변환합니다.

    var
       S:string[11];

    begin
       Str(-555,s);
    End;

    StringOfChar(S,n)

    문자S를 주어진 n만큼 리턴합니다.

    S:=StringOfChar('ABC',3);

    StrPas

    널종료 스트링을 파스칼 스트링으로 변환합니다.

    C나 C++와의 호환성 때문에 문자열 끝에 #0혹null을 붙여줍니다.

    StrUpper

    문자열을 대문자로 변환합니다.

     

    StrLower

    문자열을 소문자로 변환합니다.

     

    UpperCase

    A부터z까지의 아스키 소문자를 대문자로 전환합니다.

     

    Val(s,v,code)

    문자열을 대응되는 숫자로 전환합니다.


    var
      I,code:integer;
    begin
      val(Edit1.text,I,code);
      if code<>0 then
        MessageDlg('Error at position: '
            + inttostr (code) , mtWarning,
            [mbOk],0);
      else
        Showmessage('value='+inttostr(I));
    end;
     

       

    2. 구조화된 자료형
    1) 배열

      type
      TTable=array[0..2, 0..2] of Double; //Double형의 2차원 배열을 선언

      var
       MyTable:Ttable;
       Col,Row:Integer;
      begin
        for Col:= 0 to 2 do
          for Row:=0 to 2 do
            MyTable[Col, Row] := 0;  {0,0,0,
                                                   0,0,0,
                                                   0,0,0}
      end;

     

    2) set
      동일한 타입의 여러 요소들이 모여 있는 집합?입니다.
      integer,Boolean,Char,열거형, subrange 형만 가능합니다.


      Procedure Tform1.Button1Click(Sender: Tobject);

      type
       Tvowels = set of Char;

      var
       Vowels:Tvowels;

      begin
        Vowels := [‘A’,’E’,’I’,’O’,’U’];
        if Edit1.text[1] in Vowels then
            Label2.Caption:=’모음입니다.’
        else
            Label2.Caption:=’모음이 아닙니다.’;
      end;
       

     

    3) Record
    다음 예제를 보시면 쉽게 이해될 것입니다.
    DB 테이블의 레코드라고 이해하시면 될 것 같습니다.


      type
       Trec=record  //Trec라는 이름으로 레코드를 선언.
          Name:string[15];
          BirthYear:1980..1985;
      end;

      var
      Hoon, hyun :Trec;  //레코드 타입의 변수 선언

      begin
       Hoon.Name:=’정훈’;
       Hoon.BirthYear:=1983;
       Hyun.Name:=’현’;
       Hyun.BirthYear:=1984;
      end;

     


    3. 기타 자료형
    1) Variant(가변형)
    자료형을 명확히 설정되지 않을 때 사용합니다.
    다음 예를 보세요.

      var
        V1,V2,V3:Variant;
      begin
        V1=1;
        V2=’1’;
        V3=V1+V2;    {V3=2}
      end;

     


    2) 사용자 정의 자료형
    a) 열거형


      type
       Tdays=(Mon,Tue,Wed,Thu,Fri,Sat,Sun);
      var
        DayOfWeek: Tdays;

      Procedure Tform1.Button1Click(Sender: Tobject);
      begin
        DayOfWeek:=Mon;
      end;
       


    b) subrange타입


      Procedure Tform1.Button1Click(Sender:Tobject);
      type
        TvalidEntry = 1..100;
      var
        Entry: TvalidEntry;
      begin
        Entry:=StrToInt(Edit1.Text);
        Label2.Caption := ‘Excellent!’;
      end;
       

     

    3) procedural 타입
    a) procedural 타입이란?
    procedural타입은 프로시저와 함수를 변수에 할당될 수 있고 파라미터로서 넘겨질 수 있는 객체로 취급할 수 있게 해주는 타입입니다. 전역프로시저 포인터와 매소드 포인터 두 범주가 있습니다. 전역 프로시저 포인터는 Object절 없이 선언된 procedural타입입니다. 전역 프로시저 타입은 전역 프로시저 혹은 함수를 참조할 수 있고 전역 프로시저 혹은 함수의 주소 값을 저장하고 있는 포인터입니다. 전역 프로시저 포인터의 예는 다음과 같습니다.


      type
       TProcedure = procedure;
       TStrProc = procedure(const S: string);
       TMathFunc = function(X: Double):Double;
       

     

    메소드 포인터는 Object 절을 사용해서 선언된 procedural타입입니다. 메소드 포인터는 한 객체의 메소드(프로시저 혹은 함수)를 참조할 수 있고 두 개의 포인터로서 엔코딩됩니다. 첫 포인터는 메소드의 주소 값을 저장하고 두번째 포인터는 메소드가 속한 객체에 대한 참조를 저장합니다.


      type
       TMethod = procedure of Object;
       TNotifyEvent = procedure(Sender: Tobject) of object;
       

     


    b) Procedural 값
    Nil, procedural 타입에 대한 변수 참조, 전역 프로시저 혹은 함수 식별자(identifier), 메소드 지정자.
     예를 들면,


      type
        TmainForm = class(Tform)
      Procedure ButtonClick(Sender: Tobject);

      end;

      var
       MainForm: TmainForm;
       MathFunc: TmathFunc;
       OnClick: TnotifyEvent;

      Function Tan(Angle: Double):Double;
      begin
        Result := Sin(Angle) / Cos(Angle);
      end;
       

     

    변수 MathFunc 와 Onclick 은 다음과 같이 값을 할당할 수 있습니다.

      MathFunc := Tan;
      Onclick:= MainForm.ButtonClick;

    그리고 다음과 같이 호출될 수 있습니다.

      X:= MathFunc(X);     {X:=tan(X)와 동일}
      OnClick(Self);        {MainForm.ButtonClick(Self)와 동일}

    값이 할당되었는지를 알아보기 위해서는 Assigned 함수를 사용합니다.

    4) 변수의 종류와 범위

    전역변수

    지역변수


      …
     {$R *.DFM}

     var
       Count: Integer; //전역변수 선언

     Implementation
      …
     Procedure  Tform1.Button1Click(Sender:Tobject);

     


     Procedure  Tform1.Button1Click                    (Sender: Tobject);
      var
         I,J,Count: integer; //지역변수 선언
      begin
         Count:=0;
         I:=strtoint(Edit1.text);
         J:=strtoint(Edit2.text);
         Count:=Count+1;
          …
      end;

     

 

     

    5) Type Cast(형변환)

    루틴

    설명

     CurrToStr

     Currency 값을 스트링으로 변환해서 리턴합니다.

     FloatToDecimal 

     실수형 값을 Decimal값으로 변환합니다.

     FloatToStr

     실수형 값을 스트링형으로 변환합니다.

     IntToStr 

     정수형을 스트링으로 변환합니다.

     StringToWideChar  

     Ansi스트링을 유니 스트링으로 변환합니다.

     StrToCurr    

     스트링을 Currency 값으로 변환합니다.

     StrToFloat 

     스트링값을 실수형으로 변환합니다.

     StrToInt

     스트링값을 정수형으로 변환합니다.

     

    4. 연산자

      1) 대입연산자
         := (..의 값은 ..이다.)
         = (같다.)

      2) 산술연산자
     

    연산자

    연산

    연산항의 데이터 타입

    연산결과

    +

    더하기

     

     

    -

    빼기

     

     

    *

    곱하기

     

     

    /

    나누기

    integer/integer

    Real (에러조심)

    Div

     

     

    Mod

    나머지

     

     


    3) 관계연산자

    연산자

    연산

    =

    같다.

    <>

    같지 않다.

    <

    작다

    >

    크다

    <=

    작거나 같다

    >=

    크거나 같다


    4) 논리연산자

    연산자

    설명

    Not

    아니다(부정)

    And

    그리고(둘다)

    Or

    이거나(둘중에 아무거나)

    Xor

    양쪽이 같으면 거짓, 다르면 참.

     

    5) is 와 as

    구분

    is

    as

    쓰임

    동적으로 형을 확인 (true|false 리턴)

    형을 변환(형을 리턴)

    예제


      if Sender is TmenuItem then
       ( Sender an TmenuItem).caption:=’….’;

       

     

    5. 날짜와 시간처리
    델파이는 날짜와 시간값을 저장하는데 TdateTime 자료형을 제공합니다. 도움말을 참조하십시오.

    6. 상수 

    선언

    예제

     Const
     [상수 이름]=[값];     





     


      Interface
      Const
      GENERAL_RATE=0.3;

      type

      A:=100000* GENERAL_RATE
       

     출처 : http://www.webax.kr/bbs/index.php?bbsMode=view&id=12&page=4&code=tech_pds