#include <stdio.h>
#include <math.h>
void calculateEfficientChoice( char * name1, char * name2, float a, float b, int Px, int Py, int total) {
float x = 0.0f , y = 0.0f ;
float utility = 0.0f ;
float maxUtility = 0.0f , maxX = 0.0f , maxY = 0.0f ;
while ( 1 ) {
x += 0.1f ;
y = ( total - Px * x) / Py; // Px * x + Py * y = total이므로 y = (total - Px * x) / Py
if ( y <= 0 ) break ;
utility
= pow ( x
, a
) * pow ( y
, b
) ; // utility = x^a * y^b if ( maxUtility < utility) {
maxUtility = utility;
maxX = x;
maxY = y;
}
}
printf ( "\n %f개의 %s, %f개의 %s를 구매하면 최대 효용 %f를 얻을 수 있습니다.\n " , maxX
, name1
, maxY
, name2
, maxUtility
) ; }
int main( void ) {
int choice = 0 ;
printf ( "\n 콥-더글러스 효용 함수를 이용한 최적의 선택 계산기\n \n 1. 이 프로그램은 무슨 프로그램인가요?\n 2. 선택을 도와주세요!\n \n : " ) ;
if ( choice == 1 ) {
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 " ) ; } else if ( choice == 2 ) {
char name1[ 33 ] , name2[ 33 ] ; // 재화 1과 재화 2의 이름. 한글 16글자 입력 가능하게 넉넉히 33바이트 크기로 설정함.
float a = 0.0f , b = 0.0f ; // 재화 1과 재화 2의 선호도.
int Px = 0 , Py = 0 ; // 재화 1과 재화 2의 가격.
int total = 0 ; // 총 예산.
printf ( "\n 재화 1의 이름을 입력하세요: " ) ; scanf ( "%s" , name1
) ; // %s에다가 & 달면 오류 나는데? 교과서랑 다르네? (질문) printf ( "\n 재화 2의 이름을 입력하세요: " ) ; printf ( "\n 재화 1의 선호도를 입력하세요(0은 0%%, 1은 100%%이며 재화 1과 2의 선호도의 합은 1이어야 함): " ) ; printf ( "\n 재화 2의 선호도를 입력하세요(0은 0%%, 1은 100%%이며 재화 1과 2의 선호도의 합은 1이어야 함): " ) ; printf ( "\n 재화 1의 가격을 입력하세요: " ) ; printf ( "\n 재화 2의 가격을 입력하세요: " ) ;
calculateEfficientChoice( name1, name2, a, b, Px, Py, total) ;
} else printf ( "\n 잘못 입력하셨습니다.\n " ) ; }
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+Cgp2b2lkIGNhbGN1bGF0ZUVmZmljaWVudENob2ljZShjaGFyICpuYW1lMSwgY2hhciAqbmFtZTIsIGZsb2F0IGEsIGZsb2F0IGIsIGludCBQeCwgaW50IFB5LCBpbnQgdG90YWwpIHsKICAgIGZsb2F0IHggPSAwLjBmLCB5ID0gMC4wZjsKICAgIGZsb2F0IHV0aWxpdHkgPSAwLjBmOwogICAgZmxvYXQgbWF4VXRpbGl0eSA9IDAuMGYsIG1heFggPSAwLjBmLCBtYXhZID0gMC4wZjsKICAgIHdoaWxlICgxKSB7CiAgICAgICAgeCArPSAwLjFmOwogICAgICAgIHkgPSAodG90YWwgLSBQeCAqIHgpIC8gUHk7IC8vIFB4ICogeCArIFB5ICogeSA9IHRvdGFs7J2066+A66GcIHkgPSAodG90YWwgLSBQeCAqIHgpIC8gUHkKICAgICAgICBpZiAoeSA8PSAwKSBicmVhazsKICAgICAgICB1dGlsaXR5ID0gcG93KHgsIGEpICogcG93KHksIGIpOyAvLyB1dGlsaXR5ID0geF5hICogeV5iCiAgICAgICAgaWYgKG1heFV0aWxpdHkgPCB1dGlsaXR5KSB7CiAgICAgICAgICAgIG1heFV0aWxpdHkgPSB1dGlsaXR5OwogICAgICAgICAgICBtYXhYID0geDsKICAgICAgICAgICAgbWF4WSA9IHk7CiAgICAgICAgfQogICAgfQogICAgcHJpbnRmKCJcbiAlZuqwnOydmCAlcywgJWbqsJzsnZggJXPrpbwg6rWs66ek7ZWY66m0IOy1nOuMgCDtmqjsmqkgJWbrpbwg7Ja77J2EIOyImCDsnojsirXri4jri6QuXG4iLCBtYXhYLCBuYW1lMSwgbWF4WSwgbmFtZTIsIG1heFV0aWxpdHkpOwp9CgppbnQgbWFpbih2b2lkKSB7CiAgICBpbnQgY2hvaWNlID0gMDsKICAgIHByaW50ZigiXG4g7L2lLeuNlOq4gOufrOyKpCDtmqjsmqkg7ZWo7IiY66W8IOydtOyaqe2VnCDstZzsoIHsnZgg7ISg7YOdIOqzhOyCsOq4sFxuXG4gMS4g7J20IO2UhOuhnOq3uOueqOydgCDrrLTsiqgg7ZSE66Gc6re4656o7J246rCA7JqUP1xuIDIuIOyEoO2DneydhCDrj4TsmYDso7zshLjsmpQhXG5cbiA6ICIpOwogICAgc2NhbmYoIiVkIiwgJmNob2ljZSk7CgogICAgaWYgKGNob2ljZSA9PSAxKSB7CiAgICAgICAgcHJpbnRmKCJcbiDsiJjtlZkg6rWQ6rO87JeQ7IScIOyjvOygnCDtg5Dqtawg7Iuc6rCE7JeQICfsvaUt642U6riA65+s7IqkIO2aqOyaqSDtlajsiJgn7JeQIOuMgO2VtCDtlZnsirXtlZjsmIDsirXri4jri6QuIOydtCDtlajsiJjripQg7ISg7Zi464+E6rCAIOuLpOuluCDrkZAg7J6s7ZmU6rCAIOyeiOydhCDrlYwsIOuRkCDsnqztmZTrpbwg7Ja064qQIOu5hOycqOuhnCDqtazrp6TtlbTslbwg6rCA7J6lIO2BsCDrp4zsobHqsJDsnYQg64qQ64KEIOyImCDsnojsnYTsp4Drpbwg7JWM66Ck7KO864qUIOyngOyImCDquLDrsJgg7ZWo7IiY7J6F64uI64ukLiDsnqztmZQgMSDqtazrp6Trn4nsnYQgeCwg7J6s7ZmUIDIg6rWs66ek65+J7J2EIHksIOyerO2ZlCAxIOyEoO2YuOuPhOulvCBhLCDsnqztmZQyIOyEoO2YuOuPhOulvCBi65286rOgIO2VqeyLnOuLpCjri6gsIGEgKyBiID0gMSkuIOy9pS3rjZTquIDrn6zsiqQg7Zqo7JqpIO2VqOyImOuKlCB4XmEgKiB5XmIgPSAo7Zqo7Jqp7J2YIO2BrOq4sCkg6ry07J206rOgLCDsnbQg6rOh7ISgIOychOydmCDsoJAo7ISg7YOdKeydgCDshozruYTsnpDsl5Dqsowg7KCc6rO17ZWY64qUIOunjOyhseqwkOyduCDtmqjsmqnsnbQgKO2aqOyaqeydmCDtgazquLAp66GcIOydvOygle2VqeuLiOuLpC4g7J6s7ZmUIDHsnZgg6rCA6rKp7J2EIFB4LCDsnqztmZQgMuydmCDqsIDqsqnsnYQgUHnrnbwg7ZWp7Iuc64ukLiBQeCAqIHggKyBQeSAqIHkgPSAo7LSdIOyYiOyCsCnsnbTrnbzripQg7KeB7ISgIOychOydmCDsoJAo7ISg7YOdKeydgCDstJ0g67mE7Jqp7J20ICjstJ0g7JiI7IKwKeyeheuLiOuLpC4g7JyEIOqzoeyEoOqzvCDsp4HshKDsnZgg6rWQ7KCQ7JeQIO2VtOuLue2VmOuKlCDshKDtg50o7JiI66W8IOuTpOyWtCDsnqztmZQgMeydtCDsgqzqs7zsnbTqs6Ag7J6s7ZmUIDLqsIAg67CU64KY64KY7J28IOuVjCDqtZDsoJAgKDIsIDEp7J2AIOyCrOqzvCAy6rCc7JmAIOuwlOuCmOuCmCAx6rCc66W8IOq1rOunpO2VmOuKlCDshKDtg53snYQg7J2Y66+4KeydgCDstJ0g67mE7Jqp7J20ICjstJ0g7JiI7IKwKeydtOuptOyEnCDsoJzqs7XtlZjripQg66eM7KGx6rCQ7J20ICjtmqjsmqnsnZgg7YGs6riwKeyeheuLiOuLpC4g7KeB7ISg7J2AIOqzoOygle2VmOqzoCwgKO2aqOyaqeydmCDtgazquLApIOqwkuydhCDsoIHsoIjtnogg7KGw7KCI7ZWY64ukIOuztOuptCDsp4HshKDqs7wg6rOh7ISg7J20IOygke2VmOuKlCDrlYzqsIAg7Jik64qU642wLCDqt7gg7KCR7KCQ7JeQIO2VtOuLue2VmOuKlCDshKDtg53snbQg65iR6rCZ7J2AIOqwgOqyqeycvOuhnCDqsIDsnqUg7YGwIOunjOyhseqwkOydhCDso7zripQsIO2VqeumrOyggSDshKDtg53snoXri4jri6QuIOydtCDtlITroZzqt7jrnqjsnYAg6re4IOyngOygkOydhCDqs4TsgrDtlZjsl6wg7JWM66Ck7KSN64uI64ukLlxuIik7CiAgICB9IGVsc2UgaWYgKGNob2ljZSA9PSAyKSB7CiAgICAgICAgY2hhciBuYW1lMVszM10sIG5hbWUyWzMzXTsgLy8g7J6s7ZmUIDHqs7wg7J6s7ZmUIDLsnZgg7J2066aELiDtlZzquIAgMTbquIDsnpAg7J6F66ClIOqwgOuKpe2VmOqyjCDrhInrhIntnoggMzPrsJTsnbTtirgg7YGs6riw66GcIOyEpOygle2VqC4KICAgICAgICBmbG9hdCBhID0gMC4wZiwgYiA9IDAuMGY7IC8vIOyerO2ZlCAx6rO8IOyerO2ZlCAy7J2YIOyEoO2YuOuPhC4KICAgICAgICBpbnQgUHggPSAwLCBQeSA9IDA7IC8vIOyerO2ZlCAx6rO8IOyerO2ZlCAy7J2YIOqwgOqyqS4KICAgICAgICBpbnQgdG90YWwgPSAwOyAvLyDstJ0g7JiI7IKwLgogICAgICAgIHByaW50ZigiXG4g7J6s7ZmUIDHsnZgg7J2066aE7J2EIOyeheugpe2VmOyEuOyalDogIik7CiAgICAgICAgc2NhbmYoIiVzIiwgbmFtZTEpOyAvLyAlc+yXkOuLpOqwgCAmIOuLrOuptCDsmKTrpZgg64KY64qU642wPyDqtZDqs7zshJzrnpEg64uk66W064SkPyAo7KeI66y4KQogICAgICAgIHByaW50ZigiXG4g7J6s7ZmUIDLsnZgg7J2066aE7J2EIOyeheugpe2VmOyEuOyalDogIik7CiAgICAgICAgc2NhbmYoIiVzIiwgbmFtZTIpOwogICAgICAgIHByaW50ZigiXG4g7J6s7ZmUIDHsnZgg7ISg7Zi464+E66W8IOyeheugpe2VmOyEuOyalCgw7J2AIDAlJSwgMeydgCAxMDAlJeydtOupsCDsnqztmZQgMeqzvCAy7J2YIOyEoO2YuOuPhOydmCDtlansnYAgMeydtOyWtOyVvCDtlagpOiAiKTsKICAgICAgICBzY2FuZigiJWYiLCAmYSk7CiAgICAgICAgcHJpbnRmKCJcbiDsnqztmZQgMuydmCDshKDtmLjrj4Trpbwg7J6F66Cl7ZWY7IS47JqUKDDsnYAgMCUlLCAx7J2AIDEwMCUl7J2066mwIOyerO2ZlCAx6rO8IDLsnZgg7ISg7Zi464+E7J2YIO2VqeydgCAx7J207Ja07JW8IO2VqCk6ICIpOwogICAgICAgIHNjYW5mKCIlZiIsICZiKTsKICAgICAgICBwcmludGYoIlxuIOyerO2ZlCAx7J2YIOqwgOqyqeydhCDsnoXroKXtlZjshLjsmpQ6ICIpOwogICAgICAgIHNjYW5mKCIlZCIsICZQeCk7CiAgICAgICAgcHJpbnRmKCJcbiDsnqztmZQgMuydmCDqsIDqsqnsnYQg7J6F66Cl7ZWY7IS47JqUOiAiKTsKICAgICAgICBzY2FuZigiJWQiLCAmUHkpOwogICAgICAgIHByaW50ZigiXG4g7LSdIOyYiOyCsOydhCDsnoXroKXtlZjshLjsmpQ6ICIpOwogICAgICAgIHNjYW5mKCIlZCIsICZ0b3RhbCk7CgogICAgICAgIGNhbGN1bGF0ZUVmZmljaWVudENob2ljZShuYW1lMSwgbmFtZTIsIGEsIGIsIFB4LCBQeSwgdG90YWwpOwogICAgfSBlbHNlIHByaW50ZigiXG4g7J6Y66q7IOyeheugpe2VmOyFqOyKteuLiOuLpC5cbiIpOwp9