2015-1 Programming Language 1. C Programming 기초 March 1, 2015 Prof. Young-Tak Kim Advanced Networking Technology Lab. (YU-ANTL) Dept. of Information & Comm. Eng, College of Engineering, Yeungnam University, KOREA (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr)
Outline 소프트웨어개발과정 알고리즘 C 프로그램작성절차 (Visual Studio) C 프로그램구성요소 디버깅 (debugging) 1-2
인류문명의진화와컴퓨터프로그래밍 인류는새로운도구를효율적으로현명하게사용함으로써문명을진화시켰음 increased productivities ( 생산성 ) with new tools of new materials, powered machines: from stone, stick, bronze, iron, telephone and computers increased collaborations ( 협동 ) among multiple persons increased performance ( 성능 ) in value creation increased energy efficiencies ( 에너지효율성 ) 컴퓨터와프로그래밍을통하여이러한기능을강화시킴 1-3
소프트웨어개발과정 설계 (Design) 구현 (Implementation) Problem Specifications (Requirements, Objectives) Analysis of the requirement Evaluate Feasibility 문법적오류 Edit program source code Compile Source codes.c,.cc Object codes.o Algorithm design Data Structure design Link Executable codes.exe Software system design Subsystem design Block design Module design Class / Function design Load Execute Program Execution output 논리적오류 Correct Output? 1-4 임무완수!!
요구사항분석 프로그램개발자는사용자들의요구사항을만족시키기위하여프로그램을작성 ( 예 ) 3년이상근무한직원들의리스트출력 정규직만 or 계약직포함 기준이되는날짜가오늘? 요구사항명세서 : 사용자의요구조건을만족하도록소프트웨어가갖는기능및제약조건, 성능목표등을포함 요구사항을정리하였습니다. 이정도면될까요? 가계부프로그램이필요합니다. 1-5
알고리즘 Algorithm is a list of instructions when executed, transform information from input to output The instructions are a finite set of steps that can be executed, in a definite deterministic order When these steps are actually executed, the execution must terminate after a finite time. 1-6
알고리즘의개발 핵심적인부분 어떤단계를밟아서어떤순서로작업을처리할것인지를설계 순서도 (flow chart) 와의사코드 (pseudo code) 를도구로사용 알고리즘은프로그래밍언어와는무관 알고리즘은원하는결과를얻기위하여밟아야하는단계에집중적으로초점을맞추는것 프로그램을작성하기전에먼저알고리즘을구상합니다. 1-7
순서도 (flow chart) 프로그램에서의논리순서또는작업순서등을그래픽으로표현하기위한형식 알고리즘이복잡하면기술하기가힘들어진다. 1-8
Pseudo code 의사코드 (Pseudo Code) Simplified list of instructions to show the overall process of algorithm not following the details of programming language the skeleton of the algorithm should be shown 1-9
Pseudo code (1) Procedure FindMax(dataArray, N) 1: //input argument: int dataarray[0..n-1]; // array of data with N elements // output result: maximum value of the given data array 2: int max; 3: int index; 4: index = 0; //initialize index 5: max = dataarray[index]; 6: while (index < N) { 7: if (max < dataarray[index]) 8: max = dataarray[index]; 9: index = index + 1; 10: } // end while 11: 12: printout max; 13: end // end of Algorithm FindMax() 1-10
Pseudo code (2) Procedure FindAvg(dataArray, N) 1: //input argument: int dataarray[0..n-1]; // array of data with N elements // output result: maximum value of the given data array 2: int count; 3: double sum, avg; 4: count = 0; //initialize index 5: sum = 0.0; 6: while (count < N) { 7: sum = sum + dataarray[count]; 8: count = count + 1; 9: } // end while 10: avg = sum / count; 12: printout avg; 13: end // end of Algorithm FindAvg() 1-11
자료구조 (Data Structure) 모든소프트웨어개발에서는효율적인알고리즘 (algorithm) 과이알고리즘에적합한자료구조 (data structure) 를사용하여야우수한성능을발휘할수있음 알고리즘의예 sorting ( 정렬 ): selection sorting, quick sorting search ( 탐색 ): depth-first search, breadth-first search shortest path, minimum spanning tree 자료구조의예 단순배열 (simple array) 구조체 (structure) 구조체배열 (array of structure) 자기참조구조체 (self-referential structure) Linked List, Binary Tree Heap, priority queue Map, Skip list 1-12
효과적인프로그램개발방법 (1) 프로그램설계 ( 알고리즘및자료구조설계 ) 에더많은시간을투자할것 주어진문제를해결하기위한효율적인알고리즘을먼저구성할것 구성된알고리즘에적합한자료구조를선택할것 예 ) 100,000개의학생데이터로부터 0.01초의데이터처리시간내에특정조건을만족하는학생을탐색 (search) 하여야하는경우, 어떤자료구조를사용하며, 어떤방식으로탐색할것인가? array vs. linked list vs. binary tree linear search vs. binary search 1-13
효과적인프로그램개발방법 (2) 프로그램오류수정을위한 debugging 방법을먼저숙달할것 프로그램소스코드상에존재하는문법적에러및논리적인에러를빨리찾아내는방법을먼저숙달 Visual studio의 debugging 기능을먼저확인하고, 숙달할것 break point 기능 trace 기능 각단계에서의 local variable 값확인 1-14
Source Program Coding 알고리즘의각단계를프로그래밍언어를이용하여기술 어떤프로그래밍언어로도가능 알고리즘을프로그래밍언어의문법에맞추어기술한것을소스프로그램 (source program) 소스프로그램은주로텍스트에디터나통합개발환경을이용하여작성 (Q) 알고리즘개발과코딩중어떤것이더어려울까? 드디어코딩을시작합니다. (A) 알고리즘개발이더창의적인작업이고더어렵다 1-15
Source code documentations Standard comment at each source code file produced in this course /** * File Name: "???.c" or "xxx.h", or "yyy.cpp" * Description: * - This program is...... * * Programmed by Gil-Dong Hong, * Last updated: Version 2.0, March 1, 2011 (by Young-Chul Kim). * * ======================================================== * Version Control (Explain updates in detail) * ======================================================== * Name YYYY/MM/DD Version Remarks * John Doe 2009/11/15 1.0 1:1 Chatting on UDP * socket, 2 threads * John Doe 2010/05/01 1.1 User interface has been * updated with GUI * Mark Kim 2010/08/03 2.0 Major change in the * program structure * ======================================================== */ 1-16
Compile 소스프로그램을목적프로그램으로변환하는작업 컴파일러가수행 컴파일오류 : 문법오류 ( 예 ) He go to school; 오류가발생하면소스프로그램을수정한후에다시컴파일 문장에오류가있습니다. 번역가 They goes to school.... 한국어 1-17 영어
Link 컴파일된목적프로그램을라이브러리와연결하여실행프로그램을작성하는것 라이브러리 (library): 프로그래머들이많이사용되는기능을미리작성해놓은것 ( 예 ) 입출력기능, 파일처리, 수학함수계산 링크를수행하는프로그램을링커 (linker) 라고한다. Hello! 1-18
실행 (execution) 과디버깅 (Debugging) 실행파일 : 실행파일은윈도우즈에서는.exe라는확장자 실행시간오류 (run time error): 0으로나누는것 잘못된메모리주소에접근하는것 논리오류 (logical error): 문법은틀리지않았으나논리적으로정확하지않는것 ( 예 ) 1 그릇 1 과그릇 2 를준비한다. 2 그릇 1 에밀가루, 우유, 계란을넣고잘섞는다. 3 그릇 2 를오븐에넣고 30 분동안 350 도로굽는다. 1-19
Debugging 소스에존재하는오류를잡는것 1-20
소프트웨어의유지보수 (maintenance) 소프트웨어의유지보수가필요한이유 디버깅후에도버그가남아있을수있기때문 소프트웨어가개발된다음에사용자의요구가추가될수있기때문 유지보수비용이전체비용의 50% 이상을차지 1-21
Visual Studio 2013 프로그램통합개발환경 1-22