요약: 계산기 디스패치
Coddy C 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 61개 중 37번째.
챌린지
쉬움디스패치 테이블(dispatch table)을 사용하여 계산기를 만드세요. 연산 코드를 해당 함수에 매핑하는 함수 포인터 배열을 생성한 다음, 이를 사용하여 계산을 수행합니다.
다음과 같은 프로그램을 작성하세요:
- 두 개의
int매개변수를 받고int를 반환하는 함수 포인터에 대해Operation이라는typedef를 생성합니다. - 네 가지 산술 함수를 정의합니다:
add— a + b를 반환sub— a - b를 반환mul— a * b를 반환divide— a / b를 반환 (정수 나눗셈)
main함수에서 디스패치 테이블을 생성합니다: 인덱스 0은 add, 인덱스 1은 sub, 인덱스 2는 mul, 인덱스 3은 divide인 4개의Operation함수 포인터 배열입니다.- 세 개의 입력값(두 개의 정수와 0-3 사이의 연산 코드)을 읽습니다.
- 연산 코드를 사용하여 디스패치 테이블의 인덱스를 참조하고 적절한 함수를 호출합니다.
- 결과를 출력합니다.
세 개의 입력을 받게 됩니다: 첫 번째 숫자, 두 번째 숫자, 그리고 연산 코드 (0은 add, 1은 sub, 2는 mul, 3은 divide).
출력은 연산 결과인 단일 정수여야 합니다:
7입력값이 10, 3, 1인 예시의 경우: 연산 코드 1은 디스패치 테이블에서 sub를 선택하므로, 10 - 3 = 7을 계산합니다.
여기서 핵심은 if나 switch 문 없이 배열 인덱싱을 사용하여 함수를 선택하는 것입니다. 디스패치 테이블은 다음과 같은 형태여야 합니다:
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;
}