کلیدستان

نسخه‌ی کامل: اولین عدد بین 1000 تا 10000هزار را پیدا کنید که بر 845 بخش پذیر باشد (در متلب)
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
 سلام،
من شدیدا برای نوشتن الگوریتم این سوال دچار مشکل شدم
سوال:اولین عدد بین 1000 تا 10000 هزار را پیدا کنید که بر 845 بخش پذیر باشد و جمع اعداد عدد بدست آمده مورد نظر را بیابید.
ممنون میشم کمکم کنید.
فرضا اگه جوابش شد 1065 جمعش که میشه 12 رو بده.
سلام.
نیازی به الگوریتم پیچیده نیست، عدد 845 را در 1 و 2 و 3 و ... ضرب کنید (در یک حلقه for، با پارامتری برابر مقدار 1 تا مثلا 200)، سپس ببینید که چه زمانی از حد پایین (که اکنون برابر 1000 انتخاب شده)، بزرگتر است، آنگاه عدد حاصل ضرب، همان عدد مورد نظرمان است.
برای جمع زدن ارقام عدد، هر بار باقیمانده عدد بر عدد 10 را به دست می آورید و در یک حلقه for ، آن قدر تقسیم بر عدد 10 و محاسبه باقیمانده را ادامه می دهید تا تعداد رقم های آن پایان بیابد (در هر گام، ابتدا باقیمانده تقسیم بر 10 را به دست آورده و از عدد کم می کنید، بعد عدد را بر 10 تقسیم می کنید تا یک رقم حذف شود، دوباره باقیمانده بر 10 را حساب می کنید و ...)(باقیمانده ها را باید جمع بزنید تا بشود برابر جمع رقم ها).

سلام.در صورت امکان برنامه مورد نظر این توضیحاتو بنویسید.باتشکر
(۱۳۹۳/۱۰/۰۶, ۱۱:۱۴ ب.ظ)'admin' نوشته: [ -> ]سلام.
نیازی به الگوریتم پیچیده نیست، عدد 845 را در 1 و 2 و 3 و ... ضرب کنید (در یک حلقه for، با پارامتری برابر مقدار 1 تا مثلا 200)، سپس ببینید که چه زمانی از حد پایین (که اکنون برابر 1000 انتخاب شده)، بزرگتر است، آنگاه عدد حاصل ضرب، همان عدد مورد نظرمان است.
برای جمع زدن ارقام عدد، هر بار باقیمانده عدد بر عدد 10 را به دست می آورید و در یک حلقه for ، آن قدر تقسیم بر عدد 10 و محاسبه باقیمانده را ادامه می دهید تا تعداد رقم های آن پایان بیابد (در هر گام، ابتدا باقیمانده تقسیم بر 10 را به دست آورده و از عدد کم می کنید، بعد عدد را بر 10 تقسیم می کنید تا یک رقم حذف شود، دوباره باقیمانده بر 10 را حساب می کنید و ...)(باقیمانده ها را باید جمع بزنید تا بشود برابر جمع رقم ها).



 


سلام.در صورت امکان برنامه مورد نظر این توضیحاتو بنویسید.باتشکر
 
در کلیدستان تنها راهنمایی می کنیم تا کاربران خودشان اقدام به کدنویسی کنند، ولی من کدهای بخشی از آن را ذکر می کنم و بقیه به عهده خودتان (چگونگی جمع زدن رقم های یک عدد) :

کد پی‌اچ‌پی:
clear all
close all
clc

number 
2531
sum
=0;
while(
number 0)
    
sum sum mod(number,10);
    
number = (number-mod(number,10)) / 10;
end
sum 

نتیجه اجرای کد متلب بالا :

کد پی‌اچ‌پی:
number =

        
2531


sum 
=

    
11 

(۱۳۹۳/۱۰/۰۸, ۰۸:۰۸ ب.ظ)'admin' نوشته: [ -> ]در کلیدستان تنها راهنمایی می کنیم تا کاربران خودشان اقدام به کدنویسی کنند، ولی من کدهای بخشی از آن را ذکر می کنم و بقیه به عهده خودتان (چگونگی جمع زدن رقم های یک عدد) :

کد پی‌اچ‌پی:
clear all
close all
clc

number 
2531
sum
=0;
while(
number 0)
    
sum sum mod(number,10);
    
number = (number-mod(number,10)) / 10;
end
sum 

نتیجه اجرای کد متلب بالا :

کد پی‌اچ‌پی:
number =

        
2531


sum 
=

    
11 



 


merc,mamnonSmile
 
این دوستمون سواله جالبی پرسیدن
اگر امکان داشته باشه اقای ادمین یکمی راجب این کدی که نوشتین توضیح بدید که چطوری انجام میده؟
کد پی‌اچ‌پی:
number 2531
sum
=0;
while(
number 0)
    
sum sum mod(number,10);
    
number = (number-mod(number,10)) / 10;
end
sum 


تصمیم گرفتم با تحلیل کردن کدهای برنامه های ساده برنامه نویسی متلب را از مقدماتی به سطح متوسط یاد بگیرم
تا جایی که فهمیدم اینجوری متوجه شدم ببینید ایا درست میگم یا نه؟
ابتدا یک متغییر ثابت با نام sum تعریف میکنیم که مقداره اولیه شو صفر در نظر میگیریم بعد میگیم که اگه عدد ورودی مون مثبت بود (بزرگتر از صفر بود). یک sum جدید تعریف کنه و sum قبلی را به اضافه باقی مانده حاصل اون عدد ورودی بر 10 کنه
حالا سوال اولم اینه که چرا باقی مانده عدد ورودی مون تقسیم بر 10 میشه؟
همچنین اگه بشه خط بعدی شو شما بگید که منظورش چیه؟ ممنون میشم.

 

 

 
سلام
تا جایی که من متوجه شدم برنامه به این صورت است که:
عدد ما 2531 است و متغیری که حاصل جمع ارقام را در آن مینویسیم sum تعریف شده است.( البته نام این متغیر اشکال دارد زیرا متلب خود یک تابع به نام sum دارد). ابتدا مقدار آن را صفر تعریف میکنیم.
ما باید تاجایی پیش برویم که عدد ما + باشد.
سپس باقی مانده عدد بر 10 را محاسبه میکنیم که همان رقم سمت چپ عدد میشود ( بار اول 1) و بعد آن را با حاصل جمع قبلی جمع می کنیم. 
بعد باید عدد را اصلاح کنیم  یعنی رقم سمت راست آن را ازبین ببریم  برای این کار عدد را منهای باقی مانده آن بر 10  میکنیم (2530) سپس بر 10 تقسیم میکنیم.تا عدد 253 به دست آید و ذوباره تکرار میکنیم.
بسیار تشکر میکنم از پاسختون
ولی میشه بگید چرا باید از دستور
کد پی‌اچ‌پی:
while(number 0
استفاده کنیم؟ منظورش اینه که تازمانی پیش باید بریم که عدد مثبت باشه
چرا ؟ منظورش از اینکه مثبت بشه چیه؟ مگه تقسیم یک عدد بر عدد منفی هم میشه؟

 
برای دستور while یا باید شرطی را ا در نظر بگیریم که میدانیم حتما از حلقه خارج میشود یا اینکه در درون آن از دستور break استفاده کنیم.
در این برنامه هنگامی که number به صفر برسد حالتی است که تمام رقم ها را با هم جمع کرده ایم در نتیجه 
[i]باید از حلقه خارج شویم و به دستورات دیگر بپردازیم.
در این جا به معنی + یا - بودن استفاده نمیشود!