1주 : 강의 소개

Download Report

Transcript 1주 : 강의 소개

강사소개
• 강사: 유원경
–
수정관A동 421호 (920-7177)
• 강의사이트:
– http://cs.sungshin.ac.kr/~wyoo/lec_programming1.html
• 조교선생님: 최윤정 [email protected] (920-7525)
• 메일보내는 규칙: 제목에 반드시
프로그래밍 학번 이름을 쓰시오
ex) 프로그래밍
201234500 홍길동 과제1
1
1장. 컴퓨터, 프로그램 및
C++ 입문
2
강의목표
•
•
•
•
•
•
•
•
•
컴퓨터 기초, 프로그램, 운영체제 개념(1.2-1.4)
(선택)2진수, 10진수, 16진수 수의 표현(1.5)
C++ 역사(1.6)
C++ 프로그램 작성 방법(1.7)
C++ 프로그램 개발주기 이해(1.8)
(선택)Visual C++로 프로그램 작성(1.9)
(선택)Dev-C++로 프로그램 작성(1.10)
(선택)윈도우 명령라인에서 컴파일하기(1.11)
(선택)Unix 명령라인에서 컴파일하기(1.12)
3
컴퓨터 구성
•컴퓨터는 다음의 주요한 하드웨어 컴포넌트로 구성되어
있다.
•중앙처리장치(CPU), 메모리(주 메모리),
저장장치(하드디스크, CD, 테이프), 입출력장치(모니터,
키보드, 마우스, 프린터)- 통신장치(모뎀 및 네트워크
카드(NIC))
Bus
Storage
Devices
e.g., Disk, CD,
and Tape
Memory
CPU
Communication
Devices
Input
Devices
Output
Devices
e.g., Modem,
and NIC
e.g., Keyboard,
Mouse
e.g., Monitor,
Printer
4
CPU
중앙처리장치(CPU)는 컴퓨터의 중추로서 메모리에서 명령을
읽어오고 실행하는 역할을 담당한다. CPU는 2개의 요소로
구성되는데 제어부(control unit)와 산술논리부(arithmetic/logic
unit)이다. 컴퓨터의 클럭 속도는 보통 MHz(100만 Hz)이며
CPU의 속도는 지속적으로 증가되어 왔다. 최근의 PC들은 Intel
Core2 Duo 프로세서를 탑재하고 3GHz(1GHz는 1,000MHz임)
이상의 속도를 내고 있다.
Bus
Storage
Devices
e.g., Disk, CD,
and Tape
Memory
CPU
Communication
Devices
Input
Devices
Output
Devices
e.g., Modem,
and NIC
e.g., Keyboard,
Mouse
e.g., Monitor,
Printer
5
Memory
•메모리에는 데이터와 프로그램 명령들이 CPU에서 실행될 수
있도록 저장되어 있다. 메모리 단위는 바이트로 8비트 묶음을
의미한다.
•사용되기 전에 프로그램과 데이터는 메모리로 로드되어야
한다. 메모리는 완전히 비어있다기 보다는 무엇인가 기록되어
있다고 볼 수 있으며, 초기화되지 않은 값이 메모리에 있다면
프로그램에서 사용할 수 있는 의미 있는 값은 아니며, 새로운
의미 있는 정보가 메모리에 쓰이게 되면 이전의 값은 사라진다.
Bus
Storage
Devices
e.g., Disk, CD,
and Tape
Memory
CPU
Communication
Devices
Input
Devices
Output
Devices
e.g., Modem,
and NIC
e.g., Keyboard,
Mouse
e.g., Monitor,
Printer
6
데이터 저장형태
컴퓨터는 이진 상태인 1과 0으로서
정보를 표현하는 기기이다.
여러 종류의 데이터, 숫자, 문자, 문자열 등
은 일련의 비트(바이너리 디지트:
0과 1)로 인코딩된다.
메모리에는 이러한 데이터와 프로그램 명
령들이 CPU에서 실행될 수 있도록 저장되
어 있다.
메모리 단위는 바이트로 8비트 묶음을
의미하며 순서대로 번지가 매겨진다.
프로그래머는 데이터의 인코딩, 디코딩에
신경 쓸 필요는 없다. 인코딩 규칙에 따라
시스템에서 자동으로 수행되기 때문이다.
인코딩 규칙은 다양한데, ASCII 인코딩의
경우 문자 ‘J’를 01001010 8비트(1바이트)
로 인코딩한다.
3과 같이 작은 숫자는 1바이트에 저장하고,
큰 수를 저장하고자 할 경우에는 인접한
여러 바이트를 사용하여 숫자를 저장하게
된다. 바이트는 최소 저장 단위이다.
Memory address
Memory content
.
.
.
.
.
.
2000
01001010
Encoding for character ‘J’
2001
01100001
Encoding for character ‘a’
2002
01110110
Encoding for character ‘v’
2003
01100001
Encoding for character ‘a’
2004
00000011
Encoding for number 3
7
•
bit : 0/1을 표현하는 최소정보단위
•
byte: 한문자를 표현하는 최소단위(8bits)
: 256 가지의 의미를 나타낼 수 있다.
ASCII 코드
– 미국 ANSI에서 제정한 문자 표준 코드
•
•
word: 특정 컴퓨터가 처리하는 정보단위
(보통 4 bytes 이지만 2bytes 혹은 8bytes 도 있다)
8
프로그램
프로그램은 소프트웨어를 의미하는 것이며 컴퓨터가
실행할 명령(instruction)을 의미한다.
사용자는 프로그램을 통해 컴퓨터가 처리할 작업을
지시하게 된다. 프로그램이 없다면 컴퓨터는 하나의
비어있는 기계 덩어리에 불과하다.
컴퓨터는 사람의 말을 이해할 수 없으므로, 컴퓨터 언
어를 사용하여 컴퓨터에 필요한 프로그램을 작성하는
것이 필요하다.
9
프로그래밍 언어
기계어
어셈블리언어
고급언어
기계어는 가장 원시적인 수준의 언어로 0과 1의
조합으로 구성된 언어이며 특정 플랫폼의
컴퓨터에 적합하게 작성되어 다른 타입의 컴퓨터
간에는 호환되지 못한다. 명령어도 바이너리 코드
형태로 되어 있으므로, 다양한 명령을 사용하려면
여러 바이너리 코드를 사용해야 한다. 기계어로
프로그램을 작성하는 것은 지루한 작업이며 읽고
수정하는 것도 쉽지 않다. 예로써 두 수를 더하는
경우 다음과 같은 명령을 작성하여야 한다.
1101101010011010
10
프로그래밍 언어
기계어
어셈블리언어
고급언어
어셈블리어(assembly language)는 저수준의 프로그래밍
언어로 기계어 명령을 대신하는 연상기호(mnemonic)를
사용한다. 예로써 두 수를 더하는 경우를 어셈블리어로
작성하면 다음과 같은 명령을 작성하여야 한다.
ADDF3 R1, R2, R3
Assembly Source File
…
ADDF3 R1, R2, R3
…
Machine Code File
Assembler
…
1101101010011010
…
11
프로그래밍 언어
기계어
어셈블리언어
고급언어
고급 언어(high-level language)는 영어 문장과 유사한
형태로 만들어져 있으므로 배우기 쉽고 프로그램
작성이 용이하다. 예를 들어 고급언어로 원의 반지름이
5인 원의 면적을 구하는 프로그램은 다음과 같이
작성하면 된다.
area = 5 * 5 * 3.1415;
12
인기 있는 고급언어
•
•
•
•
•
•
•
•
•
•
•
COBOL (Common Business Oriented Language)
FORTRAN (FORmula TRANslation)
BASIC (Beginner All-purpose Symbolic Instructional Code)
Pascal (Blaise Pascal이라고도 함)
Ada (Ada Lovelace이라고도 함)
Visual Basic (Microsoft에서 개발한 비주얼 베이직)
Delphi (Borland에서 개발한 Pascal 유사 언어)
C (B 언어를 토대로 만들어진 언어)
C++ (C 기반 객체지향 언어)
Java
C# (Microsoft에서 개발한 Java와 유사한 언어)
13
소스코드 컴파일
고급 언어로 작성된 프로그램을 소스 프로그램
(source program)이라고 한다. 컴퓨터는 소스 프로
그램을 바로 이해할 수 없기 때문에 컴파일러
(compiler)를 사용하여 기계어로 변환하는 과정을
거치게 된다. 기계어 프로그램은 라이브러리와 링크
되어 실행 파일을 만들게 된다.
Source File
Compiler
Object File
Linker
Excutable File
14
운영체제
운영체제(OS)는 컴퓨터에서
실행되는 가장 중요한 프로그램
으로 컴퓨터 시스템의 자원을
관리하고 프로그램을 관리하는
역할을 한다. 우리가 보통 사용
하는 운영체제는 윈도우 (NT,
2000, Me, XP, Vista)나 Mac OS
또는 Linux 운영체제 중의 하나
일 것이다.
윈도우는 현존하는 가장 인기
있는 운영체제이며, 웹 브라우
저, 워드 프로세서 같은 응용 프
로그램도 운영체제 없이는 실행
될 수 없다.
User
Application Programs
Operating System
Hardware
15
수 체계
NOTE: 이 절은 우선 넘어가고 다음에 2진수 체계나 16진수에
대한 궁금한 사항이 있을 때 찾아보는 형태로 활용해도 좋다.
binary
0, 1
octal
0, 1, 2, 3, 4, 5, 6, 7
decimal
0, 1, 2, 3, 4, 5, 6, 7, 8, 9
hexdecimal 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
16
수 체계
컴퓨터는 내부적으로 메모리나 디스크 같은 저장 장치에 0과
1을 저장할 수 있기 때문에 2진수 체계를 사용한다. 컴퓨터의
숫자나 문자는 0과 1로 구성된 열로 작성된다. 이때 0과 1
각각을 비트(bit)라고 한다. 2진수 체계는 두 개의 수, 즉 0과 1을
가지고 있는 것이다.
우리는 10진수 체계를 사용하므로 2진수는 쉽게 의미가 오지는
않는다. 프로그램에서 20을 작성하는 경우 10진수로 작성하게
되지만, 컴퓨터 소프트웨어에 의해 2진수로 변환되며, 컴퓨터
내부의 2진수도 변환에 의해 10진수로 표현된다.
17
수 체계, cont.
10진수의 숫자는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9이며 10진수는 이들
숫자로만 만들어진다. 숫자는 위치에 따라 숫자의 값도
달라진다. 숫자의 위치에 따른 값은 10의 멱승이 된다. 예를
들어, 십진수 7423에는 숫자 7, 4, 2, 3이 있는데 각기 7000, 400,
20, 3 값을 가진다.
7
4
2
3
103 102 101 100
 7  103  4  102  2  101  3  100
 7000  400  20  3  7423
10진수 체계 시스템은 10개의 수를 사용하며 각 자리는 10의
멱승의 값을 가진다. 여기에서 10은 밑수(base) 또는
기수(radix)가 된다. 따라서 2진수의 경우에는 2개의 수가
사용되므로 기수가 2가 되며, 16진수의 경우에는 16개의 수가
사용되므로 기수가 16이 된다.
18
수 체계, cont.
많은 경우 10진수 형태로 프로그램을 작성하게 되지만,
운영체제 같은 시스템 프로그래밍을 작성하는 경우에는 기계어
코드를 직접 작성하는 것도 필요하므로 2진수를 직접
사용하기도 한다. 2진수로 표현하면 길어지고 이해도 쉽지 않게
되므로 16진수(hexadecimal number)가 2진수를 간략히 표현하는
형태로 사용된다. 16진수는 이진 비트 4개로 표현되며, 16진수
체계는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F의 16개의 기호로
숫자를 표현한다. A, B, C, D, E, F 기호는 숫자 10에서부터
15까지를 의미한다.
19
Binary Numbers => Decimals
bnbn  1bn  2...b 2b1b0
2진수는
다음의 10진수와 같은 값을 가진다.
bn  2n  bn  1  2n1  bn  2  2n2  ...  b2  22  b1  21  b0  20
1  21  0
2진수 10은
2진수 1000은
이진수
10101011은
= 10진수 2이다.
1 23  0  22  0  2  0
= 10진수 8이다.
1 27  0  26  1 25  0  24  1 23  0  22  1 2  1
= 10진수
171이다.
20
Decimals => Binary
10진수 를 2진수로 변환하려면, bn, bn  1, bn  2,...,b2, b1, b0
값을 구하는 것이 필요하다. 다음과 같이 표현된다.
비트의
d  bn  2n  bn  1  2n1  bn  2  2n2  ...  b2  22  b1  21  b0  20
2진수를 구하는 방법은 10진수 를 2로 나누는데 몫이 0이 될 때 까지 계속
나누기를 한다. 이때 구해진 나머지가 b0, b1, b2,...,bn  2, bn  1, bn 이 된다.
예를 들어 10진수 123은 2진수로 1111011이다. 변환은 다음과 같다.
0
2
1
1
2
3
7
3
2
7
2
15
15
2
30
30
2
61
61
2
Quotient
123
0
2
6
14
30
60
122
1
1
1
1
0
1
1
b6
b5
b4
b3
b2
b1
b0
Remainder
21
Windows 계산기
공학용 윈도우 계산기로 수 변환 기능이 있다. 계산기
프로그램은 윈도우에서 [시작]-[프로그램][보조프로그램]에서 실행한다.
22
Hexadecimals => Decimals
16진수는 이진 비트 4개로 표현되며, 16진수 체계는 0, 1, 2, 3,
4, 5, 6, 7, 8, 9, A, B, C, D, E, F의 16개의 기호로 숫자를
표현한다. A, B, C, D, E, F 기호는 숫자 10에서부터 15까지를
의미한다. 16진수 hnhn  1hn  2...h 2 h1h0 는
다음의 10진수와 같다.
hn 16n  hn  1 16n1  hn  2 16n2  ... h2 162  h1 161  h0 160
16진수 7F
16진수 FFFF
7  16  15
1
= 10진수 127
15163  15162  1516  15 = 10진수 65535
23
Decimals => Hexadecimal
16진수 hn, hn  1, hn  2,...,h2, h1, h0 은 10진수로 다음과 같은 표현할
수 있다.
d  hn 16n  hn  1 16n 1  hn  2 16n  2  ...  h2 162  h1 161  h0 160
16진수를 구하는 방법은 10진수 를
16으로 나누어 몫이 0이 될 때까지
계속한다. 이때 구해진 나머지가
h0, h1, h2,...,hn  2, hn  1, hn 이 된다.
예를 들어 10진수 123은 16진수로
7B이다. 변환은 다음과 같다.
0
16
7
7
16
Quotient
123
0
112
7
11
h1
h0
Remainder
24
Hexadecimal  Binary
Binary Hex Decimal
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16진수를 2진수로 변환하기 위해서는
16진수의 각 자리를 4비트 2진수로 변환하면
된다.
2진수를 16진수로 변환하기 위해서는
오른쪽에서부터 왼쪽으로 2진수 4자리마다
잘라 16진수로 변환하면 된다.
1110001101
3
8
D
25
기본 진수(2, 8, 16진수)
• 2012= 2* 103 + 0* 102 + 1* 101 + 2* 100
•
(2012 )
10
= ( 3
7
3
4 )
8
= ( 11 111 011 100)
2
= ( 7
D
C)
16
2012를 위의 진법으로 쉽게 구하는 방법:
2012 /8= 251…4
251/8=31…3
31/8=3…7
26
C++의 역사
C, C++, Java, C#은 유사하며 서로 관련이 있는 언어이다. Java는 C++가
모델이 되었고, C#은 C++와 비슷하면서 Java 언어의 특징을 가지는
언어이다. 이들 중 한 언어를 알고 있으면 다른 언어를 배우기가 쉬워진다.
언어는 B 언어로부터 발전하였으며 B 언어는 BCPL 언어가 모태가 되었다.
BCPL은 1960년대 중반에 운영체제와 컴파일러 개발을 위해 마틴
리차드(Martin Richards)에 의해 개발되었으며 켄 톰슨(Ken Thompson)은
BCPL의 많은 특징을 수용하여 B언어를 만들게 되었다.
C++는 C의 확장으로 1983-1985년 동안에 벨 연구소의 비얀
스트로스트룹(Bjarne Stroustrup)에 의해 개발되었으며 C 언어에 여러
특징들이 더해졌다. 가장 중요한 특징은 객체지향 프로그래밍(object-oriented
programming)을 위한 클래스에 관한 내용이 추가된 것이다.
C++ 언어에 대한 국제 표준은 1998년 미국 ANSI(American National Standards
Institute)에 의해서 정해졌다.
27
간단한 C++ 프로그램
C++ 언어를 사용하여 화면에 “Welcome to C++!”이란 문자열을
출력하는 프로그램이다.
#include <iostream>
int main()
{
// Display Welcome to C++ to the console
std::cout << "Welcome to C++!" << std::endl;
return 0;
}
Welcome
Run
28
• 주석 (Comments)
– 소스에서 보이는 // 부분 이후나
/* … */ 사이에 있는 부분
– 프로그램 언어의 문법과는 관계없는 프로그램 설명 문장
/* 처음 예제
*/
• 전처리기 지시자(Preprocessor directives)
– #으로 시작하는 문장
– 컴파일 하기 전에 먼저 처리해야 할 일을 수행하도록
명령을 내리는 문장
– 문장 #include는 다음에 나오는 헤더 파일(header file)을
이 문장이 있는 부분에 삽입하는 역할을 수행
#include <헤더파일이름>
간단한 C++ 프로그램 확장
리스트 1.1의 프로그램은 한 줄의 메시지를 출력하였다. 일단 이 프로그램을
이해하고 나면 여러 줄을 출력하는 것은 어려운 일이 아니다. 리스트 1.2는
리스트 1.1을 수정하여 3줄을 출력하는 프로그램으로 수정하였다.
#include <iostream>
int main()
{
std::cout << "Welcome to C++!" << std::endl;
std::cout << "Welcome to C++Builder!" << std::endl;
std::cout << "Welcome to C++ Compiler!" << std::endl;
return 0;
}
Welcome
Run
30
Create/Modify Source Code
Source code (developed by the programmer)
프로그램 작성,
컴파일, 실행
#include <iostream>
int main()
{
// Display Welcome to C++ to the console
std::cout << "Welcome to C++!" << std::endl;
return 0;
}
Saved on the disk
Source Code
Compiler
If compilation errors
stored on the disk
An object file (e.g., Welcome.obj) is created.
Machine Code
program
Linker
stored on the disk
An executable file (e.g., Welcome.exe) is created.
Executable Code
Run Executable Code
e.g., Welcome
Result
If runtime errors or incorrect result
31
프로그램 개발 과정
• 링커(linker)
– 이러한 여러 개의 목적 파일들을 라이브러리 함수와 연결해서
하나의 파일인 실행파일을 생성하는 작업을 수행
• 로더(loader)
– 작성된 프로그램을 컴퓨터의 주기억장치에 로드(load)함으로써
프로그램을 실행 가능하게 하는 역할을 수행
공부하는 방법
 'C:\user_id\examples' 폴더에 프로그램을
작성하고,
필요한 경우 usb memory 나 e-mail로
다른 사이트에 프로그램을 보관
새로운 프로그램 만들기(dev-c++)
• http://www.bloodshed.net/dev/devcpp.html
1.
2.
3.
4.
5.
6.
7.
Dev-c++를 시작합니다.
File/New/Source file 메뉴를 선택합니다.
untitled 파일이 표시=> 코드 작성
file/ save 선택하여 파일 이름 입력하여 저장
Execute/compile 선택
Run:
system(“PAUSE”) ; 코드 추가
새로운 프로그램 만들기(visual c++)
• 첫번째 단계: 새로운 프로젝트 만들기
1.
2.
3.
4.
5.
6.
7.
8.
9.
비주얼 스튜디오를 시작합니다.
File/New/Project 메뉴를 선택합니다.
프로젝트 타입은 "Win32 Console Application"을 선택합니다.
'Project name:'난에는 “proj_name"를 입력합니다.
'Location:'난에 프로젝트가 저장될 디렉토리를 지정합니다.
(ex. D:\user_id\examples)
OK 버튼을 누릅니다.
콘솔 에플리케이션 에서 ‘empty project'를 선택합니다.
프로젝트를 확인하고 끝냅니다.
• 두번째 단계: 코드 작성하기
1.
2.
3.
4.
5.
Project의 context 메뉴에서 [Add]-[New Item] 을 선택합니다.
Code 에서 C++ file 을 선택합니다.
File 이름을 입력합니다. 여기서는 “Welcome"로 합니다.
Location 입력한후 Add 를 클릭합니다.
Code 를 입력합니다.
• 세번째 단계: 컴파일하고 수행하기
1. 메뉴의 Build/compile 를 선택합니다.
2. 에러가 있으면 찾아서 수정합니다.
3. 에러가 없으면 [Debug]-[Start Without Debugging]를 선택하여 수
행합니다.