اطلاعیه

Collapse
No announcement yet.

اشتباه در طراحی زبان C

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    اشتباه در طراحی زبان C

    با سلام
    اشتباهی در طراحی زبان C وجود داره که هر از چندی با اون مواجه میشم و کلی من رو سر کار میزاره
    این اشتباه مربوط به اولویت اعمال ریاضی و منطقی در این زبان هست و از نظر اینکه من سریع برنامه نویسی میکنم گاهی این مسئله رو فراموش میکنم یا دقت کافی بخرج نمیدم. در اینجا بد نیست شما رو به چالش دعوت کنم تا ببینم شما هم با چنین اشتباهی مواجه شدید یا خیر یا در این باره کمی بررسی کنید.

    #2
    پاسخ : اشتباه در طراحی زبان C

    با سلام دوست من
    زبان سی از عملگرها ، دستورات و توابع تشیکل شده.
    در مورد عمگرها و اولویت عملگر ها باید به مستندات زبان سی مراجعه کنید.

    ذکر این نکته ضروری است که علاوه بر اولویت در عملگرها اطلاع از چپ مقدار یا راست مقدار بودن عملگرها نیز مهم است.

    راه حل : برای کاهش اشتباهات و بالا بردن وضوح برنامه از پرانتز استفاده کنید،
    جدیدترین ویرایش توسط Esmail.dadkhah; ۱۳:۳۴ ۱۳۹۵/۱۱/۰۷.

    دیدگاه


      #3
      پاسخ : اشتباه در طراحی زبان C

      دوست گرامی ممنون از بابت جدولی که گذاشتید
      فکر کنم پرسش من رو درست متوجه نشدید، من یک اشتباه در اولویت های زبان C پیدا کردم. که از نظر منطقی نباید اینطور باشه میخواستم ببینم دوست دیگری هم با این اشتباه روبرو شده یا خیر. برای راهنمایی اشاره کنم که این اشتباه در دستور if خودش رو نشون میده.

      دیدگاه


        #4
        پاسخ : اشتباه در طراحی زبان C

        نوشته اصلی توسط Davood Kheradmand نمایش پست ها
        دوست گرامی ممنون از بابت جدولی که گذاشتید
        فکر کنم پرسش من رو درست متوجه نشدید، من یک اشتباه در اولویت های زبان C پیدا کردم. که از نظر منطقی نباید اینطور باشه میخواستم ببینم دوست دیگری هم با این اشتباه روبرو شده یا خیر. برای راهنمایی اشاره کنم که این اشتباه در دستور if خودش رو نشون میده.
        لطفا کد قرار بدید .
        درمورد شرط ها ، اشتباه عملگر = به جایی == یا عمگرها مقایسه ای ≥•≤ که با درک چپ مقدار بودن و راست مقدار بودن عملگرها بر طرف شد.

        دیدگاه


          #5
          پاسخ : اشتباه در طراحی زبان C

          اون که = بجای == گذاشته بشه اشتباه برنامه نویس هست
          بهتر هست که خودم توضیح بدم
          یک مثال میزنم
          if ( i*6<17) doSomething();//ok
          if( i*2 == 12) doSomething();//ok
          if( i&7 == 3) doSomething();//not ok
          در مثال اول مشکلی نیست
          در مثال دوم هم همینطور
          اما در مثال سوم آی هر مقداری داشته باشه شرط غلطه . ببینید ما یک شرط داریم که یک مقایسه در اون انجام میشه و دو طرف مورد مقایسه با علامت == یا =! با هم مقایسه میشن اما در اینجا ابتدا میاد مقایسه میکنه که 7 مساوی 3 هست یا خیر بعد نتیجه رو با آی اند میکنه!
          در زبان C اولویت لاجیکال اند یا لاجیکال اور پایین تر از مقایسه هست. و این بنظر من اشتباه هست
          البته این مشکل رو با پرانتز حل میکنم اما گاهی عبارتهای شرطهام خیلی بزرگ یا زیاد میشه و گذاشتن این همه پرانتز برنامه رو شلوغ میکنه و چیز جالبی نیست

          دیدگاه


            #6
            پاسخ : اشتباه در طراحی زبان C

            این موضوع خیلی جالبه
            از طرفی شما اصول مهندسی نرم افزا را رعایت نمی کنید.
            مهندسی نرم افزار بر خوانا بودن برنامه تاکید داره ، که استفاده از پرانتز کار خوبیه.
            و یک اصل در برنامه نویسی هست که می گه اگر دستوری نوشتید که در یک خط جا نشد یعنی برنامه شما از لحاظ مهندسی نرم افزار مشکل دارد ( دایتل - دایتل )

            این موضوع را با شک عرض می کنم ،( ته زهنم یه چیزی هست امیدوارم درست باشه )
            در برنامه نویسی سی شرط ها نهایتا به درست و غلط یا صفر یا یک تبدیل می شود
            مثال در حلقه بینهایت از while(1). استفاده می کنیم.
            وقتی از عملگر برابری استفاده می کنیم در صورت برابری عدد یک را بر می گردونه و if(1) اجرا می شه و در صورت اشتباه بودن شرط if(0) می شود و شرط اجرا نمی شود.
            در نهایت سبک برنامه نویسی شما ساختار یافته نیست . هر چند سرعت برنامه نویسی شما نسبت به یک برنامه نویس ساختاریافته بالاتر است ولی به مشکلات عجیب اینچنینی برخورد می کنید.
            ویژگی های برنامه نوسی ساختار نیافته
            سرعت برنامه نویسی بالا
            اشکال یابی و خطا یابی سخت
            بروزرسانی وقت گیر ( گاهی باید مقدار. قابل توجهی از کد ها را تغییر داد)
            قابلیت استفاده مجدد از کدها نیست
            ویژگی برنامه نویسی ساختاریافته :
            سرعت برنامه نوسی کند
            اشکال یابی و خطا یابی سریع
            بروزرسانی و ارتقای کد سریع
            قابلیت استفاده از کد ها وجود دارد.

            دیدگاه


              #7
              پاسخ : اشتباه در طراحی زبان C

              نوشته اصلی توسط Esmail.dadkhah نمایش پست ها
              این موضوع خیلی جالبه
              از طرفی شما اصول مهندسی نرم افزا را رعایت نمی کنید.
              مهندسی نرم افزار بر خوانا بودن برنامه تاکید داره ، که استفاده از پرانتز کار خوبیه.
              و یک اصل در برنامه نویسی هست که می گه اگر دستوری نوشتید که در یک خط جا نشد یعنی برنامه شما از لحاظ مهندسی نرم افزار مشکل دارد ( دایتل - دایتل )

              این موضوع را با شک عرض می کنم ،( ته زهنم یه چیزی هست امیدوارم درست باشه )
              در برنامه نویسی سی شرط ها نهایتا به درست و غلط یا صفر یا یک تبدیل می شود
              مثال در حلقه بینهایت از while(1). استفاده می کنیم.
              وقتی از عملگر برابری استفاده می کنیم در صورت برابری عدد یک را بر می گردونه و if(1) اجرا می شه و در صورت اشتباه بودن شرط if(0) می شود و شرط اجرا نمی شود.
              در نهایت سبک برنامه نویسی شما ساختار یافته نیست . هر چند سرعت برنامه نویسی شما نسبت به یک برنامه نویس ساختاریافته بالاتر است ولی به مشکلات عجیب اینچنینی برخورد می کنید.
              ویژگی های برنامه نوسی ساختار نیافته
              سرعت برنامه نویسی بالا
              اشکال یابی و خطا یابی سخت
              بروزرسانی وقت گیر ( گاهی باید مقدار. قابل توجهی از کد ها را تغییر داد)
              قابلیت استفاده مجدد از کدها نیست
              ویژگی برنامه نویسی ساختاریافته :
              سرعت برنامه نوسی کند
              اشکال یابی و خطا یابی سریع
              بروزرسانی و ارتقای کد سریع
              قابلیت استفاده از کد ها وجود دارد.
              جناب دادخواه عزیز
              شما از همون اول نوشته های من رو درست نخوندید
              من چند بار توضیح دادم اما هنوز تو باغ نیستید
              من متوجه نمیشم که این نوشته های متناقض شما مربوط به صحبت های من هست یا اشتباهی برای کس دیگری به اشتباه در اینجا قرار دادید.
              اگر برای من نوشتید باید خودتون اطلاعات خوبی نسبت به علم کامپیوتر و برنامه نویسی داشته باشید
              ببخشید اینجوری میگم اما من نوشته های شما رو در باره ی کامپایلر بسکام خوندم با توجه به اظهار نظراتی که داشتید پیشنهاد میکنم در این جور موارد با احتیاط بیشتری برای بقیه راه کار نشون بدید یا در باره کارشون نظر بدید. بخصوص وقتی که بحث سر این چیزا نیست.
              افراد با تجربه ای در این فوروم حضور داشتن و من دوست داشتم اونها هم در این بحث مشارکت میکردن اما کسی نیومد نظری بده
              برای همین من با یک توضیح تکمیلی مطلب رو بپایان میبرم
              اولویت در زبان C بصورت جدول زیر هست:

              1 () [] -> . :: Function call, scope, array/member access
              2 ! ~ - + * & sizeof type cast ++ -- (most) unary operators, sizeof and type casts (right to left)
              3 * / % MOD Multiplication, division, modulo
              4 + - Addition and subtraction
              5 << >> Bitwise shift left and right
              6 < <= > >= Comparisons: less-than, ...
              7 == != Comparisons: equal and not equal
              8 & Bitwise AND
              9 ^ Bitwise exclusive OR (XOR)
              10 | Bitwise inclusive (normal) OR
              11 && Logical AND
              12 || Logical OR
              13 ? : Conditional expression (ternary)
              14 = += -= *= /= %= &= |= ^= <<= >>= Assignment operators (right to left)
              15 , Comma operator
              من اگر طراح زبان C بودم ایتمهای 6 و 7 رو در بین آیتمهای 10 و 11 قرار میدادم
              به عبارت دیگه اولویت بالاتر برای بیت وایز اند - اکس اور-اور بعد اپراتورهای مقایسه کننده و بعد لاجیکال اند و لاجیکال اور(در اولویت پایین تر)

              دیدگاه


                #8
                پاسخ : اشتباه در طراحی زبان C

                عذرخواهی می کنم که کاربر ساده هستم و فقط ده سال تجربه برنامه نویسی دارم.
                من فقط سه تا شرط شما بررسی کردم.
                بیشتر منظورم این بود که مشکل از زبان c نیست و مشکل از سبک برنامه نویسی شماست.
                واقعا شرمنده با نوشته هام باعث ناراحتی شما شدم.
                در نهایت با یه خداحافظی خوشحالتون می کنم .

                دیدگاه

                لطفا صبر کنید...
                X