تالار گفتمان مانشت
عملکرد کاما " , " در زبان ++C - نسخه‌ی قابل چاپ

عملکرد کاما " , " در زبان ++C - enofcom - 03 اردیبهشت ۱۳۹۸ ۰۲:۳۷ ب.ظ

سلام دوستان.. قطعه کد زیر عمل ضرب دو عدد رو انجام میده. میخوام بدونم عملکرد کاما " , " اینجا دقیقا چکار میکنه؟ مثلا در خط: (return a+multiply(a,b-1 اگر a=4 و b=5 بدیم، میشه (۴,۴)+۴ خب این ۴,۴ یعنی چی در هم ضرب میشن؟

سوال بعدی اینکه تو همین برنامه return a رو به return 1 تغییر دادم و جواب بهم ریخت. اگه کسی بتونه مرحله به مرحله نحوه ذخیره شدنش تو پشته و نحوه محاسبش رو بگه ممنون میشم.
}()int main
;int i,ii,p
;cin>>i>>ii
;(p=multiply(i,ii
;cout<<p
{

}(int multiply(int a, int b
;if(b==1) return a
;(else return a+multiply(a,b-1
{

RE: عملکرد کاما " , " در زبان ++C - ph0en1x - 03 اردیبهشت ۱۳۹۸ ۰۸:۳۴ ب.ظ

(۰۳ اردیبهشت ۱۳۹۸ ۰۲:۳۷ ب.ظ)enofcom نوشته شده توسط:  سلام دوستان.. قطعه کد زیر عمل ضرب دو عدد رو انجام میده. میخوام بدونم عملکرد کاما " , " اینجا دقیقا چکار میکنه؟ مثلا در خط: (return a+multiply(a,b-1 اگر a=4 و b=5 بدیم، میشه (۴,۴)+۴ خب این ۴,۴ یعنی چی در هم ضرب میشن؟

سوال بعدی اینکه تو همین برنامه return a رو به return 1 تغییر دادم و جواب بهم ریخت. اگه کسی بتونه مرحله به مرحله نحوه ذخیره شدنش تو پشته و نحوه محاسبش رو بگه ممنون میشم.
}()int main
;int i,ii,p
;cin>>i>>ii
;(p=multiply(i,ii
;cout<<p
{

}(int multiply(int a, int b
;if(b==1) return a
;(else return a+multiply(a,b-1
{

عملگر کاما ضرب انجام نمیده. عملگر کاما جدا کننده است. این برنامه‌ای که شما دارید میبینید داره از یه تابع بازگشتی استفاده می‌کنه. به نظرم شما برید اول مفاهیم پایه سی پلاس پلاسو یاد بگیرید بعد این چیزا خود به خود براتون حل میشه.
اون multiply داخل تابع main که میبینید یه فراخوانی تابع هست که تعریف تابع هم پایین نوشته شده. حالا با استفاده از دستور multiply(i,ii) دو عدد گرفته شده از کاربر به تابع multiply فرستاده میشن که داخل تابع multiply با استفاده از فراخوانی‌های بازگشتی ضرب رو به صورت جمع‌های متوالی پیاده سازی کرده. و صد البته اگه به جای a یک برگردونید تابع اشتباه کار میکنه.
به نوعی این تابع این کارو میکنه
فرض کنیم کاربر اعداد ۱۰ و ۵ رو وارد کرد. این تابع به جای اینکه عدد ۱۰ رو در ۵ ضرب کنه و نتیجه رو برگردونه، ۱۰ رو ۵ بار با خودش جمع میکنه و نتیجه رو بر می‌گردونه.

RE: عملکرد کاما " , " در زبان ++C - enofcom - 04 اردیبهشت ۱۳۹۸ ۰۱:۴۵ ق.ظ

(۰۳ اردیبهشت ۱۳۹۸ ۰۸:۳۴ ب.ظ)ph0en1x نوشته شده توسط:  
(03 اردیبهشت ۱۳۹۸ ۰۲:۳۷ ب.ظ)enofcom نوشته شده توسط:  سلام دوستان.. قطعه کد زیر عمل ضرب دو عدد رو انجام میده. میخوام بدونم عملکرد کاما " , " اینجا دقیقا چکار میکنه؟ مثلا در خط: (return a+multiply(a,b-1 اگر a=4 و b=5 بدیم، میشه (۴,۴)+۴ خب این ۴,۴ یعنی چی در هم ضرب میشن؟

سوال بعدی اینکه تو همین برنامه return a رو به return 1 تغییر دادم و جواب بهم ریخت. اگه کسی بتونه مرحله به مرحله نحوه ذخیره شدنش تو پشته و نحوه محاسبش رو بگه ممنون میشم.
}()int main
;int i,ii,p
;cin>>i>>ii
;(p=multiply(i,ii
;cout<<p
{

}(int multiply(int a, int b
;if(b==1) return a
;(else return a+multiply(a,b-1
{

عملگر کاما ضرب انجام نمیده. عملگر کاما جدا کننده است. این برنامه‌ای که شما دارید میبینید داره از یه تابع بازگشتی استفاده می‌کنه. به نظرم شما برید اول مفاهیم پایه سی پلاس پلاسو یاد بگیرید بعد این چیزا خود به خود براتون حل میشه.
اون multiply داخل تابع main که میبینید یه فراخوانی تابع هست که تعریف تابع هم پایین نوشته شده. حالا با استفاده از دستور multiply(i,ii) دو عدد گرفته شده از کاربر به تابع multiply فرستاده میشن که داخل تابع multiply با استفاده از فراخوانی‌های بازگشتی ضرب رو به صورت جمع‌های متوالی پیاده سازی کرده. و صد البته اگه به جای a یک برگردونید تابع اشتباه کار میکنه.
به نوعی این تابع این کارو میکنه
فرض کنیم کاربر اعداد ۱۰ و ۵ رو وارد کرد. این تابع به جای اینکه عدد ۱۰ رو در ۵ ضرب کنه و نتیجه رو برگردونه، ۱۰ رو ۵ بار با خودش جمع میکنه و نتیجه رو بر می‌گردونه.

ممنون دوست عزیز..
توابع رو خونده بودم و میدونستم که تابع multiply یک تابع فراخوانده شده در Main هستش و ورودی میگیره ولی اون کاما یکم منو سردرگم کرده بود و نحوه محاسبه اش رو نمیدونستم.

پس دلیل اینکه return a رو وقتی به return 1 تغییر میدادم به جای عدد ۲۰ عدد ۱۷ رو میداد همینه که ۴ رو ۴بار در خودش جمع میبنده که میشه ۱۷=۱+۱۶ .

ممنون دوست عزیز لطف کردی...