زمان کنونی: ۲۵ تیر ۱۳۹۸, ۰۲:۳۱ ق.ظ مهمان گرامی به انجمن مانشت خوش آمدید. برای استفاده از تمامی امکانات انجمن می‌توانید عضو شوید.
گزینه‌های شما (ورودثبت نام)

عملکرد کاما " , " در زبان ++C

ارسال:
  

enofcom پرسیده:

عملکرد کاما " , " در زبان ++C

سلام دوستان.. قطعه کد زیر عمل ضرب دو عدد رو انجام میده. میخوام بدونم عملکرد کاما " , " اینجا دقیقا چکار میکنه؟ مثلا در خط: (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
{
نقل قول این ارسال در یک پاسخ

۰
ارسال:
  

ph0en1x پاسخ داده:

RE: عملکرد کاما " , " در زبان ++C

(۰۳ اردیبهشت ۱۳۹۸ ۰۲:۳۷ ب.ظ)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 یک برگردونید تابع اشتباه کار میکنه.
به نوعی این تابع این کارو میکنه
فرض کنیم کاربر اعداد ۱۰ و ۵ رو وارد کرد. این تابع به جای اینکه عدد ۱۰ رو در ۵ ضرب کنه و نتیجه رو برگردونه، ۱۰ رو ۵ بار با خودش جمع میکنه و نتیجه رو بر می‌گردونه.
نقل قول این ارسال در یک پاسخ

ارسال:
  

enofcom پاسخ داده:

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 یک برگردونید تابع اشتباه کار میکنه.
به نوعی این تابع این کارو میکنه
فرض کنیم کاربر اعداد ۱۰ و ۵ رو وارد کرد. این تابع به جای اینکه عدد ۱۰ رو در ۵ ضرب کنه و نتیجه رو برگردونه، ۱۰ رو ۵ بار با خودش جمع میکنه و نتیجه رو بر می‌گردونه.

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

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

ممنون دوست عزیز لطف کردی...
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ



پرش به انجمن:

Can I see some ID?

به خاطر سپاری رمز Cancel

Feeling left out?


نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. رمزت رو فراموش کردی؟ اینجا به یادت میاریم! close

رمزت رو فراموش کردی؟

Feeling left out?


نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. close