Menu
Coddy logo textTech

요약: 계산기 디스패치

Coddy C 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 61개 중 37번째.

challenge icon

챌린지

쉬움

디스패치 테이블(dispatch table)을 사용하여 계산기를 만드세요. 연산 코드를 해당 함수에 매핑하는 함수 포인터 배열을 생성한 다음, 이를 사용하여 계산을 수행합니다.

다음과 같은 프로그램을 작성하세요:

  1. 두 개의 int 매개변수를 받고 int를 반환하는 함수 포인터에 대해 Operation이라는 typedef를 생성합니다.
  2. 네 가지 산술 함수를 정의합니다:
    • add — a + b를 반환
    • sub — a - b를 반환
    • mul — a * b를 반환
    • divide — a / b를 반환 (정수 나눗셈)
  3. main 함수에서 디스패치 테이블을 생성합니다: 인덱스 0은 add, 인덱스 1은 sub, 인덱스 2는 mul, 인덱스 3은 divide인 4개의 Operation 함수 포인터 배열입니다.
  4. 세 개의 입력값(두 개의 정수와 0-3 사이의 연산 코드)을 읽습니다.
  5. 연산 코드를 사용하여 디스패치 테이블의 인덱스를 참조하고 적절한 함수를 호출합니다.
  6. 결과를 출력합니다.

세 개의 입력을 받게 됩니다: 첫 번째 숫자, 두 번째 숫자, 그리고 연산 코드 (0은 add, 1은 sub, 2는 mul, 3은 divide).

출력은 연산 결과인 단일 정수여야 합니다:

7

입력값이 10, 3, 1인 예시의 경우: 연산 코드 1은 디스패치 테이블에서 sub를 선택하므로, 10 - 3 = 7을 계산합니다.

여기서 핵심은 ifswitch 문 없이 배열 인덱싱을 사용하여 함수를 선택하는 것입니다. 디스패치 테이블은 다음과 같은 형태여야 합니다:

Operation ops[4] = {add, sub, mul, divide};

그런 다음 ops[code](a, b)를 사용하여 함수를 호출하세요.

직접 해보기

#include <stdio.h>

// TODO: 두 개의 int 매개변수를 받고 int를 반환하는 함수 포인터에 대해
// 'Operation'이라는 typedef를 생성하세요


// TODO: 네 가지 산술 함수(add, sub, mul, divide)를 정의하세요


int main() {
    // 입력 읽기
    int a, b, code;
    scanf("%d", &a);
    scanf("%d", &b);
    scanf("%d", &code);
    
    // TODO: 디스패치 테이블(4개의 Operation 함수 포인터 배열)을 생성하세요
    // Operation ops[4] = { ... };
    
    // TODO: 연산 코드를 사용하여 적절한 함수를 호출하고
    // 결과를 저장하세요
    int result;
    
    // 결과 출력
    printf("%d\n", result);
    
    return 0;
}

Object Oriented Programming의 모든 레슨