티스토리 뷰

프로그램에서 if 문은 매우 자주 쓰입니다. 그리고 원하는 조건을 잘 표현해서 if와 elif 문장을 구성하는 것이 프로그래밍에서는 절대적으로 중요한 기술입니다. 이번 회차에서는 이것을 좀더 구체적으로 살펴보겠습니다.

컴퓨터는 0과 1을 이용해 만들어지는 기계라고 합니다. 컴퓨터는 참 거짓을 잘 이해하고 그것을 이용해서 우리는 작업지시서를 만들 수 있습니다. 이러면 이걸 하고 저러면 저렇게 하고... 참이라고 생각되는 것들이 모여서 지식이 됩니다. 그리고 그런 것들이 자율자동차가 멈출 것인지 엑셀을 밟을 것인지 판단하기 위한 상태를 표현하게 되고 로봇이 동작하기 위한 알고리즘이 됩니다. 논리는 컴퓨터가 동작하는 가장 밑바탕이 되는 원리입니다. 컴퓨터 논리는 원래 논리학 또는 수학의 영역에 있던 많은 것을 가져와 만들어졌습니다. 그래서 여기서 논리라고 하는 것을 잠시 살펴보겠습니다.

명제는 참거짓을 판별할 수 있는 문장 또는 값입니다. 명제에 논리 연산자를 적용하여 새로운 명제를 만들 수 있습니다. 논리 연산자는 AND, OR, NOT 같은 연산자입니다. 예를 들면 다음과 같은 명제들을 가지고 있다고 가정해 보겠습니다.

  • 숫자 a는 50보다 크다
  • 숫자 a는 60보다 작다
  • 숫자 a는 3의 배수다
  • 숫자 a는 5의 배수가 아니다

이 문장들은 이름 a가 가진 값과 숫자를 비교하면 참 거짓이 판별될 수 있습니다. 크거나 같고는 >=라는 기호로 표현됩니다. a가 숫자를 가지고 있으면 명제가 될 수 있는 것이지요. 그러면 위의 명제들을 이용해서 다음과 같은 새로운 명제를 만들수 있습니다. AND는 그리고, ~이고와 같이 동시에 만족되는 경우에 참이고 OR는 ~거나 또는 처럼 둘중의 하나가 만족되면 참이 됩니다. NOT은 참거짓을 반대로 만드는 연산이지요.

예를 들어 "나는 초등학생이고 마라톤을 좋아한다" 라는 문장은 두 가지 명제 "나는 초등학생이다" 와 "나는 마라톤을 좋아한다" 의 AND 입니다. 둘다 참이어야 이 문장이 참이 되지요. 한편 "나는 초등학생이거나 마라톤을 좋아한다"라면 둘 중의 하나만 참이어도 참이 됩니다. 또한 "나는 초등학생이가 마라톤을 좋아한다는 것은 사실이 아니다"라고 하면 AND 명제의 부정이 됩니다. 즉 AND 명제가 거짓이면 참이 되죠. 그러니까 "나는 초등학생이 아니거나 마라톤을 좋아하지 않는다"라는 뜻이 됩니다.

숫자 a에 대한 성질을 나타낸 문장을 논리식으로 표현할 수 있습니다. 다음은 몇가지 예를 보여줍니다.

숫자 a는 50보다 크고 60보다 작다 (a > 50) AND (a < 60) a=55면 참, a=66이면 거짓
숫자 a는 50보다 크고 3의 배수다 (a > 50) AND (a % 3 == 0) a=54면 참, a=55면 거짓
숫자 a는 60보다 작고 5의 배수가 아니다 (a < 60) AND NOT(a % 3 == 0) a=35면 참, a=61이면 거짓
숫자 a는 3의 배수거나 5의 배수다 (a % 3 ==0) OR (a % 5 == 0) a가 6이면 참, a=7이면 거짓
    그럼 이번에는 좀더 복잡한 예를 살펴보겠습니다. 여러 명제가 AND, OR, NOT으로 결합하여 하나의 긴 명제가 될 수 있습니다.
  • 숫자 a는 50보다 크고 60보다 작고 또 3의 배수면서 5의 배수는 아니다

이 문장을 논리식으로 표시해 본다면 다음과 같이 될 것입니다.

  • a >= 50 AND a < 70 AND a % 3 == 0 AND a % 5 == 0

논리식은 이름이 가진 값에 대해 조건을 표현할 수 있습니다. a는 사용자가 입력으로 준 값이거나 센서에서 읽어들인 값이거나 또는 네트워크를 통해 전달된 값이 될 수도 있습니다. 이 값에 대해 우리는 어떤 성질을 만족하는지 검사할 수 있고 그 경우에 원하는 일을 수행하도록 프로그램을 작성할 수 있습니다.

  • 숫자 a는 50보다 크거나 같고 60보다 작으면서 3의 배수이거나 5의 배수다
  • a >= 50 AND a < 60 AND (a % 3 == 0 OR a % 5 == 0)
    참이 되는 a의 값: 50, 51, 54, 55, 57
  • 숫자 a는 50보다 크거나 같고 60보다 작으면서 3의 배수가 아니고 5의 배수도 아니다
  • a >= 50 AND a < 60 AND NOT(a % 3 == 0) AND NOT(a % 5 == 0)
    참이 되는 a의 값: 52, 53, 56, 58, 59
  • 숫자 a는 50보다 크거나 같고 60보다 작으면서  2의 배수가 아니다
  • a >= 50 AND a < 60 AND NOT (a % 2 == 0)
    참이 되는 a의 값: 51, 53, 55, 57, 59

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함