تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 7 از 7

نام تاپيک: اشکال این برنامه کجاست؟

  1. #1
    پروفشنال singleguy's Avatar
    تاريخ عضويت
    Jan 2009
    محل سكونت
    ٍEsfahan
    پست ها
    807

    پيش فرض اشکال این برنامه کجاست؟

    من میخوام با c++یه برنامه بنویسم که 6جمله ی اول دونباله زیر را برام حساب کنه
    1+1/2+1/4+1/8+1/16+...
    من برنامه ی زیر را نوشتم ولی خروجی را 111111میبینم در صورتی که باید1.96875باشه
    میشه بگید اشکال از کجاست؟
    #include <iostream.h>
    #include <conio.h>
    #define N 6
    main(){
    int i,x;
    float sum=0;
    for(i=1,x=1;i<=N;x*=2,i++){
    sum+=1/x;
    cout<<sum;
    }
    getch();
    return 0;
    }


  2. #2
    داره خودمونی میشه
    تاريخ عضويت
    Sep 2007
    پست ها
    50

    پيش فرض

    دو تا اشكال دارد:
    1.هنگام استفاده از عملگرد تقسيم،در صورتي كه از دو مقدار صحيح استفاده كنيد،جواب را هم به صورت صحيح مي‌دهد.چون شما در اين تمرين با اعشار سر و كار داريد به جاي 1 بايد بگذاريد 0.1
    2.cout را بايد از حلقه خارج كنيد.چون فقط يك بار نتيجه مجموع را مي‌خواهيد.
    كه كدتون در نهايت ميشه:
    #include <iostream.h>
    #include <conio.h>
    main(){
    int i,x,n;
    float sum=0;
    cin >>n;
    for(i=1,x=1;i<=n;x*=2,i++){
    sum+=1.0/x;

    }
    cout<<sum;
    getch();
    return 0;
    }

  3. این کاربر از bestirani2 بخاطر این مطلب مفید تشکر کرده است


  4. #3
    پروفشنال singleguy's Avatar
    تاريخ عضويت
    Jan 2009
    محل سكونت
    ٍEsfahan
    پست ها
    807

    پيش فرض

    سلام
    این برنامه ای هست که اعداد را معکوس میکنه ولی نمیدونم چرا برای اعداد شش رقم به بالا جواب درستی نمیده مثلا اگه 123456 به برنامه داده بشه جواب اینه: -6-1-6-7
    اشکال کجاست؟
    #include <iostream.h>
    #include <conio.h>main()
    main()
    {
    int digit,num;
    clrscr();
    while(1){
    cout<<"\nenter number:";
    cin>>num;
    cout<<"inverse is:";
    do{
    digit=num%10;
    cout<<digit;
    num/=10;
    }
    while(num!=0);
    }
    }


  5. #4
    پروفشنال _ermia's Avatar
    تاريخ عضويت
    Sep 2007
    پست ها
    715

    پيش فرض

    برنامتون که هیچ اشکالی نداره و درست کار میکنه
    ببینید من هم با اعداد زیر 6 رقم امتحان کردم و هم 6 رقمی و هم بالای 6 رقم


    فقط 2 تا اشکال کوچولو داره (وگرنه از نظر منطقی هیچ ایرادی نداره):

    1) یدونه کلمه main زیادی گذاشته بودید که البته تاثیری تو برنامه نداره اما خوب باید رعایت بشه.

    2) دستور while(1) ای که دادین باعث میشه مدام از کاربر عدد بخواد، باید یه راهیم بذارید برای خارج شدن

    مثلا این طوری:


    که کدش میشه این:


    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

  6. این کاربر از _ermia بخاطر این مطلب مفید تشکر کرده است


  7. #5
    داره خودمونی میشه
    تاريخ عضويت
    Sep 2007
    پست ها
    50

    پيش فرض

    سلام
    این برنامه ای هست که اعداد را معکوس میکنه ولی نمیدونم چرا برای اعداد شش رقم به بالا جواب درستی نمیده مثلا اگه 123456 به برنامه داده بشه جواب اینه: -6-1-6-7
    اشکال کجاست؟
    #include <iostream.h>
    #include <conio.h>main()
    main()
    {
    int digit,num;
    clrscr();
    while(1){
    cout<<"\nenter number:";
    cin>>num;
    cout<<"inverse is:";
    do{
    digit=num%10;
    cout<<digit;
    num/=10;
    }
    while(num!=0);
    }
    }

    اين مشكل به خاطر محدوديت نوع int هست،كه البته به كامپايلرت هم ربط داره توي نسخه هاي قديم c++ كه از نظر برنامه اي شبيه همون c هست 2 بايت به int‌تعلق ميگيره كه البته تو نسخه هاي جديد كامپايلر ها 1 كلمه به اون ميدن.
    خلاصه براي رفع اين مشكل به جاي int از long استفاده كن و اگر هم اعداد منفي نميگيري unsigned long بگذار به اين ترتيب ميتوني تا 4294967295 رو وارد كني در حالي كه با int تنها ميتونستي تا 32767 را وارد كني.
    اگر باز ميخواي عدد بزرگتر بگيري نياز به كد نويسي هست و بايد يك نوع داده خودت بسازي كه اعداد بزرگتر رو در بر داشته باشه كه من كدش رو نميگذارم تا خودت روش فكر كني و اگه نتونستي برات بدم
    به عنوان راهنمايي هم بگم كه long تا 4 بايت ميتونه ذخيره كنه حال اگر عدد بزرگتري بدي،4 بايت كم ارزشتر حساب ميشه.

  8. #6
    داره خودمونی میشه
    تاريخ عضويت
    Sep 2007
    پست ها
    50

    پيش فرض

    برنامتون که هیچ اشکالی نداره و درست کار میکنه
    ببینید من هم با اعداد زیر 6 رقم امتحان کردم و هم 6 رقمی و هم بالای 6 رقم


    فقط 2 تا اشکال کوچولو داره (وگرنه از نظر منطقی هیچ ایرادی نداره):

    1) یدونه کلمه main زیادی گذاشته بودید که البته تاثیری تو برنامه نداره اما خوب باید رعایت بشه.

    2) دستور while(1) ای که دادین باعث میشه مدام از کاربر عدد بخواد، باید یه راهیم بذارید برای خارج شدن

    مثلا این طوری:


    که کدش میشه این:


    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    كامپايلري كه شما استفاده ميكنيد كامپايلر استاندارد c++ هست كه توي اين كامپايلر int تا 2147483647 مقدار دهي ميشه حال اگه عدد بزرگتري بدي به مشكل بر ميخوريد.

  9. #7
    داره خودمونی میشه
    تاريخ عضويت
    Sep 2007
    پست ها
    50

    پيش فرض

    يك پيشنهاد اين تاپيك رو مهم كنيد مخصوص رفع اشكال برنامه ها تا هر كي برنامه اي مينويسه كه مشكل داره بياد اينجا بگه.

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •