نمایش نتایج 1 تا 4 از 4

نام تاپیک: سوال در نوشتن برنامه اعداد اول لطفا جواب بدیییین

  1. #1

    Angry سوال در نوشتن برنامه اعداد اول لطفا جواب بدیییین

    سلام من دارم فیلمای اموزشی جاوا رو میبینم تا الان دو ساعتشو دیدم
    الان به یه مشکل خیلی خیلییی جدی خوردم سه روزه درگیرشم ولی واقعا نمیفهمم چیه جریانش لطفا یکی کمکم کنه
    سوالم اینه توی این فیلمه این برنامه رو مینویسه
    public class Mehrad{	public static void main(String[] args) {
    for(int num=0;num<20;num++)
    if(isPrime(num))
    System.out.println(num);
    }
    static boolean isPrime(int number) {
    if(number<2)
    return false;
    for(int i=2;i<number;i++)
    if(number%i==0)
    return false;
    return true;

    }
    }

    بعدش توی نمونه بالا من از عدد 2 شروع میکنم خب
    حالا حلقه ی for اولی رو توی نمونه پایینی پاک میکنم بجاش int میزارم و مقدارشم 2 میزارم حالا باید توی متد پایین isprime جوابش false بشه ولی اخر سر نشون میده 2 رو یعنی true میده جواب رو اخه مگه ننوشته number<2 کوچکتر از 2 باید باشه ولی 2<2 نیست و 2=2 هست!!!!
    این رفته توی مخم نمیدونم دیگه چیکار کنم!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    public class Mehrad{	public static void main(String[] args) {
    int num=2;
    if(isPrime(num))
    System.out.println(num);
    }
    static boolean isPrime(int number) {
    if(number<2)
    return false;
    for(int i=2;i<number;i++)
    if(number%i==0)
    return false;
    return true;

    }
    }

    این هم نمونه ی بالایی و هردوشون 2 رو شامل میشن در صورتی که به طور منطقی و ریاضی نباید 2 رو نشون بده2017-10-08.jpg

  2. #2

    نقل قول: سوال در نوشتن برنامه اعداد اول لطفا جواب بدیییین

    uppppppppppppppppppppp

  3. #3
    کاربر دائمی آواتار vahid-p
    تاریخ عضویت
    آذر 1391
    محل زندگی
    تهران
    پست
    1,140

    نقل قول: سوال در نوشتن برنامه اعداد اول لطفا جواب بدیییین

    گاهی اوقات آدم تو عبارات منطقی ممکنه یکم گیج بشه. ولی همیشه اول به برداشت خودتون شک کنید بعد الگوریتم (های معروف) و بعد به کامپیوتر (که ممکنه به خاطر برداشت اشتباه از عملکرد کامپیوتر کد رو اشتباه نوشته باشیم که مثالش رو در آخر میزنم)

    ببینید عدد 2 از نظر ریاضی هم یک عدد اول هست (به جز خودش عدد یک مقسوم علیه اش هست)
    پس اگر الگوریتم عدد 2 رو خروجی میده به عنوان isPrime پس تا اینجاش درسته. حالا ما کار نداریم عدد 2 عدد اول هست یا نه. کلا مشکل شما اون if هست که نوشته number<2.
    خب ببینید دقیقا 2>2 نیست پس مقدار این عبارت false هست. وقتی بدنه if اجرا میشه که عبارت condition برابر true باشه. اما اینجا false هست پس بدنه اجرای نمیشه و return false اجرا نمیشه.
    به همین صورت حلقه for هم اجرا نمیشه چون وقتی اجرا میشه که قسمت condition اش یعنی i<number برابر true باشه که هیچ وقت نمیشه.
    در نتیجه عبارت return true رو بر میگردونه. پس در تابع isPrime(2) مقدار true خواهد داشت و System.out.... اجرا میشه.


    if(condition){
    اجرای این بدنه وقتی condition برابر true شود
    }else{
    اجرای این بدنه وقتی condition برابر false شود


    تا اینجا بحث پست شما تموم میشه.
    اما بعضی اوقات هست ما به علت عدم اطلاع دقیق از عملکرد کامپیوتر ممکنه برنامه هایی بنویسیم که نه برداشت ما اشتباه است و نه الگوریتم. ولی نمیتونیم بگیم کامپیوتر داره اشتباه میکنه (تقریبا محاله اشتباه کنه) و همچنین احتمال اینکه زبان برنامه نویسی رو بد طراحی کرده باشن و باگ داشته باشه هم در این سطح خیلی خیلی کمه.
    از جمله عباراتی که ممکنه واقعا اشتباه شاید نشه بهش گفت اما محدودیت های معماری کامپیوتر رو باید در نظر بگیریم مثال هایی شبیه به عبارت زیر هست:
    if(2.2-2.2>0)

    شاید بگید خب دو طرف صفر هست پس میشه false. اما از اونجایی که عبارات استفاده شده اعشار هستند و اعشار در کامپیوتر به صورت ممیز شناور هست مقدار عبارت حاصل با اینکه صفر هست ولی با یک مقدار دقیقا صفر متفاوته و یک عدد خیلی کوچک رو نماینده صفر میگیرن. هر چند فکر کنم در جاوا تا حدی جلو بعضی از این اشتباهات رو بگیره ولی در عمل در زبانهایی که فقط به معماری کامپیوتر اتکا دارند (مثل C یا C++‎‎‎‎‎)، عبارت هایی شبیه به این رو احتمالا اشتباه جواب میدن. پس برای متغیرهای double و float حواستون به این مسائل باشه. int و متغیرهای عدد صحیح این مشکل رو نداره. این مثال شاید مشکلی نداشته باشه ولی مثال شبیه به این رو دیدم که به مشکل بر میخوره.
    یا مثال زیر:
    double x=0.000000000000000001;
    if((1/x)*x==1){
    System.out.println("Correct");
    }

    که اگر اجرا کنید خروجی چاپ نخواهد شد!
    آخرین ویرایش به وسیله vahid-p : دوشنبه 17 مهر 1396 در 11:35 صبح

  4. #4
    کاربر جدید آواتار babak_b_c
    تاریخ عضویت
    آذر 1393
    محل زندگی
    قزوین
    پست
    1

    نقل قول: سوال در نوشتن برنامه اعداد اول لطفا جواب بدیییین

    مهراد عزیز این برنامه اعداد اول را چاپ میکنه و 2 عدد اول هست.
    اشتباهت اینه که فکر میکنی وقتی عدد 2 هست میره داخل حلقه for در حالیکه حلقه تکرار for مربوط به متد isPrime اصلا انجام نمیشه چون در دستور for(int i=2;i<number;i++) زمانیکه حلقه شروع میشود i=2 است ولی شرط حلقه که 2>2 است برقرار نیست و حلقه اصلا اجرا نمیشود.
    در اصل برای مقدار 2 فقط خط آخر متد که return true; است اجرا میشود.

تاپیک های مشابه

  1. پاسخ: 6
    آخرین پست: شنبه 15 آذر 1393, 01:37 صبح
  2. درخواست راهنمایی برای نوشتن برنامه اعداد اول مدور
    نوشته شده توسط fatemeh19 در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 10
    آخرین پست: یک شنبه 25 فروردین 1392, 14:00 عصر
  3. سوال: سوال در مورد برنامه نويسي ياهو ( لطفا كمك كنيد)
    نوشته شده توسط ebham33 در بخش برنامه نویسی در 6 VB
    پاسخ: 0
    آخرین پست: پنج شنبه 09 مهر 1388, 11:34 صبح
  4. راهنمایی در مورد برنامه اعداد اول و کامل
    نوشته شده توسط iceboy67 در بخش برنامه نویسی در 6 VB
    پاسخ: 1
    آخرین پست: شنبه 17 فروردین 1387, 21:16 عصر
  5. سوال درباره نوشتن برنامه فارسی در ویندوز 98
    نوشته شده توسط alikoochooloo در بخش VB.NET
    پاسخ: 15
    آخرین پست: یک شنبه 02 شهریور 1382, 19:49 عصر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •