다른 부분만 다루어 보겠다~(내가 귀찮아서 이러는게 아니다)
전체적인 구조
---------------------------------------------------------
unit 유닛이름;
interface (전역변수)
implementation (지역변수)
Initialization (생성자)
Finalization (파괴자)
end. (프로그램 끝)
- interface - 모든 프로그램 또는 다른 유닛에서도 함께 사용할 수 있다(전역변수)
- implementation - 선언된 현재 유닛에서만 사용이 가능하다.(지역변수)
- Initialization - 초기처리를 위한 공간. interface에 정의된 데이터 구조의 초기화 및 필요한 자원 할당을 위한 문장을 기술함(생성자)
- Finalization - Initialization에서 할당된 프로그램에서 사용했던 자원을 되돌리는 문장을 기술함 (파괴자)
초간단 문법 설명!!
주석은 //, {}, (**) 를 사용한다.
; 는 코드 한줄의 끝
. 은 프로그램의 끝 (가장 끝에 end.라고 되어 있다.)
begin end; 는 한 쌍으로 사용한다.(c언어에서 {}에 해당한다. - 열라 귀찮게 ㅡㅡ)
:= 오른쪽에 있는 어떤 값을 왼쪽에 저장할 때 사용(a := Integer)
변수 선언 방법
var
x, y : integer; //같은 형이면 ,로 쓸수 있다.
p : ^integer; //^는 포인터의 주소가 가르키는 값이다.
begin
x := 17;
y := 0;
p := @x; //@연산자는 포인터 변수에게 주소를 넘기는 연산자(x의 주소를 알려달랑께)
y := p^; //^포인터의 주소가 가르키는 값(p의 주소 안에 있는 값을 내놓으랑께)
end;
---------------------------------------------------------------
배열 선언
예)
배열명 = array[배열요소수, 배열요소수] of 자료형;
예제)
unit 유닛명;
interface
//0~2까지의 공간을 가지는 정적인 배열을 지정
type
Country = array[0..2] of string;
var
i:integer;
s:string;
Countries : Country;
implementation
initialization
//할당된 정적 배열 Countries에 초기값을 할당
begin
Countries[0] := 'Korea';
Countries[1] := 'Japan';
Countries[2] := 'Etc';
end;
end.
---------------------------------------------------------------
레코드 형 선언(구조체)
- 다양한 자료형을 연속된 기억 공간에 보관
- 모든 레코드 요소는 다른 자료형을 가질수 있음
- 크기가 서로 다른 자료형의 레코드 멤버가 연속된 기억 공간을 사용
레코드 형 = Record
필드명 : 자료형;
필드명 : 자료형;
end;
-----------------------------------------------------------------
프로시저
- 프로그램을 기능별로 분리하여 코딩을 더욱 간편하게 함
- 프로시저 선언이란 유닛의 Type 부분에 프로시저 원형을 적어주는 것
- 프로시저 선언은 유닛의 interface 부분에 선언
예제)
procedure clear (var A : array of Double);
var
i : Integer;
begin
for i := 0 to High(A) do A[i] := 0;
end;
-----------------------------------------------------------------
함수
- 리터럴(C언어의 return)값을 반환한다는 점을 제외하면 기본적으로 프로시저와 같음
- 함수도 프로시저와 마찬가지로 먼저 선언해야함
- Function 예약어 사용
- 반환값은 지시어 Result를 사용하여 반환
const
상수명 = 리터럴값;
var
변수명 : 자료형;
begin
statement1;
statement2;
end;
예제)
function Add(x,y: integer):integer;
begin
Result := x + y;
end;
-----------------------------------------------------------------
매개변수 전달 방식
1. Call by Value
변수를 값으로 전달하는 방식. 컴파일러는 값을 복사하여 원래의 값이 아닌 복사한 값을 전달 함 루틴 안에서 변수값을 변경할 수 있음
procedure Add(x,y : integer);
2. Call by Reference
변수의 메모리 위치를 프로시저에 전달하는 방식으로, 프로시저는 해당 메모리 위치의 내용을 변경할 수 있음.
procedure Add(Var Rec:String);
3. Call by Const
상수로 매개변수를 전달하는 방식으로 프로시저 내에서 변수 값은 변경할 수 없고, 참조만 가능
procedure Add(Const x,y : integer);
4. 출력 파라미터
Out 파라미터는 참조에 의해 전달되는 방식. Out 파라미터는 출력용으로만 사용.
procedure Add(Out a : String);
---------------------------------------------------------------------
Overload 루틴
- 하나의 유닛에는 같은 이름의 함수나 프로시저를 선언할 수 없음
- Overload를 사용하면 동일한 범위에서 같은 이름으로 하나 이상의 프로시저와 함수를 선언할 수 있음
- 호출 시 파라미터 리스트의 차이에 의해서 구분 됨
Function divide(x,y : Real) : Real; Overload;
---------------------------------------------------------------------
연산자
연산자는 c와 거의 비슷하다. 틀린 것만 쓰겠다.
초 간단하게 문법을 대충 봤다(너무 대충이라도 나만 알면 장땡 ㅡ.ㅡ)
내일은 본격적으로 프로그램을 만들어 볼꺼다.
근데 프로그램 만들면 어찌 여기에 올리지 ㅡㅡ??
연산자
연산자는 c와 거의 비슷하다. 틀린 것만 쓰겠다.
- Div 는 정수형 나눗셈(어차피 /가 정수, 실수를 나눌 수 있으니 /쓰자 -_-)
- Mod 는 나머지 값(C에서 %와 같다)
- Shl 은 왼쪽으로 비트 이동
- Shr 은 오른쪽으로 비트 이동
- @ 연산자는 변수, 프로시저, 함수 또는 메소드의 주소를 계산하기 위해 사용
- <> 는 같지 않다. (C는 != )
초 간단하게 문법을 대충 봤다(너무 대충이라도 나만 알면 장땡 ㅡ.ㅡ)
내일은 본격적으로 프로그램을 만들어 볼꺼다.
근데 프로그램 만들면 어찌 여기에 올리지 ㅡㅡ??
댓글 없음:
댓글 쓰기