من دقيقا متوجه نشدم مشکل شما چيه .
من دقيقا متوجه نشدم مشکل شما چيه .
ظاهرا من بد توضیح دادم یا کم توضیح دادم. معذرت میخوام.
ما یه برنامه داریم به اسم محاسبه مرکب که به این صورت هست :
فردی 1000.00 دلار را در یک حساب پس انداز با بهره 5% سرمایه گذاری میکند . با این فرض که بهره نیز به سپرده اضافه شود،مقدار پول موجود دراین حساب را در پایان هرسال تا 10 سال محاسبه و چاپ کنید.برای تعیین این مقادیر از فرمول زیر استفاده کنید:
A=p(1+r)n
که درآن
P=مقدار اولیه سپرده
R=نرخ سالانه بهره
N=تعداد سال ها
A=مقدار موجودی درپایان سال nام
تو فرمول کل پرانتز به توان n هست .
که برنامه این قسمت ، اولین برنامه ای هست تو پست قبلی دادم .بعد تو تمریناتش مساله پیترمینت رو مطرح کرده و گفته برنامه محاسبه مرکب را به گونه ای تغییر دهید که با سرمایه گذاری اولیه 24.00$ شروع ومقدار بهره این سپرده رادر صورتی که تاامسال در حساب نگه داشته باشد، حساب کند.
حالا من تغییرات رو اعمال کردم
1-خروجی رو به دلیل طولانی بودن اصلا نمیشه کامل دید و اگر بخوایم ببینیم باید چی کار کنید ؟
2- اصلا من تغییرات رو درست اعمال کردم.
ممنون.
Last edited by dewdrops; 20-08-2009 at 20:12.
بله . فکر کنم مسئله شما مشکلي نداشت . ولي بايد نرخ سود رو هم از 0.05 به 5 يا 6 يا ... درصد افزايش مي دادين .
من تا اونجايي که يادمه اين مسئله رو قبلا حل کرده بودم . در سال هاي آخر به مبلغ بسيار بزرگي مي رسيد که تو Console به درستي اين اعداد نمايش داده نمي شد . ( به دليل بزرگي بيش از حد اعداد ) مشکلي نيست . براي چي مي خواين خروجي رو به طور کامل ببينين ؟ خود مسئله ميگه "تا به مبلغ عجيب اين سرمايه گذاري با نرخ سود مرکب دست يابيد"
دوست عزیز بالاخره درسته تو این مسئله نمیشه تمام 379 سال رو دید و فقط قسمتی از خروجی قابل دیدن هست اما بالاخره یه زمانی تو بعضی برنامه ها نیاز میشه که بخوایم خروجی رو کامل ببینیم یا بهتر بگم باید چی کار کنیم که خروجی رو بتونیم صفحه به صفحه ببینیم.؟
Last edited by dewdrops; 01-09-2009 at 17:45.
تمام 380 سال ديده ميشه . ولي از آنجا که پنجره کنسول ابعاد محدودي داره اعداد بزرگتر تو چند سطر ميان که قابل خوندن نميشه .
میخوام برنامه ای بنویسم که عدد رو از مبنای 10 به 2 ببره.البته تو فروم های مختلف search کردم اما یا سر در نیاوردم یا از آرایه استفاده کرده بودن. بخاطر همین تصمیم گرفتم این برنامه رو با توجه به توضیحات کتاب بنویسم اما اصلا درست جواب نمیده . من توضیح خط به خط کتاب رو میذارم و برنامه ای که من از توضیحات متوجه شدم و نوشتم رو میذارم .
فرض کنید میخواهیم عدد دهدهی 57 را به معادل دودویی آن تبدیل کنیم.کاررا با نوشتن ارزش مکانی اعداد از راست به چپ شروع میکنیم و این کاررا تا آنجا ادامه میدهیم که سمت چپ ترین ارزش مکانی از عد مورد نظر دهدهی بزرگتر شود.
بنابراین :
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدسپس از ارزش مکانی 64 صرف نظر میکنیم.کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
سپس با شروع از سمت چپ عدد 57 را بر 32 تقسیم میکنیم که باقیمانده 25 را تولید میکند، بنابراین مقدار 1 را در زیر 32 قرار می دهیم.سپس 25 را بر 16 تقسیم میکنیم که باقیمانده 9 را تولید می کند،بنابراین مقدار 1را در زیر 16 قرار میدهیم.سپس 9 را بر 8 تقسیم میکنیم که باقیمانده 1 را تولید میکند ، بنابر این مقدار 1 را در زیر 8 قرار میدهیم.از تقسیم عدد 1 بر دو عدد بعدی (4 و 2)خارج قسمت صفر حاصل می شود.بنابراین زیر آنها صفر قرار میدهیم .در آخر , هدد 1 را بر 1 تقسیم میکنیم که خارج قسمت 1 را تولید میکند .بنابراین عدد 1 را زیر آن قرار می دهیم.کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
برنامه من فقط خروجی 1 میده در صورتی که خروجی با این ورودی باید بشه 111001.کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و کل برنامه هم به این صورت هست دیگه .
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
مي تونين از اين برنامه استفاده کنين .
برنامه خودتون رو Trace نکردم ببينم ايرادش چيه .کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اشكال برنامه ات اينه كه تو توي حلقه از باقيمانده استفاده كردي (a%b) درصورتيكه سوال براي گذاشتن 1 ها فقط به باقيمانده توجه كرده و براي گذاشتن صفرها به خارج قسمت رجوع كرده
اين مشكل رو ميتوني طور ديگه اي حل كني. چه وقت خارج قسمت صفر ميشه؟ وقتي باقيمانده با مقسوم، يكي بشه يعني مثلا در تقسيم 1 بر 4 ، خارج قسمت صفر و باقيمانده 1 ميشه.
پس ميشه برنامه رو اينطوري اصلاح كرد:
درضمن توي خط 11 نبايد b<a باشه چون اگه عددي كه انتخاب ميكنيم طوري باشه كه اعداد به توان 2 با خودش برابر بشن يكي از b به اشتباه كم ميشه پس بايد باشه b<=aکد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
Last edited by Ar@m; 02-09-2009 at 13:24.
اول از شما دوستان محترم خیلی ممنونم که همیشه راه کارهای خوبی رو به من نشون میدین.
دوست محترم sin2x=2sinxcosx ممنونم از برنامه ای که لطف کردید و گذاشتین . ولی .... راستشو بخواین برنامه های شما یه کم خلاقانه نوشته میشه و اینم مطمئنم به خاطر تجربه خوبی هست که شما تو برنامه نویسی دارید .من برنامه شما رو حدود یک ساعت هی trace میکردم ولی به نتیجه نمیرسیدم .راستش متوجه عملکردش نشدم .خواستم خواهش کنم اگر براتون امکان داره تا سه مرحله ، فقط سه مرحله برام مراحل trace رو توضیح بدید تا بفهمم کجای کارو اشتباه میکردم .
و اما راهکار شما دوست محترم ، Ar@m. خیلی راهکارتون جالب بود .
برنامه ها تا حدودی نوشتنشون ساده هست و مهم همین راهکار هاست که من همیشه باهاش مشکل داشتم ... .
اما با توجه به توضیحات شما تو خط اول که داده بودین من یه تغییر کوچیک تو برنامم دادم که همون باعث شد خروجی برنامه منم درست شه .
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
Last edited by dewdrops; 03-09-2009 at 09:03.
به روي چشم .
ببينين دوست من ... خطوط اول که تعريف متغيرها هستن . بعد به کاربر ميگيم که يه عدد در مبناي 10 وارد کنه و بعد توسط cin اونو مي گيريم . بعد توسط متغير c مقدار اورجينال عدد دسيمال رو نگه مي داريم . (بعدا ميگم چرا)
ما قراره تو برنامه چيکار کنيم ؟ اگه بخوايم يه عدد دسيمال رو تو مبناي 2 بدست بياريم هي اون عدد رو بر 2 تقسيم مي کنيم و دوباره تا خارج قسمت کمتر از 2 نشده همين کار رو ادامه مي ديم . بعد اين باقيمانده ها رو از آخر به اول مي نويسيم و نتيجه حاصل ميشه .
پس کار خيلي ساده اس و تنها مشکل اينه که بايد از آخر به اول اينا نوشته بشن . پس مجبوريم به يه نحوي اين اعداد اولي رو تو يه جايي نگه داريم . منتظر باشيم تا تقسيم ها تموم بشن و بعد اين اعداد بدست آمده رو کنار هم قرار بديم تا نتيجه بياد . براي نگه داشتن اين اعداد مي تونستيم از آرايه ها استفاده کنيم . درسته کار رو ساده مي کرد ولي :
1- شما گفتين با آرايه ها نه .
2- کار رو يه کم غير استاندارد مي کنه . چون معلوم نيست عدد ما قراره چند رقمي باشه که بخوايم يه آرايه براي اون تعريف کنيم . اگه هم يه آرايه خيلي بزرگ معرفي کنيم که هر رنجي رو ساپورت کنه چرا حافظه اضافي اشغال کنيم ؟
خوب داشتم مي گفتم . براي اولين بار باقيمانده تقسيم number بر 2 رو تو b ذخيره مي کنيم . بعد نياز هست که number يه بار بر 2 تقسيم بشه خودش . تا خارج قسمت ايده آل ما ايجاد بشه .
ما تو مرحله بعدي يه عدد رو تو 10 ضرب مي کنيم و بعد b رو بهش ضرب مي کنيم . اگه b مقدارش 0 باشه اين ضرب 0 ميشه و جمع اون با result نتيجه اي نخواهد داشت ولي از آن جا که اين عدد قبلا در 10 ضرب شده بود اون صفر مي مونه جاش و دفعه بعدي که ضرب شد رقم بعدي ميا دنبال اون صفر قبلي . در آخر هم هنگام چاپ اون مقدار اورجينال متغيري که تو اول برنامه ذخيره کرده بوديم رو استفاده مي کنيم . چون اگه توجه کرده باشين بار اول اجراي برنامه به while نمي رسه و مقدار متغير b از دست مي ره .
هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)