Menu
Coddy logo textTech

요약: 계산기 디스패치

Coddy C 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 61개 중 37번째.

challenge icon

챌린지

쉬움

dispatch table을 사용하여 계산기를 만드세요. operation code를 해당 함수에 매핑하는 함수 pointer의 array를 만든 다음, 이를 사용하여 계산을 수행합니다.

다음 작업을 수행하는 프로그램을 작성하세요:

  1. int parameters를 받고 intreturns하는 function pointer를 위한 typedef Operation을 만듭니다.
  2. 네 개의 arithmetic functions를 정의합니다:
    • add: a + b를 returns
    • sub: a - b를 returns
    • mul: a * b를 returns
    • divide: a / b를 returns (정수 나눗셈)
  3. main에서 dispatch table을 만듭니다. 이는 4개의 Operation function pointers로 이루어진 array이며, index 0은 add, index 1은 sub, index 2는 mul, index 3은 divide입니다.
  4. 세 개의 입력을 읽습니다: 두 개의 정수와 operation code (0-3)
  5. operation code를 사용하여 dispatch table의 index로 삼고 appropriate function을 call합니다.
  6. result를 출력합니다.

세 개의 입력을 받습니다: 첫 번째 숫자, 두 번째 숫자, 그리고 operation code (add는 0, sub는 1, mul은 2, divide는 3).

출력은 operation의 result인 단일 정수여야 합니다:

7

입력이 10, 3, 1인 이 예제에서는 operation code 1이 dispatch table에서 sub를 선택하므로, 10 - 3 = 7을 계산합니다.

여기서 핵심은 array indexing을 사용하여 function을 선택하는 것입니다. if 또는 switch statements가 필요하지 않습니다. dispatch table은 다음과 같은 형태여야 합니다:

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

그런 다음 다음과 같이 function을 call합니다: ops[code](a, b)

직접 해보기

#include <stdio.h>

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


// TODO: 네 개의 산술 함수 정의: add, sub, mul, divide


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

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: 온라인 C 컴파일러