/********************************************************************************
 
 
 
                     제작자: 신대용
 
                     제작일: 2005년 5월 7일
 
                     제작시작시간: 04시 05분
                     여기까지 제작시간: 1월 20일목요일 11시 35분(도중에 이런저런일이;;)

 

                     종료일: 2006년 1월 18일 7시 43분;;(ㅎㅎ 어쩌다 보니)
  
 
********************************************************************************/
 
Hierarchy
 
//Hierarchy가 무엇일까?
//Hierarchy가 없다면?
//Hierarchy의 예
 
 
 
1.Hierarchy가 뭐야?
계층제, 상급제, 계층이라고 사전에 나와있다. 생뚱맞네여;
말그대로 계층 구조 라는겁니다.
아.. 한문이라 말 그대로가 안되는군요... 한문이 이래서 싫습니다. 한문을 알아야만하거든요
1 단계,2단계 이런식으로 단계가 있는겁니다. 게임에서 레벨같은거죠, 레벨 1에서 한번에 7,80으로 점프할순 없죠 1,2,3,4 ... 이런식으로 점차 단계가 올라가다가 레벨이 다운되면 바로 밑 레벨로 가는 안좋은 경우도 생기죠^^
 
계단도 계층 구조랍니다. 1층에서 5층을 가려면 한층 한층 올라가야 하죠
또 3층에서는 2층과 4층 자신의 바로 위와 아래만 갈수있답니다.
5층에 올라가려면 4층에 가야지만 5층에 올라갈수있죠?
1층에 가려면 2층에 가야지만 1층으로 갈수있고요
 
어떤 것들을 계층구조로 만들어 놓으면 이렇게 자신의 바로 위와 아래만 접근할수있답니다.
그렇데 좋은점은 자신은 자신의 바로 위와 아래만 신경쓰면 된다는거예요 그 이하나 그이상에 있는것은 신경쓰지 않아도 되죠^^
아파트 4층에사는 저는 5층에서 시끄럽게 굴지 않으면 되고 3층에 폐가 되도록 뛰어다니지만 않으면 되죠, 6층이나 2층에 사는 사람은 신경쓰지 않아도 돼요^^
 
회사도 계층구조로 되어있어요 사장,부장,과장,대리 대충 이렇게 되어있다고 쳐볼까요?
사 장님이 "매출을 100% 늘려" 라고 부장님에게 지시하면 부장님은 어떻게 해서라도 해 내야겠죠? 여러가지 준비를 해서 과장님한테 지시하고 과장님도 대리에게 지시를 할거예요 그럼 대리는 시키는 대로 수단과 방법을 가리지 않고 지시한것을 해내야죠 하지만 부장님은 대리가 어떻게 일을 처리했는지 세세하게 알필요없죠 과장이 알아서 보고를 할테니까요 사장님도 과장이 어떻게 일을 처리했는지 몰라도 돼고요 역시나 부장이 보고를 할꺼예요^^ 만약에 대리가 일을 잘못했다면 대리는 과장님한테 혼나고 과장은 부장님에게 부장은 사장님에게 혼나겠지만요^^
 
컴퓨터의 구조도(눈에 보이는 구조 말고요^^) 계층 구조로 되어있답니다. low level에서 하는일을 high level에서는 신경쓰지 않아도돼요. 컴퓨터의 low level은 일반인이 이해하기에는 불가능 할정도로 상당히 복잡하답니다. 하지만 우리는 아무렇지 않게 컴퓨터를 쓰고있죠?^^ 다 계층구조 때문이랍니다.
 

2.Hierarchy가 없다면?
 큰일나죠.. 렙 1짜리 검사가 렙업 다한 법사한테 단검 들고 댐비는 꼴입니다.
108계단 맨위에서 맨 아래로 점프하면 다리 부러지는걸로 안끝나죠 ㅎㅎ
 
컴퓨터는 이미 개인이 혼자 개발하기에는 불가능에 가까울 정도로 복잡해져 있습니다.
 아무리 유능한 사람이라고해도 모든 부분에 능할수는 없죠 , 그나마 계층적으로 설계되어 있기 때문에 자기가 개발하는 부분과 인접하지 않는 부분은 신경쓰지 않아도 되기 때문에 컴퓨터 개발이 진행될수 있는 것 입니다. ^^ 프로그래밍도 마찬가지고요ㅎ
 

//1차로 여기까지 씀;

 구조에는 Hierarchy 이외에도 많은 구조들이 있고 Hierarchy 만으로는 부족한 부분이 있어서  Hierarchy만이 쓰이는 경우도있고 다른것들과 같이 쓰이는 경우도있어요. 그리고 어떤경우에서는 Hierarchy가 안좋을 때도 많답니다. 절대적이란건 없으니까요^^

 

 

3.Hierarchy의 예

 'Hierarchy는 보통 순차적으로 단계를 밟아야 하는 곳에 들어가는 경우가 많다'라고 하면 저 스스로 한 70점 정도 줄수있겠네요.(아쉽게도 아직 실력이 부족해서ㅎㅎ)

 프로그래밍에서는 컴파일 과정이 비슷하게 맞네요. (컴파일이란 우리가 만든 고급언어 소스를 기계가 이해할수있는 0,1로 이해 할수있는 이진파일로 바꿔주는 과정이예요)

컴파일과정은 각 단계별로 나뉘어져 있어서 일반적으로는 한번에 하지만 순차적으로 각 단계별 작업을 할 수도있어요. 나중에 가면 그렇게 하는 것이 왜 좋은지도 배우실수있어요

 가장 유명한 Hierarchy는 Internet OSI 7 Layer라는게 있는데요 인터넷을 구성하는 장비,처리등을 7개의 Layer(층)으로 나눠 놓은거예요. 각각의 Layer가 담당하는 기능은 다르고 인접한 Layer끼리만 신경을 쓰기 때문에 좀더 간단하게 인터넷을 개발할 수있게 되었어요. OSI 7 Layer는 개념적인 규정에 맞춰서 하드웨어나 소프트웨어들을 개발하기 때문에 2계층 하드웨어를 만드는곳에서는 1,2,3계층만 주로 신경쓰면되고 5계층의 프로그램을 만드는 프로그래머는 5,4계층만을 주로 신경쓰면 되는거랍니다.(인터넷 중에 Web은 5,6,7계층을 5계층으로 통합해서 처리)

OSI 7 Layer는 나중에 많이 접하실태니 여기서 다룰필요는 없을꺼 같네요 ㅎㅎ

 

 

 

4. 맺으며...

 

 처음에 프로그래밍을 공부하시는 분들은 Hierarchy가 어딧냐고 하실꺼예요 눈에 보이는 구조로도 있지만 주로 눈에 안보이는 구조로 되어있답니다. 그리고 Hierarchy를 실제로 피부로 느끼는것은 글쎄요 언제가 될까요 ㅎㅎ 컴퓨터의 구조라는게 사용자가 그것을 느끼지 못하면 못할수록더 잘 만들어진거니까ㅎㅎ

 정리하자면 Hierarchy는 일반 사용자는 몰라도 되지만 이미 사용하고 있어야 하고 프로그래머는 알고있어야 합니다. 이것을 통해서 더 쉽게 프로그래밍을 할수있고 필요할 때에는 Hierarchy적으로 프로그램을 만들어야 하니까요^^

 

 오랜만에 예~~~~전에 써놓은거 마저 썼는데 ㅎㅎ

역시 전 매일매일 쓰는건 안되나 봐요 한번에 쫙! 써야 하는데 ㅎㅎ

저작자 표시 비영리 동일 조건 변경 허락
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by dosuser(신대용) dosuser

/********************************************************************************
 
 
 
                     제작자: 신대용
 
                     제작일: 2005년 5월 7일
 
                     제작시작시간: 오후 10시 59분

                     제작종료시간: 오후 11시 42분

                     


                     알고넘어가야할것:변수는 하나의 값만 저장할수있다.
 
 
 
********************************************************************************/

 

월요일날 저희 학교 1학년들의 두번째 씨언어 테스트가 있답니다.

 

제 후배가 메신저에서 안된다며 질문을 했는데 어떤 실수를 했는지 살펴보겠습니다.^^

 

후배:

#include  <stdio.h>
//표준입력에서 글자를 하나씩 읽어서 영문자의 개수를 출력하는 프로그램을 작성하라
//
main()
{
        int c;
        c = getchar();
        while(c!=EOF){
                if((c>='A')&&(c<='Z'))
                        c++;
                c=getchar();
        }
        printf("개수:%d\n",c);
}


후배:오빠 여기서 모틀렷어요?ㅋㄷ

후배:앗알겟다

나:ㅋㅋㅋ

나:만화책 보고있었어 ^^

후배:ㅋㅋ오빠

후배: int n=0;

후배:하나더쓰고

후배:출력에서 콤마뒤에 n으로 바껏든데

후배:안되요 ㅋㅋ왜그럴까요?ㅋ

 

 

 

여기까지가 대화 내용이었습니다.

자 과연 무엇이 틀렸을까요? 처음 소스에서 후배가 말한대로 한후 문제가 해결됐을까요?

 

주석을 달면서 하나하나 따라가 보겠습니다. 안보셔도 되요^^

#include  <stdio.h>  //표준 입출력 함수를 사용하려면 include를 해야겠죠?
//표준입력에서 글자를 하나씩 읽어서 영문자의 개수를 출력하는 프로그램을 작성하라
//
main() //머 이렇게 축약시켜도 됩니다.

{
        int c; //외부로 부터 문자를 입력 받기 위해서 c라는 변수를 만들었네요
        c = getchar(); //입력을 받고
        while(c!=EOF){  //입력 받은 값이 입력의 종료를 나타내는 EOF가 아니라면
                if((c>='A')&&(c<='Z')) //입력 받은값이 대문자 A 와  Z 사이의 값이라면
                        c++; //c라는 변수의 값을 1증가
                c=getchar(); //입력을 받고 while문의 처음으로 갑니다.
        }
        printf("개수:%d\n",c); //c의 값을 출력
}

무엇이 문제라고 생각하세요?

 

 

문제 분석을 해볼까요?

표준입력에서 글자를 하나씩 읽어서 영문자의 개수를 출력하는 프로그램을 작성하라

글자를 하나씩 읽어서 -> 문자를 하나씩 입력 받는걸 말하는것이겠죠? getchar라는 함수가 떠올라야 합니다. scanf의 경우 엔터를 입력해야하니깐 좀 비효율적이죠

영문자의 갯수를 출력  -> 입력 받은 값이 영문자일경우 들어온 영문자의 갯수를 1증가 시켜야겠죠?

 

사용할 함수는? getchar 혹은 문자를 하나씩 입력받게 해주는 함수들

사용할 변수는? getchar로 입력 받은 문자를 저장할 변수, 영문자의 갯수를 저장할 변수

 

어때요? 어디서 실수를 했는지 아시겠나요?

 

변수가 하나 부족합니다.^^ 그래서 후배는 변수를 하나더 만들었죠

그런데 바꾸지 않은 부분이

c++;

이부분이었답니다. 나중에 해결 하게 됐죠

c라는 변수는 입력 받은 문자를 저장하는 변수이니까 거기에 1을 더해봤자 의미가 없습니다^^

입력 받은 영문자의 갯수를 저장할 변수에 1을 더해 줘야 하죠^^

 

 

변수는 말이죠~~

 

한번에 한가지만 저장할수있어요~

int형이면 한가지 숫자만  포인터 변수는 한개의 메모리 주소만^^

저장해야할게 2가지라면 변수는 2개만들어줘야해요^^

 

변수에서 중요한것이 무엇인지 다시한번 보자!

 

 

type (자료형)

자료형 , 타입, 종류라고 번역되죠 자료형이 라고 말할께요

int type의 변수에는 int만 넣어야 해요 float type을 넣으면 에러 

"친구"라는 type의 변수에 "적"이라는 type의 값을 넣으면 안되겠죠?

 

한번에 한가지만 저장할수있다

변수 하나는 자기 type에 해당하는 자료를 하나만 저장할수있어요

int a;

a=1;

a=10;

이라고 하면 a에 처음에 들어있던 1은 사라지고 10이 들어가는거예요^^

 

 

(이 밑은 구조체를 모르면 보지 마세요)

"어라 이상하다 struct로 만들어진 구조체는 여러개를 저장할수있는데요?'

라는 질문을 하실수있는데요 구조체 역시 구조체자체를 여러개 저장하고있을순 없어요^^

struct s{

        int a;

        int b;

};

struct s newtype;

이런 구조체가 있다면(구조체는 기본자료형을 붙여놓은거예요)

구조체 s 형으로 만든 구조체 변수 newtype는

newtype.a 에 자료를 하나

newtype.b 에 자료를 하나 저장할수있잖아요?^^ a,b에 각각 두개씩 저장할순없어요^^

 

 

 

시험볼때 문제가 나오면 제가 한것처럼 대강 필요한게 뭔지 적어보시면 좋아요^^

어떤 함수가 필요하고 어떻게 해결할건지 어떤 변수를 사용할지를 적어보면

나중에 빠뜨리고 실수하는게 좀 줄어들수있어요 ^^

 

그럼 또 내일 뵈요 ㅎㅎ

저작자 표시 비영리 동일 조건 변경 허락
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by dosuser(신대용) dosuser

/********************************************************************************

 

 

 

                     제작자: 신대용

 

                     제작일: 1월 18일 화요일

 

                     제작시작시간: 20시 36분

                     여기까지 제작시간: 1월 20일목요일 11시 35분(도중에 이런저런일이;;)

 

 

 

 

********************************************************************************/

 

 

1)함수의 형식

많은 분들이 함수를 어렵다고 하시는데 그건 함수의 형식을 외우지 않아서입니다.

C언어는 '언어'입니다. 따라서 문법이 있습니다. 이것을 지키지 않으면 안되는 것이죠^^

 

함수의 형식을 볼까요?

리턴 타입     함수이름(   인수들   ){

         함수의 내부

}

함수의 이름 (Name):

함수의 이름은 보통 그 함수가 하는일과 관련지어 정합니다. 그렇게 함으로써 함수가 하는일을 쉽게 알수있고 그 함수속에서 무슨일을 하는지 몰라도 되는 이점이 있습니다.함수의 이름역시 이름 명명법을 따릅니다. 첫글자는 영문으로 시작하며 특수문자는 사용할 수 없습니다. 빈칸도 안된답니다.

함수의 인수(Parameters,인자) :

간단히 설명하면 함수가 외부로부터 받아들이는 값을 인수, 혹은 인자라고 부릅니다. 외부에서 받아들이는 값이 없으면 void라고 써놓거나 비워 두세요, 인수로 들어온값은 변수에 대입되어 함수이 내부에서 사용되게 됩니다. 이부분을 상당히 어려워 하시는 분이 많아 이후에 좀더 자세하게 다루겠습니다.

리턴 타입(Return type) :

함수는 return 문을 이용하여 어떤 값(return value)을 함수를 부른 대상에게 알려줄 수 있습니다. return type은 결과값의 type과 동일 해야합니다. 만약 결과(return value)가 int라면 리턴타입도 int이어야 하고 반대로 리턴타입이 int라면 결과(return value)도 int이어야 합니다.  리턴타입을 명시해주지 않으면 일반적으로 int가 리턴타입으로 적용이 됩니다만 타입을 명시해 주지 않는 것은 좋은 프로그래밍 습관이 아닙니다.

*리턴값==결과값?!

"함수는 return 문을 이용하여 어떤 값(return value)을 함수를 부른 대상에게 알려줄 수 있습니다." 라고 말했습니다. 보통 입문서에서는 이 return 값을 결과값이라고도 합니다.  하지만 엄연히 결과값이라기 보다는 return value,리턴값이라고 말하는 것이 좋습니다.^^ 그차이는 많은 예제를 통해서 보여드리겠습니다.

 

 

형식에 맞는 함수의 예

예1)

int triple(int number){

    return number*3;

}

예2)

triple(int number){

    return number*3;

}

예3)

int multiple(int n1, int n2){

     return n1 * n2;

}

예4)

float div(float n1, float n2){

   return n1 / n2;

}

예5)

void print_hello(void){

     printf("Hello World!");

}

예6)

int print_hello(void){

     printf("Hello World!");

}   

형식이 틀린 함수의 예

예7)

int 1tri ple(int number){

    return number*3;

}

 

예8)

babo라는 형식이 없을경우

babo triple(int number){

    return number*3;

}

예9)

void triple(int number){

    return number*3;

}

 

 

예제 설명

예1)

이름 triple, 인수는 하나 int 형식의 값을 number라는 변수에 넣어서 사용한다.  return 문을 이용해서 number에다가 3을 곱한 값을 결과로 반환한다. 리턴 타입은 int 이다.

예2)

예1과 같지만 함수앞에 리턴타입 int를 명시하지 않았다. 형식에는 맞지만 매우 안좋은 스타일이다. 절대로 이렇게 하지 말기를 권장하며 상황에 따라 문법에 맞지 않다고 할 수 있다.

예3)

이름 multiple, 인수는 두 개 콤마( , )를 이용해서 구분한다. , int 형식의 값 2개를 받는다. 만약 호출할 때 하나라도 없으면 에러를 낼 수 있다. return 문을 이용하여 두값을 곱해서 결과로 반환한다.리턴 타입은 int이다.

예4)

이름 div, 인수는 두 개 , float형식이다. 두수(정수든 실수든)의 나눗셈의 결과는 float이므로 리턴타입으로 float를 사용하였다. rerurn type을 int로 하면 에러나 경고가 발생한다.

예5)

이름 hello_print, 인수는 없다. 인수가 없다는 것을 인수 부분에 void라고 써서 나타낸다. return type역시 어떤 형태의 결과 값도 나타내지 않는 다는 것을 나타내기 위해 void를 사용한다.  내부에서는 화면에 글자를 출력하는 pritnf문을 이용하여 화면에 문구를 출력한다.

주의 할 것은 여기서 말하는 return type, return value(리턴타입,리턴값)이 함수가 종료하면서 자신을 호출한 상대에게 알려주는 값이지(그래서 결과값이라 안하고 리턴값이라한다) 함수가 어떤일을 하고 나타내는 결과의 전부는 아니라는 것이다. 함수는 자신을 호출한 대상에게 리턴값을 알려줄 수도 있고 화면에 글을 출력할 수도있는등 많은 일을 할 수 있다.

예6)

예5와 같지만 리턴타입을 int로 썼다. 이 예제가 보여주는 것은 return value 가 없으면 return type은 의미가 없어진다는 것이다. 하지만 return value가 없을 때(return 문을 값없이 사용하는 경우는 함수를 종료한다는 의미로 쓴다 이럴 경웨 return value는 없지만 return 문은 존재 하게 된다)  void라고 명시해주는 것이 발생할지도 모르는 문제들을 막을 수 있다. return type이라는 것은 소스를 실행파일로 만들어주는 컴파일러,프로그래멍게 이 함수의return value 가 존재하는지 존재한다면 어떤 type을 가지는지 알려주는 기능을 하기 때문이다. 적어도 자신이 만든 함수를 다른 프로그래머가 이용할 때 혼란을 주어서는 안되겠죠?

예7)

함수의 이름이 잘못되었습니다. 함수의 이름에는 빈칸도, 앞에 숫자가 와서도 안돼겠죠?

예8)

함수의 리턴타입으로 없는 자료형(type)을 지정해주어서는 안됩니다. 물론 babo라는 type이 있으며, 동시에 return value가 babo type이면 지정해 주어도 됩니다.

예9)

return value가 있는데도 return type으로 void를 써주어서는 안됩니다.

 

여기까지 기초적인 형식의 문제였습니다. 그럼 계속해서 함수를 어떻게 사용하는지 알아보겠습니다.

 

 

 

2)함수의 사용

 

우선 함수를 사용한 예를 보겠습니다.

 

예10)

#include <stdio.h>

 

int main(void){

 

    printf("Hello World!");

 

    return 0;

}

 

 

결과:

 

Hello World!

 

 

 

해설:

1번 예제는 많은 프로그래밍 책에 있는 Hello World!출력 예제이고

'#include <stdio.h>'라는 것은 stdio.h라는 파일에들어 있는 함수들을 사용하겠다는 말입니다.

C언어는 main이라는 함수에서 부터 시작을 합니다.

printf라는 것은 화면에 글자를 출력하는 함수고 "Hello World!"라는 문구를 출력하라는 말입니다.

함수를 호출 하는 방법은 이렇듯 함수의 이름과 함수의 인자를 넣어주면 되는 것입니다.

 

함수이름(인자들)

 

return문은 함수를 종료 시키면서 함수의 결과값을 함수를 부른 대상에게 알려줍니다. return 문은 다음예제에서 살펴 보겠습니다.

 

 

 

 

 

 

예11)

#include <stdio.h>

 

int triple(int number){

    

    return number * 3;

}

 

int main(void){

    

    int result;

    

    result=triple(4);

    

    printf("%d\n",result);

 

    result= triple( triple(3) );

 

    prtinf("%d\n", result);

 

    return 0;

}

 

 

결과:

 

12

27

 

 

 

 

해설:

이번에는 새로운 함수를 만들었습니다.

triple이란 함수인데요 함수의 프로토 타입부분을 봅시다.(프로토 타입을 보면 함수가 무슨일을 하는지 알 수 있겠죠?)

 

int triple(int number)

 

함수의 이름

triple ,곱하기 3을 하는 함수라서 이런 이름을 붙였습니다.

이 함수의 결과값

int형태  

이 함수를 호출할 때 넣어주어야하는 값

int형태,  함수내부에서 이 값을 number라는 변수에 넣어서 처리

 

triple 함수의 내부:

 return number * 3;

return 문을 이용해서 number에다가 3을 곱한다음에 그 값을 결과값으로 넘깁니다.

 

Main 함수의 내부:

result = triple(4);

라는 부분이 있는데 이부분이 이 함수를 호출 하는 부분입니다. triple(4)의 결과를 result라는 변수에다가 넣으라는 말입니다.

"triple(4)" 이부분이 리턴값 12로 바뀐다고 생각하면 됩니다.

그 다음줄의 printf문은 result를 출력하라는 말입니다.(printf문의 사용법은 여기서 다루지 않겠습니다)

result= triple( triple(3) );

이 부분은 가장 안쪽에 있는 triple(3)부터 실행이 됩니다. triple(3)의 결과는 9가 됩니다. 9라는 결과 값이 다시 그 다음에 있는 triple함수의 인수로 들어갑니다.

triple( 9 )의 결과는 27,  이 값이 result에 들어갑니다.

result= triple( triple(3) );  ====>  result= triple( 9 ); ====> result= 9;

이렇게 생각하면 좀 쉽게 느껴지시나요?

함수의 리턴값(결과값)은 이렇듯 함수를 호출한 대상에게 넘어갑니다.  함수의 return type이라는 것은 이 결과값의 type,즉 정수형이냐(int) 실수형이냐(float)라는 것을 써 놓는 것입니다.

 

저작자 표시 비영리 동일 조건 변경 허락
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by dosuser(신대용) dosuser
신대용 2005-01-18 03:40:00 
조회 0  스크랩 0

/***********************************************************************

 

                        제작자: 신대용

                        제작일: 2005년 1월 18일 화요일(오늘 아침에 스터디 모임있을예정)

                        제작시작시간: 01시 1분

                        제작완료시간: 03시 41분

                      

                        주제:         플로우 컨트롤(1)

************************************************************************/

 

잡담.

한동안 강좌를 쓰지 않았다.

그 이유는 내 사이트를 완성 하자는 것 이었지만

어쩌다 보니 일이 이 상황까지 왔다.

요센 웹프로그래밍이 잘 안된다. 해도 금방 실증이 나버려서  ^^ 헤헤

이런저런 일이 있었지만 중요한건 "꾸준히" 이니깐 ^^

 

이 강좌는 내 소중한 사람들이 조금이라도 시간을 아껴 쓸수 있기를 바라면서 쓴다.

 

 

저는 일단 여러분을 프로그래밍을 처음 배우는 사람이라고 가정하고 강좌를 계속 할 것입니다. 그것이 오히려 강좌를 쓰는 저나 강좌를 보는 여러분이나 편할 것이라고 생각합니다.

자 그럼 강좌 시작합니다.

 

 

 

Flow control(플로우 컨트롤)?

 

 

오늘 부분은 그냥 읽으십시요 외울 필요없습니다.

 

어렵다고 다시 보거나 하지 마시고 그냥 쭉 읽어 주십시오.

 

 

Flow Control 이란건 다음에 어떤 명령이 실행될지 결정하는것 입니다.

 

명령의 흐름, 명령의 순서

 

실제 프로그래밍에서는  Flow Control을 신경쓰면서 프로그래밍 하지는 않습니다.

 

왜냐면 Flow Control이 프로그래밍의 일부이니깐요^^

 

동생이 있다고 가정해 봅시다.

 

동생한테 잔심부름을 시킵니다.

 

 

1. 슈퍼에 가서

2. 과자를 사와라

3. 아이스크림은 쮸쮸바가 있으면

4. 쮸쮸바를 사오고

5. 없으면 콘을 사와라

 

 

분명 명령이죠? 동생이 해야 할일을 하나씩 적었습니다.

 

실제로 컴퓨터는 한번에 하나씩 밖에 일을 못하니깐요^^ 바보죠 ㅎㅎ

 

만약 쮸쮸바가 있으면 4번 명령이 없으면 5번 명령이 실행됩니다.

 

명령의 흐름이 3번의 조건에 따라 결정됩니다.(여기서 조건은 쮸쮸바가 있느냐 없느냐)

 

이것이 바로 Flow Control입니다^^

 

 

명령의 흐름에는

 

순차, 분기, 반복이 있습니다. 물론 이것들은 하나씩 있는게 아니라 같이 섞여 있죠^^

 

순차는 하나씩 하나씩, 첫번째 명령,두번쨰 명령실행하는것이고 기본적으로 일어나는 일입니다.

 

분기는 첫번째 명령에서 갑자기 "어느 명령이 있는곳으로 가라"하면 그 명령이 있는 곳으로 가서 그 명령이 있는 곳에서 부터 명령을 시작하는 것입니다.

 

반복은 첫번째 명령 두번째 명령 다시 첫번째, 두번째 이런식으로 같은 명령을 반복해서 수행하는것입니다. 뭐 말하자면 두번째를 실행하고 첫번째로 분기 하는것이죠 ㅎㅎ

 

저의 하루를 이런 식으로 간단하게 나타내면

 

1.일어난다.

2.씻는다.

3.밥이 차려져 있는가?(조건)

4.그렇다면 밥을 먹는다.(참)

5.그렇지 않으면 밥을 직접 차려 먹는다.(거짓)

6.컴퓨터 공부를 한다.

7.배가 고프면(조건)

8.간식을 먹는다.(참)

9.잔다.(이 부분이 실행된후 1번으로 이동)

 

이렇게 나타낼수있겠네요. 1번에서 2번으로는 순차 적으로

3번 조건에 따라 4,5번중에 하나가 실행되고

7번에따라 8번이 실행되겠네요?(9번은 7번조건의 영향을 안받습니다)

 

중요한것은 3번 조건이 맞으면 4로 틀리면 5번으로 분기 한다는 것입니다.

이것을 조건 분기 라고 합니다. 요즘 프로그래밍에서는 보통 대부분이 그냥 분기는 없고 대부분 조건 분기 입니다.(일반적인 분기를 잘 사용하지 않는 이유는 나중에 말씀드리겠습니다.)

 

 

9번까지 실행이 되고나면 다시 1번으로 분기합니다. 이런 일이 계속 반복해서 일어나게 됩니다.

아무런 조건이 없으니 무한반복합니다. 무한 반복이라고 합니다.

 

방학동안만 이라는 조건이 있다면 방학동안만 이러한 생활이 반복 될수있습니다. 조건 반복이겠죠?

 

 

 

이렇게 해서 명령의 흐름에는 순차, 분기, 조건 분기, 반복, 조건 반복 있습니다.

 

 

프로그래밍에서 명령을 문(Statement)라고 합니다.

그래서 굳이 프로그램의 어떤부분을 말할때(순차는 기본적이므로 언급안합니다)

분기문, 반복문 이렇게 말하기도 한답니다.(대부분 조건이기에 조건이라는 말 역시 제외)

 

나중에 우리는 분기문으로는 goto

조건 분기문으로는 if, swtich등을 배울것이고

반복문으로는 for,while문등을 배울것입니다.

 

 

 

 

오늘 한것을 정리 하겠습니다.

 

Flow Control이란것은 프로그래머가 다음에 어떤 문(Statement)이 실행될지 조건문,반복문등을 사용하여서 조절 하는것 입니다.

 

한줄을 말하기가 이렇게 힘들다니 정말 몰랐습니다. 벌써 새벽 3시 38분이네요.

내일 약속있는데 ㅜㅜ

저작자 표시 비영리 동일 조건 변경 허락
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by dosuser(신대용) dosuser