fork download
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. void calculateEfficientChoice(char *name1, char *name2, float a, float b, int Px, int Py, int total) {
  5. float x = 0.0f, y = 0.0f;
  6. float utility = 0.0f;
  7. float maxUtility = 0.0f, maxX = 0.0f, maxY = 0.0f;
  8. while (1) {
  9. x += 0.1f;
  10. y = (total - Px * x) / Py; // Px * x + Py * y = total이므로 y = (total - Px * x) / Py
  11. if (y <= 0) break;
  12. utility = pow(x, a) * pow(y, b); // utility = x^a * y^b
  13. if (maxUtility < utility) {
  14. maxUtility = utility;
  15. maxX = x;
  16. maxY = y;
  17. }
  18. }
  19. printf("\n %f개의 %s, %f개의 %s를 구매하면 최대 효용 %f를 얻을 수 있습니다.\n", maxX, name1, maxY, name2, maxUtility);
  20. }
  21.  
  22. int main(void) {
  23. int choice = 0;
  24. printf("\n 콥-더글러스 효용 함수를 이용한 최적의 선택 계산기\n\n 1. 이 프로그램은 무슨 프로그램인가요?\n 2. 선택을 도와주세요!\n\n : ");
  25. scanf("%d", &choice);
  26.  
  27. if (choice == 1) {
  28. printf("\n 수학 교과에서 주제 탐구 시간에 '콥-더글러스 효용 함수'에 대해 학습하였습니다. 이 함수는 선호도가 다른 두 재화가 있을 때, 두 재화를 어느 비율로 구매해야 가장 큰 만족감을 느낄 수 있을지를 알려주는 지수 기반 함수입니다. 재화 1 구매량을 x, 재화 2 구매량을 y, 재화 1 선호도를 a, 재화2 선호도를 b라고 합시다(단, a + b = 1). 콥-더글러스 효용 함수는 x^a * y^b = (효용의 크기) 꼴이고, 이 곡선 위의 점(선택)은 소비자에게 제공하는 만족감인 효용이 (효용의 크기)로 일정합니다. 재화 1의 가격을 Px, 재화 2의 가격을 Py라 합시다. Px * x + Py * y = (총 예산)이라는 직선 위의 점(선택)은 총 비용이 (총 예산)입니다. 위 곡선과 직선의 교점에 해당하는 선택(예를 들어 재화 1이 사과이고 재화 2가 바나나일 때 교점 (2, 1)은 사과 2개와 바나나 1개를 구매하는 선택을 의미)은 총 비용이 (총 예산)이면서 제공하는 만족감이 (효용의 크기)입니다. 직선은 고정하고, (효용의 크기) 값을 적절히 조절하다 보면 직선과 곡선이 접하는 때가 오는데, 그 접점에 해당하는 선택이 똑같은 가격으로 가장 큰 만족감을 주는, 합리적 선택입니다. 이 프로그램은 그 지점을 계산하여 알려줍니다.\n");
  29. } else if (choice == 2) {
  30. char name1[33], name2[33]; // 재화 1과 재화 2의 이름. 한글 16글자 입력 가능하게 넉넉히 33바이트 크기로 설정함.
  31. float a = 0.0f, b = 0.0f; // 재화 1과 재화 2의 선호도.
  32. int Px = 0, Py = 0; // 재화 1과 재화 2의 가격.
  33. int total = 0; // 총 예산.
  34. printf("\n 재화 1의 이름을 입력하세요: ");
  35. scanf("%s", name1); // %s에다가 & 달면 오류 나는데? 교과서랑 다르네? (질문)
  36. printf("\n 재화 2의 이름을 입력하세요: ");
  37. scanf("%s", name2);
  38. printf("\n 재화 1의 선호도를 입력하세요(0은 0%%, 1은 100%%이며 재화 1과 2의 선호도의 합은 1이어야 함): ");
  39. scanf("%f", &a);
  40. printf("\n 재화 2의 선호도를 입력하세요(0은 0%%, 1은 100%%이며 재화 1과 2의 선호도의 합은 1이어야 함): ");
  41. scanf("%f", &b);
  42. printf("\n 재화 1의 가격을 입력하세요: ");
  43. scanf("%d", &Px);
  44. printf("\n 재화 2의 가격을 입력하세요: ");
  45. scanf("%d", &Py);
  46. printf("\n 총 예산을 입력하세요: ");
  47. scanf("%d", &total);
  48.  
  49. calculateEfficientChoice(name1, name2, a, b, Px, Py, total);
  50. } else printf("\n 잘못 입력하셨습니다.\n");
  51. }
Success #stdin #stdout 0s 5296KB
stdin
Standard input is empty
stdout
 콥-더글러스 효용 함수를 이용한 최적의 선택 계산기

 1. 이 프로그램은 무슨 프로그램인가요?
 2. 선택을 도와주세요!

 : 
 잘못 입력하셨습니다.