


























제
1장
프로그래밍
언어
소개
1.1 프로그래밍
언어란
무엇인가
1.2 프로그래밍
언어를
배워야
하는
이유
1.3 프로그래밍
언어에서의
추상화
1.4 계산
전형
1.1 프로그래밍
언어란
무엇인가
프로그래밍
언어
정의
(1)
기계가읽을
수
있고
사람이읽을
수
있는
형식으로
계산을
기술하는
표현
체계
A notational system for describing computation in
machine -readable and human -readable form
프로그래밍
언어
정의
(2)
계산
처리과정을
컴퓨터가
해독할
수
있는
방법으로
표현하는
체계적인
표기법
프로그래밍
언어
정의
(3)
Any notation for the description of algorithms
and data structures
1.2 프로그래밍
언어를
배워야
하는
이유
현재
사용하는
언어를
더욱
더
잘
이해하게
된다
.
예) Recursion( 재귀호출
, 되부름
)
-자기
자신을
부르는
루틴
효율적인
알고리즘
실행시간이
길다
FOTRAN, COBOL : 실행
안됨
(FOTRAN I, II, IV, 77)
PASCAL, C : 실행
가능
Example 1.1 FORTRAN90
! This is Recursive function in Fortran90
PROGRAM recursive_example
INTEGER acc, fact
fact = 10
acc = exp_(fact)
CONTAINS
RECURSIVE FUNCTION exp_(n) RESULT(result)
INTEGER result, n
IF(n.EQ.0) THEN
result = 1
ELSE
result = 2*exp_(n-1)
PRINT *, " 2 ^", n, "=", result
END IF
END FUNCTION exp_
END PROGRAM recursive_example
Example 1.2 PASCAL
PROGRAM POWERLIST(OUTPUT);
VAR
Y, Z:REAL;
K:INTEGER;
FUNTION POWER(X:REAL; N:INTEGER):REAL;
BEGIN
WRITELN(‘ ‘:3,’POWERSIZE WITH N=‘,N:2);
IF N=0;
THEN POWER:=1.0
ELSE POWER:=X*POWER(X,N-1);
WRITELN(‘ ‘:3,’END POWER OF N=‘, N:2)
END (* OF FUNTION POWER *);
Example 1.2 PASCAL (continued)
BEGIN (*MAIN PROGRAM *)
Y:=2.0;
K:=3;
Z:=POWER(Y,K);
WRITELN;
WRITELN(Y:=4:1,’ RISED TO THE POWER’,K:1,
‘ EQUAL’, Z)
END (* OF MAIN PROGRAM *);
Example 1.2 PASCAL (Result)
POWERSIZE WITH N= 3
POWERSIZE WITH N= 2
POWERSIZE WITH N= 1
POWERSIZE WITH N= 0
END POWER OF N= 0
END POWER OF N= 1
END POWER OF N= 2
END POWER OF N= 3
2.0 RISED TO THE POWER 3 EQUAL 8.00000E+00
Example 1.3 C
#include
main()
{
int m, k, c;
m = 2;
for (k =0; k <=10; k++) {
c = power(m, k);
printf("%d ^ %d = %d\n", m, k, c);
}
}
power(x, y)
int x, y;
{
return((y == 0) ? 1 : x * power(x, y -1));
}
2 ^ 0 = 1
2 ^ 1 = 2
2 ^ 2 = 4
2 ^ 3 = 8
2 ^ 4 = 16
2 ^ 5 = 32
2 ^ 6 = 64
2 ^ 7 = 128
2 ^ 8 = 256
2 ^ 9 = 512
2 ^ 10 = 1024
Result
#include
power(int, int);
void main()
{
int m, k,c;
m = 2;
for (k = 0; k <= 10; k++) {
c = power(m, k);
printf("%d ^ %d = %d\n", m, k, c);
}
}
power(int x,int y)
{
return((y == 0) ? 1 : x * power(x, y -1));
}
#include
float power(int, int);
void main()
{
int m, k;
float c;
m = 2;
for (k = 0; k <= 10; k++) {
c = power(m, k);
printf("%d ^ %d = %.1f\n", m, k, c);
}
}
float power(int x,int y)
{
return((y == 0) ? 1 : x * power(x, y -1));
}
Example 1.4 C++
#include
class Recursion
{
public:
Recursion () {}
~Recursion () {}
int power (int x, int y);
};
int Recursion::power(int x, int y)
{
return ((y == 0) ? 1 : x * power(x, y-1));
}
main (){
Recursion recur;
int m, k, c;
m =2;
for (k = 0; k <= 10; k++)
{
c = recur.power(m, k);
cout << m << "^" << k << " = " << c << '\n';
}
return 0;
}
Example 1.5 Java
public class Recursion {
public static void main (String args[]) {
int m, k,c;
m=2;
for (k=0 ; k <=10 ; k++) {
c = power (m, k);
System.out.println(" " + m + "^" + k + "=" + c);
}
}
public static int power ( int x, int y) {
return (( y == 0) ? 1 : x * power (x, y-1));
}
}
유용한
프로그램을
구사할
수
있는
능력을
증대
시킨다
.
예) Coroutine 개념을
사용
프로그램
언어를
선택할
수
있는
능력을
증대
시킨다
.
문자
처리
FORTRAN, COBOL 대신
SNOBOL4
예) X P : S(L1) F(L2)
새로운
프로그래밍
언어를
배우기
쉽게
해
준다
.
예) Fortran ⇒
Pascal ⇒
C ⇒
C++ ⇒
Java
새로운
프로그래밍
언어를
설계하기
쉽게
해
준다
.
예) JCL
Query Language
1.3 프로그래밍
언어에서의
추상화
추상화
(Abstraction) 의
개념
자신의
속성들의
일부분만을
가지고
주어진
작업이나
객체들을
필요한
정도로
묘사할
수
있는
방법을
지원
하는
것
범주
자료
추상화
: 자료의
특성
추상화
(문자열
, 수, tree)
제어
추상화
: 알고리즘
추상화
(반복문
, 조건문
, 프로시저
호출
)
추상화
정보량에
의한
분류
기본적
추상화
: 기계
정보
수집
구조화된
추상화
: 프로그램
구조에
대한
보다
전역적
정보
단위
추상화
: 단위
프로그램
전체에
대한
정보
자료
추상화
기본적
추상화
컴퓨터
내부
자료
표현
기억
장치의
장소
PASCAL
var x : integer;
var y : real;
C 언어
int x;
float y;
구조화된
추상화
관련된
자료의
집합을
추상화
(배열, 레코드)
PASCAL
type person =
record
name : nwords;
age : years;
address : awords;
telnumber : twords;
salary : integer;
end
var
X, Y : array[0..20] of real;
employee : person
단위
추상화
자료
캡슐화
, 추상화
Ada
package BSTREE is
type BSTREEPTR is private;
type BSTREE is private;
function HAS(I : ITEM, P:BSTREEPTR) return BOOLEAN;
procedure INSERT(I : ITEM, in out P : BSTREEPTR);
function EQUAL(P,Q:BSTREEPTR) return BOOLEAN;
private
type BSTREEPTR;
type BSTREE is;
record
DATE : ITEM;
LEFTCHILD : BSTREESPTR;
LIGHTCHILD : BSTREEPTR;
end record;
end record;
type BSTREEPTR is access BSTREE;
end;
제어
추상화
기본적
추상화
기계어
명령어
모양
,
이해하기
쉬운
추상
구문으로
만듬
x := x + y ;
구조화된
추상화
분할된
명령어
그룹
수행
Ada Java
if x > y then
begin
t := x;
x := y;
y := t;
end
else
begin
x := x + y;
end
if (x > y) {
t = x;
x = y;
y = t;
}
else {
x = x + y;
}
단위
추상화
Procedure 의
집합을
추상화
Modula-2 의module, Ada 의package
1.4 계산
전형
명령형언어
(Imperative Language)
Procedure Language
명령
순서대로
시행
프로시저
추상화
부프로그램의
사용
PROCEDURE gcd ( u, v : INTERGER; VAR x : INTERGER);
VAR y, t : INTEGER
BEGIN
x := u; y := v;
LOOP
IF y <= 0 THEN
EXIT
END
t := y;
y := x MOD y;
x := t;
END
END gcd
함수형언어
(Functional Language)
Application Language
함수의평가
및
호출
방법
예) Modular-2
PROCEDURE gcd(u, v : INTEGER) : INTEGER;
BEGIN
IF v= 0 THEN RETURN u;
ELSE RETURN gcd(v, u MOD v);
END
END gcd;
예) LISP
(define (gcd u v)
(if (= v 0) u(gcd v (remainder u v))))
함수형언어
(Functional Language)
예) Java
int gcd(int u, int v) {
if(v==0)
return u;
else
return gcd(v, u%v);
}
예) Prolog
gcd(U, V, U) :-v = 0.
gcd(U, V, X) :-v > 0,
Y is U mod V,
gcd(V, Y, X).
객체
지향
언어
(Object Oriented Language)
객체(object) 기본
Object 연산의
집합
예) Java
class GcdLcm { //클래스GcdLcm 선언public int gcd, lcm;
int x, y;
GcdLcm(int num1, int num2) {
x = num1;
y = num2;
gcd = gcdf(x,y);
}
int gcdf(int a, int b) {
if(b==0)
return a;
else
return gcdf(b, a % b);
}
}