2015년 10월 20일 화요일

[Toon] In short, Martion






I have watched the movie; Martion. There are only Heinz and Potato in my head :)
I will going to eat potato in afternoon. Potato is similar to Mars. Is Mars actually Potato?

영화 마션을 봤다. 하인즈 케찹과 감자만 머리에 남아있다. 감자먹어야지. 감자는 화성이랑 비슷하다. 사실 화성은 감자가 아닐까?


Embedded 공부하려고 보는 책

아두이노 쿡북,(JPub)
Embedded Recipes,(Coner Book)
Embedded Sketches,(Coner Book)
Make: 아두이노 DIY 프로젝트, (한빛미디어)
Engineering Circuit Analysis (McGrawHill)
64비트 멀티코어OS 원리와 구조, (한빛미디어)
열혈 C프로그래밍, (오렌지미디어)
C언어로 쉽게 풀어쓴 자료구조 
Operating System Concepts [흔히 말하는 공룡책]
Embedded Linux 기반의 로봇 설계& 제작, (영진닷컴)

갖춰진 책은 이정도 인데, 사실 내가 임베디드를 정말 하고 싶은 걸까라는 생각도 물론 든다. 
이것 저것 불안해서 생각하는 면도 있는 듯함. 개인적으로는 웹프로그래밍도 Opentutorials.org 에서 보고, 나는 전자공학인 반면, 동생은 컴퓨터공학이라서 컴공 책은 쉽게 얻어 볼 수 있다는 것이 다행이라면 다행이다. 

* 아침형 인간 이라고 자부하는 나인데, 늦잠을 자서 하루를 항상 망치는 기분으로 시작했으나, 간만에 일찍 일어나니 글도 정리하고 이것 저것 생각을 하게 된다. 무엇을 할까 ?


일찍 일어나는 방법

지극히 개인적인 얘기지만, 여태까지 지겹게 들어왔던 알람 그 자체에 내성이 생긴 것이 아닌가 싶다. 여태까지의 노력은 알람의 횟수를 늘리고, 알람시간을 변경하고, 취침시간을 달리해보고(수면시간의 변화) 다른 알람앱을 받아 보고 였지만, 나를 깨우는 그 알람 음악이 문제였던 거라... 
 인간의 목소리로 알람을 바꾸어보니, 첫 마디에 바로 깨더라. 
*PD대정령 씨의 "일어나 일단 일어나서 당장 씻어 씻으면 잠깨" 말을 들으니, 일어나자 마자 비몽사몽인 사람에게 바로 그렇게 행동하게 주입을 해주더라.  
 알람을 끄는 방식은 '알람이' 앱으로 사칙연산 '상' 혹은 '최상' 난이도 였는데 나의 멍청함이 아침부터 느껴짐. 문제가 70 X 11 이였음.  711, 770 등을 계속하며 엄청 틀린듯...   (답은 781임. ) 

2015년 7월 15일 수요일

에빙하우스의 망각곡선


에빙하우스의 망각곡선에 의하면, 인간은 학습한 이후 10분 부터 약 50퍼센트 가량의 기억을 잃는다.  이 망각을 극복하기 위해서는 반복이 필요하다고하며, 많은 학습법 관련 강의나 다양한 매체에서 언급한다. 이에 따르면10분 후 복습, 1일 후 복습, 일주일 후 복습, 한달 후 복습  이렇게 4번의 복습을 하는 것이 암기하기 위한 방법이라고 생각된다. 문제는 이것을 언제 복습해야하는지 복습을 했는지를 기록하는 것인데, 매일 새로운 것을 공부하고 모든 것에 대해 복습여부 기록하기가 힘드므로, 노트정리를 했다면, 노트정리 위에 날짜와 네개의 체크리스트 (ㅁㅁㅁㅁ) 를 만들어 순서대로 10분, 하루, 일주일, 한달 로 체크한다면, 복습을 했는지 체크할 수 있을 것이라고 방법을 생각했다. 책으로 하는 경우 일정 량을 지정하여, 그 시작부분에 같은 방식으로 할 수 있을 것이라고 생각된다.  방법은 생각 했으니, 이제 실천의 문제 뿐일 것이다.

아마추어 수학자가 읽어야 할 책



페이스북은 접은지 꽤 되었는데 구글링 하던 중에 생활코딩의 페북 페이지를 보아서 올린다.  이분의 말씀대로 수학에 흥미를 먼저 붙여야 수학을 자연스럽게 할 수 있을 것이라고 생각한다.

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기초를 단단히 잡고 싶어 다시 시작 하였다. 
 굉장히 빠른 스피드로 진행해 나가다가, 이문제에서 막혀서 블로그에 글을 올린다. 나중에도 기억하고 싶어서.