반응형

【 프로세싱 언어 】 #13 Tweak(변수 조정) 기능 이용해 보기


 프로그래밍을 하다보면 프로그램 내에서 각종 변수 값의 수치를 변경해보며 테스트 해보는 상황을 자주 겪게 된다.  이때 단순한 수치값 하나를 바꾸더라도 다시 컴파일 및 실행을 하여야 바꾼 수치가 반영된 결과를 확인 할 수 있다. 여러번 수치를 변경 테스트 할 경우 상당히 번거로운 일이 아닐 수 없다. 하지만 프로세싱에서는 이러한 문제를 버추얼하게 깔끔하고 재미있게 해결해준다.  

그 기능이 바로 지금 소개할 Tweak 기능이다. 


▶ 문제 1 : 앞선 예제를 가지고 Tweak 기능을 테스트 해보자. 


▶ 실행 동영상


(전체화면으로 보면 보다 선명하게 보실 수 있어요)



▶ 포인트 
- 프로그램 작성후 메뉴에서 :  Sketch(스케치) 》 Tweak(변수조정하기) 를 클릭한다. 이때, 먼저 저장 하라는 메세지가 뜨는데, 저장후 다시 실행하도록 한다.



▶ 프로그램(code) : 





 ▶ 코드 설명 : 

   - slash 값을 변경하면 배경 사선의 기울기가 변한다.

   - for 문에서 i= -slash 처럼 -값으로 시작되는 이유는 만약, 양의 값으로 시작되면 사선이기 때문에 왼쪽 하단부에 사선이 그어지지 않는 공간이 생기기 때문이다. 



▶ 코드 다운로드 :

 sketch__12_line_width_slash.pde



반응형
반응형

【 C 언어 】 #43 데이터형에 따른 메모리 할당 크기 확인하기


 데이터 유형에 따라 메모리를 할당 받는 크기가 다르다. 예를 들어 정수형인 int는 4byte(1byte 는 8bit), char형은 1byte... 요즘 처럼 아두이노 등을 활용할 일이 많은 상황에서 작성 프로그램이 커질 경우, 데이터 유형에 따른 메모리 할당 크기를 파악하고 있으면, 변수 선언시, 비효과적으로 메모리를 찾이하는 것을 방지 할 수 있다. 


▶ 문제  :  데이터 유형에 따른, 다음 각 변수들을 선언하고 각각의 메모리 사이즈를 화면에 출력하라.  (출력할 유형 : int, char, short, long, float, double)


▶ 실행 결과 :


(이미지 클릭, 확대해서 보세요)



▶ 포인트 


- 데이터 유형에 따라 변수명을 선언한다. 

- 변수 유형에 따른 메모리 크기를 확인 할 수 있는 함수는 sizeof()  이다. (byte 단위)

- 위 6가지 외에도, 부호를 나타낼 수 있고 없고에 따른 unsigned 가 붙는 유형 등이 있다. 




▶ 프로그램 (답안 예시) : 

(이미지 클릭, 확대해서 보세요)


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



▶ 소스코드 다운로드 :  


43 데이터형의 메모리 할당크기 확인하기.cpp



반응형

【 C 언어 】 #42 공용체 (union) 이해하기

Language/C & C++ 2018. 5. 8. 15:59 Posted by 엑소더스팩토리
반응형

【 C 언어 】 #42 공용체 (union) 이해하기



 공용체는 구조체와 선언 및 사용 방법이 매우 유사 하다.  구조체 처럼 서로 다른 데이터 유형을 하나로 묶어 사용할 수 있는 장점이 있으며, 구조체와의 차이점은 정의 된 변수들의 메모리 할당 방식에 차이가 있다. ( 변수가 할당 될 때 하나의 메모리 공간에 여러 변수들의 메모리가 공용으로 할당 되어 사용된다 )


▶ 문제  : int i, int j 를 공용체로 묶어 선언하고  i = 3을 대입 후 printf 문으로 i의 값을 출력하고 ,  j = 5  를 대입 후 printf 문으로 j의 값을 출력하고 난 후 ,  다시 i의 값을 출력해 보라. 

 (여러 타입의 변수를 공용체로 묶어 사용할 수 있으나 여기서는 int 타입만 사용하였다.  공용체 변수명 등은 임의로 정하라)


▶ 실행 결과 :


(이미지 클릭, 확대해서 보세요)



▶ 포인트 


- 공용체 또한 구조체와 마찬가지로 실제로 변수를 선언 하는 것은 아니며, 선언하는 변수 들의 틀(템플릿)을 만들어 주는 것에 불과 하다는 점을 기억하라.


- 공용체와 구조체의 차이점 :

 구조체의 경우 선언 하는 변수 만큼 메모리를 할당한다.  

 예) int i , char j , double k  라고 구조체로 묶어 선언 할 경우 

모두  4 byte (int) + 1 byte (char) + 8 byte (double) = 13 byte 의 메모리를 할 당하게 된다.   즉, 메모리 공간을 변수마다 각각 할당하여 사용함


 그러나 공용체는 함께 선언된 변수들을 하나의 메모리에 할당하게 된다. 

단, 이때 함게 선언된 변수들중 사이즈가 가장 큰 것을 기준으로 할당 하게 된다


 예) int i , char j , double k  라고 공용체로 묶어 선언 할 경우 

모두  4 byte (int) , 1 byte (char) , 8 byte (double) , 중 용량이 가장 큰 8 byte 를 기준으로 메모리를 할 당하게 된다.  따라서 위 프로그램의 실행결과를 보면 i = 3 이 입력 되었음에도 불구하고 j=5 가 입력 된 후에는 , (동일 번지의) 메모리를 공유하고 있던 i에도 5가 입력 되어 버린 것이다. 

즉, 메모리 공간을 공용체로 선언된 모든 변수들이 같이 사용함.


- 공용체는 과거 마이크로 보드 처럼 메모리 용량이 작아 프로그램의 제약이 많았던 상황에서 주로 사용되었으며, 메모리를 순차적으로 사용하면 되는 프로그램에서 주로 사용된 기법이었다.  




▶ 프로그램 (답안 예시) : 

(이미지 클릭, 확대해서 보세요)


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



▶ 소스코드 다운로드 :  


42 공용체 (union) 이해하기.cpp




반응형
반응형

【 C 언어 】 #41 사용자 정의 데이터형( typedef ) 이해하기



 C++ 에서 사용되는 데이터형 등을 C언어에서도 사용 할 수 있도록 사용자가 정의하여 쓸 수 있는 데이터형을 말한다.  다르게 얘기하면 내장함수로 존재하지 않은 변수명을 프로그램 내에서 내장함수 인것 처럼 사용이 가능하다. 
즉, 사용자가 임의로 데이터형을 정의해서 사용할 수 있다.


▶ 문제  : C++의 내장 함수인 bool 형을 C 코딩툴에서도 사용 할 수 있도록 사용자 정의 데이터 형을(typedef) 이용하여 정의하고, 숫자 '1'을 입력을 받으면, 
'true'를 출력하고 숫자 '0'을 입력 받으면 'false'를 출력하고, 그 외 숫자를 입력 받으면 " 
1과 0 중에 하나를 입력하세요 " 라는 메세지를 출력 하는 프로그램을 작성하라.  

( 단, 본인은 C++ 이 지원 되는 코딩 툴에서 작성하기 때문에, 'bool' 은 이미 정의 되어 있다. 따라서 정의 되어 있지 않은 'bools'라는 변수명을 사용 하였다)


▶ 실행 결과 :


(이미지 클릭, 확대해서 보세요)




▶ 포인트 


- typedef 사용 형식 

- 위와 같이 선언 하고 나면, 'Condition' 이라는 변수를 int 형으로 다음과 같이 선언이 가능 하다.  " bools Condition "



▶ 프로그램 (답안 예시) : 


(이미지 클릭, 확대해서 보세요)



+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++




▶ 소스코드 다운로드 :  


41 사용자 데이터형(typedef) 이해하기.cpp





~~~~~~~~~~~~~~~~~~ 추가 설명 ~~~~~~~~~~~~~~~~~~~~~~~~~


'typedef' 문은 구조체 나 공용체, 열거형 등에서도 사용 할 수 있다. 


1). 구조체 사용 예시


typedef struct

{

int kor;

int eng;

int math;

} Average;


Average  AV;     // 원래는 'struct Average AV;' 라고 선언해야하나, 
AV.kor = 80;      // 이처럼 줄여서 사용할 수 있게 된다.



2). 공용체 사용 예시


typedef union

{

char ch;

int Count;

} Pluse;


Pluse  PP;             // 원래는 'union Pluse PP;' 라고 선언해야하나, 
PP.Count =  10;     // 이처럼 줄여서 사용할 수 있게 된다.




반응형

【 C 언어 】 #40 열거형(enum) 이해하기

Language/C & C++ 2018. 5. 4. 10:01 Posted by 엑소더스팩토리
반응형

【 C 언어 】 #40 열거형(enum) 이해하기



 열거형은 일정한 순서를 가진 상수를 만드는데 사용되며, 순차적으로 나열, 열거 한드는 뜻으로 열거형이라 한다. 


▶ 문제  : 열거형 선언 함수인 'enum'을 사용하여, 월, 화, ... , 일요일 , 순서로하여, 특정 요일에 임의 숫자를 지정 후  해당 숫자를 출력하도록 한다. (아래 실행결과 참조)


▶ 실행 결과 :



▶ 포인트 


- enum { Monday, Tuesday=1, Wednsday=2, Thursday, Friday, Saturday, Sunday }  와 같은 형태로 사용할 수 있다.

- enum 의 상수 값은 지정 하지 않으면 0부터 순서대로 할 당 된다. 

 (7개의 인자가 있고 모두 초기 값이 없는 경우 할당 되는 상수 값은 : 0~6 이다)

 (만약 첫 번째 인자의 초기값만 3으로 지정하면, 상수 값은 : 3~9 가 할당 된다)



▶ 프로그램 : 


(이미지 클릭, 확대보기 하세요)




+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++




▶ 소스코드 다운로드 :  

40 열거형 이해하기 코드.cpp







반응형
반응형

【 C 언어 】 #39 구조체 이해하기2 (배열, for문 활용)



 앞 글에서, 구조체를 이용하는 법에 대해 다루었고, 배열을 살짝 활용하는 것을 보았다.  본격적으로 구조체, 배열, for문 등을 이용한 프로그래밍을 통해 구조체에 좀 더 익숙해져 보도록 하자. 


▶ 문제  : 국,영,수 3과목, 각 10개의 점수에 대해 구조체 배열 및 for 문을 사용하여 1차 (국어="  ", 영어="  ", 수학="  ") ~ 10차(국어="  ", 영어="  ", 수학="  ") 성적 값을 화면에 출력 하라.



▶ 포인트 


- 구조체 속에 국, 영, 수 각각의 요소에 대해 배열로 10개의 데이터를 선언한다


- 배열의 인자 값을 for문을 사용하여 편하게 출력한다. 




▶ 프로그램 : 




▶ 실행 결과 :


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



▶ 연습 과제  :  위 프로그램에서 각 과목의 평균값 혹은 차수별 3과목 평균값을 추가로 구해서 출력 해보자.


 (잊지 말자~!  충분한 연습은 충분한 실력으로 되돌아 온다)


▶ 소스코드 다운로드 :  


38 구조체 이해하기4(배열for문).cpp






반응형
반응형

【 C 언어 】 #38 구조체 이해하기



 구조체는 구조적인 프로그래밍을 작성하기 위해 사용되며, 배열과 비슷한 구조를 띄고 있다. 배열과 다른 점은,  배열은 동일한 데이터형에 대하여 여러개를 정의 하는 것이고, 구조체는 서로 다른 데이터형을 하나의 묶음으로 처리(관리)하기 위해 사용되는 차이점이 있다. 또한 C++에서의 클래스(class)라는 개념으로 바뀌어 사용된다. 


▶ 문제  : 국,영,수 3과목 성적 값의 평균을 구하는 문제를 구조체를 사용하여 작성하라.



▶ 포인트 


- 구조체는 같은 유형의 데이터가 아니더라도 하나의 묶음(구조)으로 관리 할 수 있어 , 좀 더 편하게 프로그래밍을 짤 수 있게 해준다. 

- 묶어야 할 요소들을 "struct XXX" {  ...   };  형태로 선언 한다. 

- 메인 함수내에서 변수명과 함께 선언하게 되면(struct XXX YY; )  , 

  YY.kor = 100;   형태로 구조체 내에 있는 요소들을 활용 할 수 있다.



▶ 프로그램 : 




▶ 실행 결과 :


▶ 보충설명 :


- 구조체 이름은 서로 다를 수 있는 개체들을 묶은 템플릿의 이름에 해당 된다. 

  (주의 : 구조체 선언의 끝( '}' )에 ';' 세미콜론을 넣어야 한다.


- 구조체를 사용하기 위해서는 변수명을 하나 정하여 구조체를 선언해야 사용할 수 있다.   ( struct Average SCORE; )   주의 : 반드시 선언부 끝에 세미 콜론이 들어감.


- 구조체 사용은 SCORE.kor 형태로 ,  선언명(SCORE) 과 사용하고자 하는 요소값을 ' . ' 로 연결하여 사용한다.  

 (예, 국어 점수 kor에 100점 입력하기 : SCORE.kor = 100; )


 - 구조체를 배열 형태로 사용할 수 도 있다. 

 (예,  struct Average KOR[10];     : 국어 점수 10개를 배열 형태로 사용할  수 있다.  KOR[0] , KOR[1] , ....  KOR[9]   )

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



▶ 응용 연습 문제 1 :   위 프로그램을 기본으로 국어 점수 3개를 구조체 배열을 사용하여 평균값을 구하여라. 



▶ 프로그램1 :  (아래 코딩에서 빠진 영어, 수학 성적도 추가 해 넣으면 된다.)




▶ 실행 결과1 :




▶ 소스코드 다운로드 :  


38 구조체 이해하기.cpp


38 구조체 이해하기2.cpp






반응형

【 C 언어 】 #37 NULL 널 문자 이해하기

Language/C & C++ 2018. 5. 3. 11:03 Posted by 엑소더스팩토리
반응형

【 C 언어 】 #37 NULL 문자 이해하기



 문자열 길이를 구하는 문제를 통해 NULL 문자에 대해 이해 할 수 있다.  


▶ 문제  : 문자열 길이(예, abcdefg: 길이 7) 를 구하는 코드를 작성하라. 



▶ 포인트 


- 문자열의 끝은 항상 NULL('\0')문자 로 종료된다.

NULL 문자는 아스키 코드 값  '0' 이다

- 문자열 길이를 구하는 함수를 따로 작성하여 코딩한다.

- 문자형 포인터 변수(*pstr)를 사용하여 코딩한다.

- *pstr 은 pstr이 가리키는 번지에 저장되어 있는 값을 의미한다. 



▶ 프로그램 : 


# 이미지를 클릭하면 확대 되어 선명하게 보실 수 있습니다.


▶ 실행 결과 :


▶ 보충설명 :


- *pstr 은 pstr이 가리키는 번지에 저장되어 있는 값을 의미한다.  따라서 pstr은 번지(주소) 라는 것을 이해 해야 한다.

- pstr은 문자열의 선두 번지를 가리키고 있기 때문에, pstr의 번지가 1씩 증가(pstr++)함에  따라 *pstr의 값은 첫 번째 값 a 부터...  b, c, d, e, f, g, \0  처럼 된다.

- while문에서 NULL문자('\0') 의 아스키 값은 '0' 이기 때문에 문자열 끝을 알리는 NULL 문자를 만나면 while 문을 빠져 나오게 된다.

- pstr++;   은 pstr의 번지를 1만큼 증가 시킨다(pstr은 포인터 변수 이기 때문)

- len++;   은 문자열 길이 값을 1만큼 증가 시킨다


 문자열 'abcdefg' 가 메모리에 저장된 모습을 그림으로 그려 보면 아래와 같다.

문자열의 첫 번째 a가 저장된 번지를 '1000'번지라고 가정 해 보자.


# 이미지를 클릭하면 확대 되어 선명하게 보실 수 있습니다.


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



▶ 소스코드 다운로드 :  


37 NULL 넌 문자 이해하기-코드.cpp






반응형

【 C 언어 】 #36 문자열 포인터 이해하기

Language/C & C++ 2018. 4. 23. 17:28 Posted by 엑소더스팩토리
반응형

【 C 언어 】 #35 문자열 포인터 이해하기



 포인터 는 C언어에서 종종 중요하게 사용된다. 포인터를 이용하여 메모리로 직접 접근이 용의하고 하드웨어적인 부분을 직접 컨트롤 할 수 있기 때문이다.

다만 처음 개념 이해가 어려울 수 있으나 예제 내용을 바꾸어가며 테스트해 보면 비교적 쉽게 이해될 것이다. 

 앞선 글에서 정수형 변수를 가지고 포인터를 활용하는 법을 설명하였는데, 문자열도 문자열 포인터 변수로 선언하여 분신으로 사용 가능하다.  단, 이때는 분신연산자(&)를 붙이지 않고 선언한다. 예를 들면, "RasINO"를 'RINO'라는 문자열 포인터로  선언하게 되면, "RasINO"를 사용할 모든 곳에 RINO라고 사용할 수 있다.  또한 배열 포인터 형태로 사용하면 된다.


▶ 문제  : 문자열 "RasINO" 를 문자열 포인터 변수로 선언하고 출력하라.



▶ 포인트 


- 문자나 문자열은 puts();  함수를 이용하여 출력한다. 

- 문자열은 "  " 이중따움표로 표시한다.

- 문자열"RasINO"를 배열에 넣고 배열을 문자열 포인터로 지정한다



▶ 프로그램 : 




▶ 실행 결과 :


▶ 보충설명 :


string[0] 과 pstr[0]은 그 값이 같다

문자열 포인터 선언시에는 분신연산자 '&'를 사용하지 않음에 유의 한다. 

단, 배열의 특정 요소부터 출력시킬 때는 '&'를 사용해야 한다. 

(예, pstr2 = string; 

     puts (&psr2[1])   // 'sINO'  가 출력 됨)





+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



▶ 소스코드 다운로드 :  


36 문자열 포인터 이해하기-코드.cpp





반응형

【 C 언어 】 #35 포인터 이해하기

Language/C & C++ 2018. 4. 23. 14:02 Posted by 엑소더스팩토리
반응형

【 C 언어 】 #35 포인터 이해하기



 포인터 는 C언어에서 종종 중요하게 사용된다. 포인터를 이용하여 메모리로 직접 접근이 용의하고 하드웨어적인 부분을 직접 컨트롤 할 수 있기 때문이다.

다만 처음 개념 이해가 어려울 수 있으나 예제 내용을 바꾸어가며 테스트해 보면 비교적 쉽게 이해될 것이다. 

포인터 변수는 원변수의 분신의 역할을 하게 되고 원변수가 가지는 똑같은 값을 지닌다. 즉, 원변수의 값이 바뀌면 포인트 변수의 값이 똑 같은 값으로 바뀌며, 그 반대도 마찬 가지다. 


▶ 문제  : 변수 두 개를 선언후 각각의 포인터 변수를 선언하고 변수 내용을 바꾸면 포인터 변수의 내용도 바뀌는지 확인하는 프로그램을 작성하라.


▶ 포인트 


- mainA 변수에 포인터 변수 *ghost, mainB 변수에 포인터 변수 *pman 을 지정


- 포인터 변수 선언 :   int* ghost

- 지정 방법 :  변수명에 '&'를 붙이고 포인트 변수에 대입 ghost =&mainA 



▶ 프로그램 : 




▶ 실행 결과 :



▶ 보충설명 :


ghost = &manA; // manA의 분신으로 포인터 변수인 ghost를 지정 

*ghost = 1;       //분신 관계 이므로 *ghost에 입력한 1값이 manA에도 저장 됨

printf("manA = %d, *ghost=%d \n\n",manA, *ghost);  // 값 확인 

manA = 2; // manA에 2를 입력해도 분신 *ghost에 2가 저장됨 

printf("manA = %d, *ghost=%d \n\n",manA, *ghost);

pman = &manB; // manB의 분신으로 포인터 변수인 pman을 지정 

*pman = 3; // 분신인*pman에 3를 입력하면 manB에도 3이 저장됨 

printf("manB = %d, *pman=%d \n\n",manB, *pman);

pman = &manA; //manB의 분신으로 지정한 pman을 manA에 추가로 분신                      // 지정 하면 manB에는 분신이 없는(해제) 상태가 되고 

       // manA는 기존 분신 *ghost에 ,  *pman까지 새로 추가된다. 

*pman = 4;       // pman은 현재 manA의 분신이다. 

printf("manA=%d, *pman=%d, *ghost=%d, manB=%d,  \n\n", manA, *pman, *ghost, manB);

manA = 5;      // manA의 분신으로 ghost, pman 두개가 지정 되어 있다. 

printf("manA=%d, *pman=%d, *ghost=%d, manB=%d,  \n\n", manA, *pman, *ghost, manB);  

*ghost = 6;

printf("manA=%d, *pman=%d, *ghost=%d, manB=%d,  \n\n", manA, *pman, *ghost, manB);

manB = 7;     // manB 값을 바꾸어도 분신해제된 pman값은 변하지 않는다  

printf("manA=%d, *pman=%d, *ghost=%d, manB=%d,  \n\n", manA, *pman, *ghost, manB);



[ 코드에 실행시 결과 값 표시 ]




+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



▶ 소스코드 다운로드 :  


35 포인터 이해하기.cpp


반응형