프로그래밍 서울대학교 통계학과 2009년 2학기 컴퓨터의 개념 및 실습 (http://dcom09.ez.ro)
프로그래밍 프로그래밍의 개념 소개 주요 프로그래밍 언어 소개 전공수업에서 다룰 전용 프로그램의 ‘스크립트’ 프로그래밍 소개 C, C++, C# Java, Python 전공수업에서 다룰 전용 프로그램의 ‘스크립트’ 프로그래밍 소개 Matlab, R SAS, S-Plus, SPSS Maple, Mathematica 기타 전공과목별 전용 통계 프로그램
프로그래밍 관련 연계 교과목 프로그래밍 언어 프로그래밍 원리 통계분석 4190.102A 002 컴퓨터 프로그래밍 (2-1 전선) 컴퓨터공학부, 2학년 컴퓨터 프로그래밍 전기공학부, 2학년, ‘프로그래밍 방법론’ 농생대, 2학년, ‘컴퓨터프로그래밍 개론’ 프로그래밍 원리 자료구조(data structure) 알고리즘(algorithm) 통계분석 326.212 전산통계 및 실험 (2-2 전필) R을 이용한 실습
프로그래밍 뭔가를 해내는 방법을 기술하기 뭔가를 정의하기, 와는 다르다 “해내는” = “계산하는” 루트2를 찾는 방법 자장면을 만드는 방법 전화를 거는 방법 결혼을 하는 방법 뭔가를 정의하기, 와는 다르다 루트2는 제곱하면 2가 되는 수 자장면은 가장 싸고 맛있는 중국음식 전화걸기는 소리와 영상을 주고받고자 작업들어가는 것 결혼은 남자와 여자가 후손을 잘 만들어내기위한 계약 “프로그래밍 개념” 과목 PPT에서 발췌 원저: 서울대 컴퓨터공학부 이광근 교수
프로그래밍의 기본 요소 기본원소들 primitives 조합하는 방법들 means of combination 속내용을 감추는 방법들 means of abstraction 프로그램 실행과정의 이해 rule of evaluation “프로그래밍 개념” 과목 PPT에서 발췌 원저: 서울대 컴퓨터공학부 이광근 교수
프로그램을 구성하는 데 필요한 요소 기본원소들 primitives 조합하는 방법들 means of combination 0, 1, AND gates, OR gates, NOT gates, … integers, strings, booleans, +, -, =, ^, … 조합하는 방법들 means of combination rules about connecting together in a Boolean circuit rules about composing together in a compound 속내용을 감추는 방법들 means of abstraction black boxes: XOR, MUX, … black boxes: min, max, average, marry … pair, list, tree, set, vehicle, fire, … 실행과정의 이해 truth tables of Bollean gates evaluation rules of programs “프로그래밍 개념” 과목 PPT에서 발췌 원저: 서울대 컴퓨터공학부 이광근 교수
프로그래밍 언어란 무엇인가? tools for instructing machines? notation for algorithms? means for expressing high-level designs? “프로그래밍 언어” 과목 PPT에서 발췌 원저: 서울대 컴퓨터공학부 이광근 교수 tools for realization?
겉모양 속내용 “프로그래밍 언어” 과목 PPT에서 발췌 원저: 서울대 컴퓨터공학부 이광근 교수
프로그래밍 언어 프로그래밍 언어 프로그래밍 언어의 종류 사람이 이해하기 쉬우면서도 쉽게 이진코드로 번역 가능한 언어 언어의 종류별로 고유의 문법이 있다 프로그래밍 언어의 종류 기계어 어셈블리어 고급언어
프로그래밍 언어 기계어 (machine language) 어셈블리어 (assembly language) 컴퓨터가 직접 이해 가능한 언어 0과1의 조합으로 표현 사람이 이해하기는 복잡하고 어려움 예) 00011010 0001 0010 어셈블리어 (assembly language) 0과1의 조합을 상징적인 코드로 변환하여 인간의 이해도를 향상 기계어로 변환되어야 함 어셈블러(Assembler)라는 소프트웨어 필요 예) ADD 1, 2
프로그래밍 언어 고급언어 (high-level programming language) 인간이 이해하기 쉽게 만든 컴퓨터용 언어 컴파일러에 의해 기계어로 변환 FORTRAN, COBOL, PASCAL, BASIC, C, C++, Java...
프로그래밍 언어의 종류 C UNIX 운영 체제를 설계하면서 개발 시스템 프로그래밍에서 일반 응용 프로그램의 작성에 이르기까지 역사상 가장 대중적으로 성공한 언어 장점 실행 속도가 빠르다 이식성이 좋다 프로그램을 논리적인 작업 단위로 작성하고 이를 계층적으로 배치할 수 있다. 고급언어의 특성과 저급 수준 언어의 특성을 동시에 가지고 있다. C++ C 언어에 클래스 개념 (객체지향 개념)을 도입하면서 시작 순수한 의미의 객체지향 언어는 아님. 그러나 가장 대중적으로 성공한 객체지향 언어.
프로그래밍 언어의 종류 Java 선 마이크로시스템사에서 개발 간단하고 버그가 없는 전자제품 개발이 초기의 목적 현재는 Netscape과 Explore 모두에서 자바를 지원 웹상에서 에니메이션이나 고수준의 상호작용이 가능 프로그래밍 언어로서의 자바 단순 객체지향적 분산처리 컴퓨터 구조에 중립적 등등
범용 공학/통계 도구에서의 프로그래밍
통계 패키지에서의 프로그래밍
알고리즘 컴퓨터를 이용한 문제 해결 과정 알고리즘 프로그램 문제 정의와 분석 알고리즘 작성 프로그램 작성 문제 해결 방법에 대한 풀이 과정 프로그램 알고리즘을 컴퓨터가 이해할 수 있는 언어로 기술한 것 프로그래밍 언어를 선택 프로그래밍
알고리즘의 중요성 프로그램의 성능과 알고리즘 100만명을 대상으로 각자가 낸 납세액이 전체 납세액에서 차지하는 비율을 구하는 문제
총 소요시간 : 1 + (1/100만 + 2 + 1/100만) * 100만 = 약 200만 초 알고리즘 #1 1. 100만 명의 납세액을 입력 받는다. (1초) 2. 대상자의 납세액을 읽어 온다. (1/100만 초) 3. 100만 명의 납세액 총액을 구한다. 100만 * 1/100만 초 + (100만 - 1) * 1/100만 초 4. 2의 값을 총합으로 나누어 납세 비중을 구한다. (1/100만 초) 5.아직 남은 대상자가 있으면 2~4의 과정을 반복한다. 총 소요시간 : 1 + (1/100만 + 2 + 1/100만) * 100만 = 약 200만 초
총 소요시간 : 1 + 2 + (1/100만 + 1/100만) * 100만 = 약 5초 알고리즘 #2 1. 100만 명의 납세액을 입력 받는다. (1초) 2. 100만 명의 납세액 총액을 구한다. 100만 * 1/100만 초 + (100만 - 1) * 1/100만 초 3. 대상자의 납세액을 읽어 온다. (1/100만 초) 4. 3의 값을 2에서 계산한 값으로 나누어 납세 비중을 구한다. (1/100만 초) 5.아직 남은 대상자가 있으면 3~4의 과정을 반복한다. 총 소요시간 : 1 + 2 + (1/100만 + 1/100만) * 100만 = 약 5초
컴파일 컴파일 컴파일러(compiler) 고급 언어로 작성한 프로그램을 컴퓨터가 이해할 수 있고, 실행 가능한 기계어로 번역하는 과정 컴파일러(compiler) 번역을 담당하는 프로그램 컴퓨터 기종, 운영 체제, 프로그래밍 언어에 따라 다른 종류의 컴파일러 필요 (비교) 인터프리터(interpreter) 컴파일러는 프로그램 전체를 기계어로 번역한 후, 실행을 하는 데 반해, 인터프리터는 프로그램의 각 문장을 기계어로 번역해 순서대로 실행
컴파일 과정과 라이브러리 원시 파일 목적 파일 실행 프로그램 라이브러리 : 입출력과 같이 프로그래밍에서 공통으로 많이 컴파일 작업 (컴파일러,Compiler) 링크 작업 (링커, Linker) 원시 파일 (Source Code) *.cpp 목적 파일 (Object Code) *.obj 실행 프로그램 (Executable Code) *.exe 라이브러리 (Library) 라이브러리 : 입출력과 같이 프로그래밍에서 공통으로 많이 쓰이는 작업들을 미리 컴파일하여 목적 파일 형태로 만들어 놓은 것들의 집합
프로그램 에러와 디버깅 에러 종류 문법적 에러 (syntax error) 논리적 에러 (semantic error) 프로그램이 언어의 문법에 어긋나는 경우 발생 컴파일러가 컴파일 시 에러 정보 출력 논리적 에러 (semantic error) 프로그래머가 알고리즘을 잘못 만들었을 경우 발생 컴파일러가 검사할 수 없음, 실행 시 오동작 버그(bug) : 논리적인 에러 디버깅 : 버그를 찾아 고치는 과정
프로그래밍기초 (C언어)
프로그래밍 기초 (C 언어) C 언어에서의 함수 C 프로그램 int sum(int a, int b) {…..} 단위 작업을 수행하기 위한 명령문의 집합 C 프로그램 여러 함수의 모임 int sum(int a, int b) {…..} double avg(int a, int b) {…..} void main() { …..}
printf() 함수는 직접 작성할 필요없음 호출하여 사용하기만 하면 됨 (Library) 프로그래밍 기초 (C 언어) main() C 프로그램 내에서 반드시 정의되어야 하는 특별한 함수 프로그램이 실행될 때 가장 먼저 실행되는 함수 main() 함수 내에서 다른 함수를 호출하는 식으로 프로그램이 실행된다. #include <stdio.h> void main() { printf(“Hello World”); } printf() 함수는 직접 작성할 필요없음 호출하여 사용하기만 하면 됨 (Library)
사칙 연산을 수행하는 프로그램 #include <stdio.h> void main() { int add, sub, mul, div; add = 4 + 2; sub = 4 - 2; mul = 4 * 2; div = 4 / 2; printf (“%d %d %d %d”, add, sub, mul, div); }
변수 (Variable) 변수 변수 선언 자료형 값을 저장하기 위한 장소 (add = 4 + 2;) 변수를 사용하기 전에는 반드시 선언해야 한다. 선언할 때 변수가 저장하는 자료형이 무엇인지를 반드시 밝혀야 한다. int add; add라는 변수는 정수만을 저장할 수 있다. 자료형 int, float, char,…...
변수 #include <stdio.h> void main() { int j; float f; char c; c = ‘a’; printf (“%d %f %c \n”, j, f, c); } 줄바꿈 기호
배열 정수를 저장하는 변수를 100개 선언하려면?? int iarray[100]; float farray[100]; 필요한 변수 100개를 모두 선언한다. 배열 (Array)를 선언한다. int iarray[100]; 정수형 변수를 100개 선언한 것과 동일한 효과 float farray[100]; 실수형 변수를 100개 선언한 것과 동일한 효과
연산자 주요 연산자 +, -, *, / % : 나머지를 구하는 연산자 ++ : 변수의 값을 1 증가하는 연산자 -- : 변수의 값을 1 감소하는 연산자
연산자 예제 #include <stdio.h> void main() { int a, b; a = 5; printf (“%d %d \n”,a, b); } 출력되는 값은?
흐름 제어 프로그램의 실행 순서를 제어하는 명령문 조건문 반복문 여러 선택 가능한 실행 순서 중에서 조건에 부합하는 문장을 선택하여 실행한다. if, switch, …. 반복문 조건이 참인 동안 일단의 문장을 반복 실행한다. for, while, do-while, …
조건문 #include <stdio.h> void main() { int a; a = 1; - 조건식이 기술된다. - 조건식은 관계 연산자나 논리 연산자로 구성된다. #include <stdio.h> void main() { int a; a = 1; if (a == 1) printf(“a = 1”); else if (a == 2) printf(“a = 2”); a ++; }
조건문 관계 연산자 논리 연산자 <, >, <=, >=, ==, != if (a != b) printf(“not equal”); 논리 연산자 ! (not), && (and), || (or) if ( (a >=b) && (a >=c) ) printf(“a is Max”);
반복문 1에서 100까지 더하는 문제 #include <stdio.h> void main() { int j, sum; sum = 0; for (j = 1; j <=100; j++) sum = sum + j; printf (“sum = %d”, sum); } 1. 초기값 2. 반복할 조건 - 조건이 만족되는 한 계속 반복된다. 4. 단계 3. 실제 반복되는 문장
반복문 1에서 100까지 더하는 문제 #include <stdio.h> void main() { int j, sum; sum = 0; j = 1; while (j <= 100) { sum = sum + j; j++; } printf (“sum = %d”, sum);