프로그래밍 기법 최적화 프로그래밍.

Slides:



Advertisements
Similar presentations
Copyright © 2015 Pearson Education, Inc. 6 장 : 프로그래밍 언어.
Advertisements

스택 스택 추상자료형 스택 스택의 구현 스택의 응용 한빛미디어(주).
제6장 조건문.
슬라이드 1~21까지는 각자 복습! 슬라이드 22부터는 수업시간에 복습
Power C++ 제6장 포인터와 문자열.
C++ Espresso 제1장 기초 사항.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
제 1장 C 언어의 소개.
쉽게 풀어쓴 C언어 Express 제8장 함수 C Express.
C 프로그래밍.
쉽게 풀어쓴 C언어 Express 제8장 함수 C Express.
시스템 생명 주기(System Life Cycle)(1/2)
C 6장. 함수 #include <stdio.h> int main(void) { int num;
제3장 추가 실습 3장 관련 C 언어 프로그래밍 실습.
쉽게 풀어쓴 C언어 Express 제8장 함수 C Express Slide 1 (of 26)
C 10장. 함수의 활용 #include <stdio.h> int main(void) { int num;
C 11장. 포인터의 활용 #include <stdio.h> int main(void) { int num;
시스템 생명 주기(System Life Cycle)(1/2)
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
제5장 제어명령
C언어: 배열 (Arrays).
컴퓨터의 기초 제 4강 - 표준 입출력, 함수의 기초 2006년 4월 10일.
6장. printf와 scanf 함수에 대한 고찰
쉽게 풀어쓴 C언어 Express 제9장 함수와 변수 C Express.
누구나 즐기는 C언어 콘서트 제4장 수식과 연산자.
7. while 문의 흐름 제어.
자료구조 김현성.
쉽게 풀어쓴 C언어 Express 제17장 동적 메모리와 연결 리스트 C Express.
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express.
동적메모리와 연결리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 02. 프로그램의 기본구성.
C 7장. 배열과 문자열 #include <stdio.h> int main(void) { int num;
10장 포인터와 문자열 포인터 기본 배열과 포인터 매개변수 전달방법 포인터와 문자열.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express.
C ++ 프로그래밍 시작.
C언어 프로그래밍의 이해 Ch05. 명령문 Phylogenetic: 계통, 발생(학)의.
제 3 장 상수와 변수
쉽게 풀어쓴 C언어 Express 제7장 반복문 C Express.
4장 제어문 선택문: if 문, if – else 문, switch 문
Chapter 3 클래스. 최호성.
5장 이름, 바인딩, 영역(2) 순천향대학교 컴퓨터공학과 하상호.
adopted from KNK C Programming : A Modern Approach
개정판 누구나 즐기는 C언어 콘서트 제6장 반복문 출처: pixabay.
Chapter 10 함수 기본.
제2장 데이터형과 표준 입출력문 문봉근.
제 6장 함수 Hello!! C 언어 강성호 김학배 최우영.
자전거를 배우려면 안장에 올라가 페달을 밟아라.
컴퓨터 프로그래밍 기초 - 4th : 수식과 연산자 -
함수와 변수 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
제어문 & 반복문 C스터디 2주차.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
Chapter 11. 배열과 포인터.
실습과제 1(조건문, ) 표준입력으로 수축기 혈압을 입력 받아 그에 따른 적당한 표현을 화면에 출력하는 프로그램을 if-else 문을 이용하여 작성.
3장. 클래스의 기본.
#1 배열 활용 #include int main(void) { int i; int grade[5]; grade[0] = 10; grade[1] = 20; grade[2] = 30; grade[3] = 40; grade[4] = 50; for(i=0;i.
-Part2- 제1장 1차원 배열이란 무엇인가.
6장 반복제어문 for 문 while 문 do while 문 기타 제어문.
C언어 프로그래밍의 이해 Ch05. 명령문.
-Part1- 제7장 반복문이란 무엇인가.
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express Slide 1 (of 28)
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express.
-Part2- 제2장 다차원 배열이란 무엇인가.
반복문의 기능 반복문 반복문 특정 영역을 특정 조건이 만족하는 동안에 반복 실행하기 위한 문장 while문
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
어서와 C언어는 처음이지 제16장.
printf("Global Korea\n");
제 1장 프로그래밍 언어 소개 1.1 프로그래밍 언어란 무엇인가 1.2 프로그래밍 언어를 배워야 하는 이유
C++ 언어의 특징
배열, 포인터, 함수 Review & 과제 1, 2.
Presentation transcript:

프로그래밍 기법 최적화 프로그래밍

좋은 프로그램이란? 생산성(Productivity) 효율성(Efficiency) 빠른 시간 안에 프로그램을 완성, 생산 편리한 유지보수 효율성(Efficiency) 빠른 시간 안에 주어진 task를 완료

소프트웨어 개발 비용분석

1. 생산성 Readiblity(가독성; 可讀性) 해결방안 프로그램의 수행 흐름을 쉽게 파악할 수 있어야 함 유지보수를 위한 비용을 절약 해결방안 외형적인 측면 프로그래밍 작성지침 구조적 측면 Structured Programming, Object-Oriented Programming

가독성을 위한 코딩 Rule 올바르고 명확한 변수명칭을 사용 설명문(comment)를 충분히 사용 a, b, x, y, … 등과 같은 막연한 변수이름 지양 Sum, divider, count, … Text1, Combo1, Button1, … txtInput, txtResult, cmbDept, btnExecute 설명문(comment)를 충분히 사용 간단 명료하며 기능을 충분히 설명 특정 함수 혹은 명령문 앞에 위치시킴

프로그래밍 코딩 Rule(계속) 들여쓰기(Indentation) { }의 위치 적절한 빈 줄의 삽입 특히 제어구조(반복, 조건 등)에 유의 { }의 위치 { : if, else, do, while, struct, class, 함수이름과 같은 줄에 위치 혹은 바로 아래 줄 } : 해당 명령문에 열을 맞춤 적절한 빈 줄의 삽입

프로그램 예제 class CMath { // 팩토리알 값을 배열에 저장하고 출력하기. // 다음 두 줄은 정적변수에 관한 정의 이다.. static const maxFactorial : int = 5; static const factorialArray : int[] = new int[maxFactorial]; static CMath { // 패토리알 값의 배열을 초기화하고. // factorialArray[x] = (x+1)! 의 관계를 이용한다 factorialArray[0] = 1; for(var i : int = 1; i< maxFactorial; i++) { factorialArray[i] = factorialArray[i-1] * (i+1); } // 초기화가 수행되었을을 알림. print(“초기화 완료."); static function factorial(x : int) : int { return x * factorialArray[x-1]; }; print(“팩토리알 테이블 인쇄:"); for(var x : int = 1; x <= CMath.maxFactorial; x++) { print( x + "! = " + CMath.factorial(x) );

2. 효율성(Efficiency) 가급적 빠른 연산연산자를 이용한다. 연산자의 수행속도 예 +, -, <<, >> * /, % 예 3*i a/b/c a/2 3*i → i+i+I a/b/c → a/(b*c) a*0.5

이진수로 바꾸기의 예제 #include <stdio.h> void main() { int number, i; int bit = 0x8000; //만약4자리 발생하려면 0x8, 8자리는 0x80으로, // 24자리는 0x800000 while(1) { printf("숫자를 입력하시오 : "); scanf("%d", &number); if(number<0) break; for(i = 0; i < 16; i++) if((number & bit)) printf("1"); else printf("0"); number = number << 1; //1비트 왼쪽 시프트 } printf("\n"); #include <stdio.h> void main() { int number, i; int temp; while(1) { printf("숫자를 입력하시오 : "); scanf("%d", &number); if(number<0) break; temp=number; for(i = 0; i < 16; i++) { printf("%d", temp%2); temp=temp/2; } printf("\n");

비교해보자 #include <stdio.h> int getAvg(int begin, int end, int count) { int i = 0, avg = 0; for(i = begin; i <= end; i++) { avg += i / count; } return avg; #include <stdio.h> int getAvg(int begin, int end, int count) { int i = 0, sum = 0; for(i = begin; i <= end; i++) sum += i; } return sum/count;

비교해보자 이것을 매크로로 바꿔보자. #define SWAP(a, b) temp = a; a = b; b = temp; … void swap(int &a, int &b) { int temp = a; a = b; b = temp; } 여기서 int temp 와 같은 로컬 변수를 사용하게 되므로 만일 루프 내에서 while(조건) .... swap(a, b); 와 같이 사용할 경우 이 함수는 ... 와 같이 바뀌는데 매번 temp변수의 선언이 필요하고 저장 위치가 명시적이지 못함. 이것을 매크로로 바꿔보자. #define SWAP(a, b) temp = a; a = b; b = temp; … int temp; while( 조건) { .... SWAP(a, b) } int temp 가 루프 바깥에 위치하게 된다. 변수의 위치를 명시적으로 지정하여 속도를 향상시킬 수 있다.

기타사항 인수분해 활용 함수호출은 가급적 피하자 임시변수는 가급적 피하자 a = b*(e+f) – c*(e+f) +d*(e+f) → a = (b-c+d)*(e+f) 함수호출은 가급적 피하자 log(a) + log(b) → log(a*b) 임시변수는 가급적 피하자 t1 = a+b; t2 = c*d; x = t1+t2 x = a+b+c*d;

비교해보자 #include <stdio.h> int getSum(int begin, int end) { int i = 0, sum = 0; for(i = begin; i <= end; i++) sum += i; } return sum; int main(void) if(getSum(1, 100) >= 5000) printf("sum : %d\n“,getSum(1, 100)); return 0; #include <stdio.h> int getSum(int begin, int end) { int i = 0, sum = 0; for(i = begin; i <= end; i++) sum += i; } return sum; int main(void) int sum = getSum(1, 100); if(sum >= 5000) printf("sum : %d\n", sum); return 0;

if문의 관리 가능성이 큰 조건을 앞에 사용함 P(x=3) > P(x=2) >P(x=1)라고 하면 if (x=1) … else if (x=2) … else (x=3) if (x=3) … else if (x=2) … else (x=1) 예를 들어 상금 결정문제 1~100숫자 사이에 20의 배수이면 상금이 100원, 7의 배수이면 50원, 짝수이면 20원이라고 할 때 각자의 상금을 결정해보자

조건식의 순서 P(a=x) > P(b=x)이면 if(a==x || b==x) if(b==x && a==x)

Structured Programming Object-Oriented Programming 프로그램의 외형적 측면 Structured Programming Object-Oriented Programming

구조적 프로그래밍 (Structured Programming) GOTO-less 프로그래밍 1960년대 말 Software Crisis( by Dijkstra) 기본구조 Sequence Structure Selection Structure Repetition Structure Top-Down Programming 문제를 큰 단위부터 구성하고 작은 단위로 세분화 Modular Programming 전제 프로그램을 독립된 작은 모듈(module)로 구성

간단한 예 조합 구하기 Top-Down 두수를 입력 받음 팩토리알 구함 조합 계산

프로그램 구조화 예제 반복 반복 #include <stdio.h> int main(void) {         int a, b;         a = get_integer();         b = get_integer();         printf("C(%d, %d) = %d \n", a, b, combination(a, b));         return 0; } int combination(int n, int r)         return (factorial(n)/(factorial(r) * factorial(n-r))); int get_integer(void)         int n;         printf("정수를 입력하시오: ");         scanf("%d", &n);         return n; int factorial(int n)         int i;         long result = 1;         for(i = 1; i <= n; i++)                 result *= i;          return result; #include <stdio.h> int main(void) {         int a, b, c, d, e, i;         printf("정수를 입력하시오: ");         scanf("%d", &a);         scanf("%d", &b);         for(i = 1; i <= a; i++)                 c *= i;           for(i = 1; i <= b; i++)                 d *= i;           for(i = 1; i <= a-b; i++)                 e *= i;           printf("C(%d, %d) = %d \n", a, b, c/(d*e);        } 반복 반복

객체지향 프로그래밍 (Object-Oriented Programming; OOP Structured Programming vs. OOP 공통점 GOTO-less Programming 모듈화 프로그래밍 차이점 Structured Programming Function : 중심 역할 Data : 부수적인 역할 OOP Data : 중심 역할 Function : 부수적인 역할

간단한 예 Data : 자동차, 책, 사과, 물건, 배 Function : 소유하다, 타다, 먹다, 읽다, 맛있다 Structured Programming 자료가 function에 노출되어 있음 자동차 : 먹다 사과 : 타다 OOP 자료가 중심이 되어 function과 하나로 묶음(캡슐화, 자료 은닉) 물건 소유하다 상속 사과 먹다, 맛있다 배 먹다 자동차 타다 책 읽다

프로그램 구조 비교 struct employee class employee (자료구조) {private :자료구조 initialize(employee); … show_data(employee); main() {함수호출} class employee {private :자료구조 public :initialize show_data … main() {객체에 대한 메세지전달) 자료노출 자료은닉 자료은닉 : 외부에서는 자료구조를 알 필요가 없다

OOP의 특징 프로그래밍 방식 장점 객체를 구성 구성된 객체를 조립 Bottom-Up 프로그래밍 재사용이 매우 용이 차를 타고 가며 책을 읽었다 차를 타고 가며 사과를 먹었다 확장성(extensibility) 수정이 용이 : 객체 내에서만 수정 작업이 이루어짐

C++ 프로그래밍 예제 실행결과 Result : 11 Result : -1 #include <iostream.h> class Counter { private: int value; public: void set(int n) {value = n;} void inc() {++value;} void dec() {--value;} int val() {return value;} }; main() { Counter cnt; cnt.set(10); cnt.inc(); cout << "Result : " << cnt.val() << '\n'; cnt.set(0); cnt.dec(); } 실행결과 Result : 11 Result : -1