티스토리 뷰

Application/C/C++

[강좌] 블럭쌓기 만들기 7일차

알 수 없는 사용자 2011. 8. 21. 08:38

강좌에 들어가기 전에..

어떠신가요? 이제 슬슬 뭔가 해볼만 하지요? 1주차는 걍 하품만 하셨을거고 ㅎㅎ

뭐.. 해보고싶은걸 해봐야 재미가 있을텐데..

이거 뭐 중요한건 안 가르쳐 주는거 같고.. 우려먹기만 하는것처럼 보일수도 있겠습니다만.. ㅎㅎ

전 길잡이만 해드리는거지, 밥을 떠 먹여드리는게 아니라서 말이죠..

떠먹여주는 프로그래밍을 하시려면 큰 학원으로 가십시오.

아무것도 모른다 해도, 취업도 잘 시켜줄겁니다.

하지만 장담하건대, 이것조차 “이해하기 싫어서”(어려워서가 아닙니다) 하지 않으시는거라면, 뭘 하시더라도 성공하기 어려우실겁니다..

공부든 요리든 프로그래밍이든간에 하면 할수록 숙달됩니다.

뭐든 하면 할수록 어려워지고 또 재미있어지는게 인생입니다.

 

반복문. 내가 제일 하기 싫은게 똑같은일 계속 하는건데!! 시키자.

똑같은일 계속 하는거 싫으시죠?

그러니, 논리적 계산은 사람이 하고 산술적 계산은 컴퓨터를 시키면 되는겁니다.

그냥 반복되는거 다 하기싫겠지만 컴터한테 ‘야 이거 해’라고 하면 ‘어떻게?’라고 물어보지요.

근데 컴터는 ‘몰라’라는 말은 모릅니다 ㅋㅋ

어쨌거나 반복을 시키는 방법은 여러가지가 있습니다.

1부터 100까지 세는 프로그램을 3회째 우려먹기하고 있기는 한데, 또 우려먹겠습니다 ㅎㅎ

가장 일반적인 for 가 있지요.

#include <stdio.h>
int main()
{
  const int min = 1, max = 100;
  int i, sum = 0, oddsum = 0, evensum = 0;
  for(i = min; i <= max; i++)
    sum += i;
  printf("%d~%d까지 모두 더한 결과는 %d입니다.\n", min, max, sum);
  return 0;
}

for ( 변수초기화; true일때 실행; 변수값 변화 ) 명령or블럭

 

그리고 while이 있겠구요..

#include <stdio.h>
int main()
{
        const int min = 1, max = 100;
        int i = 0, sum = 0;
        while(i<max)
        {
                i++;
                sum+=i;
        }
        printf("%d~%d까지 모두 더한 결과는 %d입니다.\n", min, max, sum);
        return(0);
}

while ( 조건문, true 일 경우 실행 ) 명령or블럭

 

do-while 도 있지요.

#include <stdio.h>
int main()
{
        const int min = 1, max = 100;
        int i = 0, sum = 0;
        do 
        {
                i++;
                sum+=i;
        } while(i<max);
        printf("%d~%d까지 모두 더한 결과는 %d입니다.\n", min, max, sum);
        return(0);
}

뭐 걍 while이 앞에 오냐 뒤에 오냐 차이긴 한데.. 일단 한번 하고 보느냐 안 하느냐 차이입니다..

논리적으로 그림이 잘 그려졌다면 둘중의 하나를 선택할 이유도 없겠습니다만, 둘다 알고 있으면 도움되는것이 상당할겁니다..

 

매우 비추하지만 goto 를 이용하는 방법도 있습니다..

#include <stdio.h>
int main()
{
  const int min = 1, max = 100;
  int i = 0, sum = 0;
plus:
  i++;
  sum+= i;
  if(i<max) goto plus;
  printf("%d~%d까지 모두 더한 결과는 %d입니다.\n", min, max, sum);
  return(0);
}

goto 한두개 쓸때야 모르겠습니다만, 여러개 쓰다보면 헷갈리기 시작합니다.

요즘은 아예 쉘 스크립트에서도 함수를 지원하는 경우가 많으니 goto는 가능하면 안 쓰도록 합시다.

 

반복문을 설명하자면 또 빠질수 없는것이, continue와 break입니다.

#include <stdio.h>
int main()
{
  const int min = 1, max = 100;
  int i, sum = 0;
  for(i = min; i <= max; i++)
  {
     if(i == 50) continue;
     sum = sum + i;
  }
  printf("%d~%d까지 50번째를 빼고 모두 더한 결과는 %d입니다.\n", min, max, sum);
  return 0;
}

continue는 이렇게 쓰고..

#include <stdio.h>
int main()
{
  const int min = 1, max = 100;
  int i, sum = 0;
  for(i = min; i <= max; i++)
  {
     if(i == 50) break; 
     sum = sum + i;
  }
  printf("%d~%d까지 50 전까지만 더한 결과는 %d입니다.\n", min, max, sum);  
  return 0;
}

요것이 break 입니다.

설명하기가 좀 거시기하므로, 실행해서 확인해보시는게 빠를겁니다.

continue와 break는 유용하게 사용되지만, 생각보다 논리 오류가 많이 발생하니 가능하면 그림을 많이 그려보도록 하세요.

 

이런식으로 반복문을 이용하시면 됩니다.

멀티코어(프로세싱)에서는 조금 다를수 있겠습니다만, 그건 나중에 쓸때 생각하셔도 되고..

어차피 openMP라던가 Threading Building Block같은 툴들이 있으니 나중에 그런것들 사용법을 익히세요..

 

한번씩 해보셔도 좋고, 그냥 눈으로만 보셔도 상관없습니다.

오늘 강좌는 이것으로 끝입니다.