레이블이 Research인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Research인 게시물을 표시합니다. 모든 게시물 표시

2015년 1월 6일 화요일

[C언어] 함수의 네가지 기본형태에 대한 이해


 Add(), ShowAddResult(), ReadNum(), HowToUseThisProg()
각각 반환과 인자전달의 유무가 다른 네개 형태의 사용법에 대한 코딩이다.
이렇게 작성하면 반환 값? 인자전달? 이라는 의문이 들 수도 있는데,

 인자란 함수 사용시에 사용하는 값, 반환 값은 일반적으로 함수내의 결과 값을 의미한다고 할 수 있다. 
 다른 말로하면, Add함수에서 int(정수) 형태의 num1과 num2 의 값을 받아들여 그것으로 함수가 갖는 계산을 한다고 할 수 있다. 물론 함수마다 어떤 계산일지는 다르겠지만,
 Add 에 한해서는 num1+num2의 계산이다. return num1+num2; 라고 되어있는데, 더하기와 동시에 그 값을 반환; 즉, Result =Add(int num1,int num2); 라고할 때 Result 값은 num1, num2 의 합이 되는 것이다. 더 쉽게 Result= Add(3,4); 라고 하면 Result 값에 3과 4의 합; 7을 Result에 대입하는 것이다.

 반환 값이 없는 경우에는 대표적인 경우가 ShowAddResult()처럼 함수내의 printf()함수가 있는 경우이다. printf()자체가 모니터로 반환한다는 의미로 볼 수 있다. (*깊이 들어가면 printf()함수는 글자열의 길이를 반환값으로 갖는 함수이다. 그 말은 즉, ShowAddResult()를 반환이 가능한 함수로 만들고 return printf(); 할 경우 문자열의 길이 값을 반환 하게도 만들 수 있다는 의미이다.) 괄호안의 말은 깊이 이해하지 않아도 되며, 이 문제를 쓴 저자는 함수를 간단히 설명하기 위해 사용한 것이므로, 인자만 받아서 반환하지 않는 함수로 사용할 수 있구나... 하고 이해하면 된다.

 세번 째의 ReadNum() 함수를 보면, 반환 값만 있다. ReadNum(); 이라고 선언한 것이 scanf("%d",&num); 을 간단히 하기위한 장치라고 할 수 있다. 물론 ReadNum()으로만 선언만 하면 결과 값을 컴퓨터에서만 가질 뿐 이걸 이용하기 위해서는 그림과 같이 num1=ReadNum(); 식으로 사용하면 ReadNum() scanf로 입력받은 값을 num1에 저장한다.

 마지막으로, HowToUseThisProg() 함수는 인자(입력)도 반환(출력)도 없다. 무엇인가 기본적으로 모니터상으로 보여주고 싶은 문구가 있을경우 printf("블라블라블라 \n"); 의 형태로 사용할 수도 있지만, HowToUseThisProg(); 선언만으로 같은 결과를 도출할 수 있다니 얼마나 간편하겠는가. (문자의 길이부터) 물론 함수선언이 차지하는 공간이 있긴 할테지..

 예제를 거의 가져온데다가 내 생각을 덧붙인 것 뿐이지만, C언어에서는 함수가 시작이고 끝이고 심지어 int main() 메인 함수또한 함수인 모든 함수 형태이므로 함수는 정말정말정말 중요해서, 블로그 글에 게시한다. 항상 4가지가 있다는 것을 기억하자.
 1. 인자와 반환 값이 있는경우        example)    Add()
 2. 인자는 있고 반환값이 없는경우                   ShowAddResult()
 3. 인자는 없고 반환값이 있는경우                   ReadNum()
 4. 인자도 반환값도 없는경우                          HowToUseThisProg()

References  <열혈C프로그래밍> -윤성우 저 오렌지미디어  214page SmartAddFunc.c




[C언어] if ~else if 문의 switch case 문 변화

문제는 
if(n>=0 && n<10) printf("0이상 10미만\n");
else if(n>=10 && n<20) printf("10이상 20미만\n");
else if(n>=20 && n<30) printf("20이상 30미만\n");
else printf("30이상\n");

의 형태의 if...else if 문을 억지로 switch case문으로 바꿔보라는 이야기 였다.
case 문의 특성상 범위조절이 아닌 값을 의미하므로 나의 경우는 위의 그림과 같이 일일히 자연수 case 를 전부 넣었지만 솔루션은 이 방법이 아니였다. 
 물론 나의 코드 작성 방법에도 문제가 있는데, 입력받은 값이 (물론 정수로 선언하긴 하였지만) float형태(소수형태) 일 경우 가 성립하지 않을 수 있다는 것이다.

 솔루션에서는 switch(n/10)으로 10으로 나누어 문제를 해결했다.
10으로 나눌경우 정수형 선언이기에 나머지가 떨어져 나가므로, 
복잡하게 안하고, 주석처럼 case 0: case 1: case 2: default: 만으로 해결 할 수 있게 된다.

참조한 책은 200p 문제 08-3 윤성우 저자의 <열혈 C프로그래밍> 오렌지미디어. 이다.
정말 C프로그래밍 책에서 추천할 만 하며, 생각해볼 수 있게 잘쓰여진 좋은 책이다. 2학년때 사서 현재까지 붙잡고 있지만, 열심히 하자는 마음가짐에 C기초를 단단히 잡고 싶어 다시 시작 하였다. 
 굉장히 빠른 스피드로 진행해 나가다가, 이문제에서 막혀서 블로그에 글을 올린다. 나중에도 기억하고 싶어서.


2014년 12월 29일 월요일

C언어_How to Pop Up 'Hello World' as C language on Macbook with Xcode. (맥북에서 C언어로 'Hello World' 띄우기)

*If you want to learn programming language which is C language, You have to install compiler on Macbook. (My development environment is macbook air 2009 mid.)
The method which is easy is what you install 'Xcode'. 
1. You can download Xcode on 'App store'.
(앱스토어에서 Xcode를 다운로드 합니다.)

2. run Xcode. (Xcode를 실행합니다.)








This is icon of Xcode.(이것이 Xcode 아이콘 입니다.)

3. (Click) Create a new Xcode project (를 클릭합니다.)


















4. OS X - Application - Command Line Tool -Next (순서대로 클릭)













5. Decide project name and organization name. You can use defaults except project name. Language have to C
(프로젝트 이름을 정한다. Language는 C 여야 하며, 나머지는 default 값을 해도 된다.)












6. Decide location of your project, then click Create.
(프로젝트가 위치할 폴더를 정하고 Create 버튼을 누른다.)















7. There is example code. Red box is running button which runs compiler. 
(이렇게 예제 프로그램이 작성되어 있으며, 빨간상자를 누르면 컴파일 및 실행을 할 수 있습니다.)



8. There is the other method 'Product - Run' to run. 
(Product-Run, 혹은 Command+R은 컴파일 및 실행하는 또다른 방법입니다.)


9. If a result is 'Hello World!', There is correct. 
(아래에 Hello World!라는 결과가 나오면 옳게 된 것입니다.)





2014년 12월 23일 화요일

Linux Mint Install Process on Macbook Air 2009 mid (리눅스 민트 설치과정 맥북 에어 2009 mid)

If you had macbook and want to install Linux Mint which doesn't care Mate or Cinnamon,  It maybe be solution.
I want to Dual OS Environment which are Mac OS X and Linux Mint
  1. Make Linux mint USB boot driver to see under the site http://purpleoksu.blogspot.kr/2014/12/how-to-install-linux-mint-on-macbook.html
  2. Have to Leave 40Gb for Linux mint on 'Disk Utility' Let me be clear decrease mac partition.
  3. Reboot and push the 'Alt+Option' button, then load Linux Mint USB.
  4. Make partition like this http://jsfl.tistory.com/9
    (*It maybe my especially case. Linux mint USB of my macbook doesn't recognize present of Mac OS X, so I chose 'other else' on processing of Linux installation)


    It has 3 areas which are 'Swap area', '/ area' '/home area' / is like C drive of Windows, /home is like D drive of Windows.
     If your Mac recognize present of Mac OS X and can choose Dual OS, your selection have to Dual OS. It case is easy way.
  5.  Install Linux mint
  6.  If you have broadcom LAN  It has problem which is kernel source.
    have to install bcmwl-kernel-source (Linux STA driver)
    It is in Linux USB Driver.  

    7. execute 'Driver Manager'
8. choose bcmwl-kernel-source (*your Linux USB is inserted on your PC)

2014년 12월 10일 수요일

LCD, LED, Touchpanel, Module and Controller

산업용으로 사용 하려고 큰사이즈의 (7inches, 17inches) 터치패널을 보는 중인데 Lcd를 제외하고 단순히 터치패널만 있거나, 모듈로써 있는 것은 프로그램 기반이 Windows CE 이다. Arduino 용량 문제상 3인치 정도만 Uno에서 사용하고 그 이상은 핀의 개수 부족으로 Mega를 쓰는 것으로 알고 있다. (몇인치까지 지원가능한지 모름.)
 단순한 이미지를 띄우거나, 터치 기능으로 간단한 몇페이지를 만들고 하려해서 C기반의 AVR, 혹은 Arduino를 이용하여 제작하려고 한다. 검색의 문제인지, 누구도 산업용으로는 Windows CE를 사용하기 때문에 관심이 없어서 인지 Arduino 기반의 PLC Controllio 를 제외하고는 Arduino 기반의 제품이 보이지 않는다. 안정성이 PLC가 뛰어나기 때문에 rom writer 를 사용하여 EEPROM을 구워 단순한 IC를 사용하여 만드는 방법은 쉽게 구상할 수 있겠지만, touch panel, lcd (굳이 LCD일 필요있나, 핸드폰처럼 led액정 사용하는 방법도 좋을 것.) 스위치가 아닌 터치스크린에 스위치를 넣는용도로 터치스크린을 산업용으로 쓰려 하는데  Arduino or AVR 기반의 큰 사이즈 터치패널용 모듈을 만들어야 할 판이다.
 LCD Controller 며, touch controller 며, IC 등을 이용하여 모듈을 제작하여야 할텐데, 전자공학과 인데 모듈 제작하나 못하는 자신을 보니 깝깝하다. 3인치로 터치스크린 제어나 연습할 까 싶다가, 어짜피 7인치 혹은 17인치로 만들어야하니 처음부터 모듈 제작 접근부터 해야 할까 싶다. 모듈제작은 어떻게 하는거야.. 혼란이다.