۰
subtitle
ارسال: #۱
  
سوال از خطاها
سلام
نمیدونم سوال زیر جز سوالهای کامپایلر یا برنامه سازی.... به هر حال ممنون میشم جواب سوال رو بدین:
استفاده از + به جای = در عبارت زیر، در زبان C چه نوع خطایی محسوب می شود؟
۱) نحوی(زمان کامپایل)
۲) ازمون نوع (زمان اجرا)
۳) معنایی(زمان کامپایل)
۴) منطقی(زمان اجرا)
نمیدونم سوال زیر جز سوالهای کامپایلر یا برنامه سازی.... به هر حال ممنون میشم جواب سوال رو بدین:
استفاده از + به جای = در عبارت زیر، در زبان C چه نوع خطایی محسوب می شود؟
;a + b-c
۱) نحوی(زمان کامپایل)
۲) ازمون نوع (زمان اجرا)
۳) معنایی(زمان کامپایل)
۴) منطقی(زمان اجرا)
۱
ارسال: #۲
  
RE: سوال از خطاها
در کمال شگفتی الان با یه کتاب چک کردم! گفته عبارت مثلا ;i+j طبق تعریف نحو زبان C یک عبارت درست است. و اساسا این خطای منطقی میشه.
یادم نمیاد تا حالا همچین کدی نوشته باشم ، برلندم باز نشد کدشو بزنم. ولی میگه درسته دیگه!
یادم نمیاد تا حالا همچین کدی نوشته باشم ، برلندم باز نشد کدشو بزنم. ولی میگه درسته دیگه!
ارسال: #۳
  
RE: سوال از خطاها
ارسال: #۴
  
RE: سوال از خطاها
(۱۷ بهمن ۱۳۹۲ ۰۸:۲۰ ق.ظ)e.shrm نوشته شده توسط: در کمال شگفتی الان با یه کتاب چک کردم! گفته عبارت مثلا ;i+j طبق تعریف نحو زبان C یک عبارت درست است. و اساسا این خطای منطقی میشه.
یادم نمیاد تا حالا همچین کدی نوشته باشم ، برلندم باز نشد کدشو بزنم. ولی میگه درسته دیگه!
از این کمک بگیرید
مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمیباشید. جهت مشاهده پیوندها ثبت نام کنید.
ارسال: #۵
  
RE: سوال از خطاها
۱
ارسال: #۶
  
RE: سوال از خطاها
کاری که + انجام میده اینه که حاصل دو تا عملوندشو در یه حافظه موقت حساب میکنه و مقدارشو برمیگردونه (به عملگر بعدی)؛ به عبارت دیگه + باعث تغییر متغیرهای حافظه نمیشه مگر اینکه با دستور = اون مقدار محاسبه شده در متغیر موقت به یه متغیر برنامه تخصیص داده بشه؛ به همین جهت در درخت تجزیه + (یا * / -) نمیتونه ریشه قرار بگیره که در سوال پرسیده شده این اتفاق میفته (- میشه ریشه درخت)؛ بنابراین یه درخت تجزیه داریم که تشکیل میشه (نحوی مشکل نداره) اما درخت بامعنایی نیست؛
پ.ن. خطای منطقی قابل تشخیص نیست و خود برنامه نویس باید متوجه اشتباهش بشه؛
پ.ن. اون سوال دیگه ای که مربوط به = و == هست هم دلیلی مشابه به بالا رو داره ولی خطاش منطقیه (عملگر = در زبان C علاوه بر اینکه مقدار سمت راست رو به سمت چپ نسبت میده، اون مقدار رو ریترن میکنه؛ بهمین دلیل در زبان C میشه نوشت a=b=c درحالیکه در زبان پاسکال خطای سینتکس داره؛ حالا اگه این مقداری که بعد از انتساب توسط = ریترن میشه ۰ باشه حاصل if میشه false و اگه غیر ۰ باشه حاصل if میشه true که گاهی پاسخ مورد نظر ما رو میده و گاهی نمیده که این اشکالو برنامه نویس باید بفهمه)؛
پ.ن. خطای منطقی قابل تشخیص نیست و خود برنامه نویس باید متوجه اشتباهش بشه؛
پ.ن. اون سوال دیگه ای که مربوط به = و == هست هم دلیلی مشابه به بالا رو داره ولی خطاش منطقیه (عملگر = در زبان C علاوه بر اینکه مقدار سمت راست رو به سمت چپ نسبت میده، اون مقدار رو ریترن میکنه؛ بهمین دلیل در زبان C میشه نوشت a=b=c درحالیکه در زبان پاسکال خطای سینتکس داره؛ حالا اگه این مقداری که بعد از انتساب توسط = ریترن میشه ۰ باشه حاصل if میشه false و اگه غیر ۰ باشه حاصل if میشه true که گاهی پاسخ مورد نظر ما رو میده و گاهی نمیده که این اشکالو برنامه نویس باید بفهمه)؛
ارسال: #۷
  
RE: سوال از خطاها
(۱۷ بهمن ۱۳۹۲ ۰۱:۴۷ ب.ظ)Ghiasoddin نوشته شده توسط: کاری که + انجام میده اینه که حاصل دو تا عملوندشو در یه حافظه موقت حساب میکنه و مقدارشو برمیگردونه (به عملگر بعدی)؛ به عبارت دیگه + باعث تغییر متغیرهای حافظه نمیشه مگر اینکه با دستور = اون مقدار محاسبه شده در متغیر موقت به یه متغیر برنامه تخصیص داده بشه؛ به همین جهت در درخت تجزیه + (یا * / -) نمیتونه ریشه قرار بگیره که در سوال پرسیده شده این اتفاق میفته (- میشه ریشه درخت)؛ بنابراین یه درخت تجزیه داریم که تشکیل میشه (نحوی مشکل نداره) اما درخت بامعنایی نیست؛
پ.ن. خطای منطقی قابل تشخیص نیست و خود برنامه نویس باید متوجه اشتباهش بشه؛
پ.ن. اون سوال دیگه ای که مربوط به = و == هست هم دلیلی مشابه به بالا رو داره ولی خطاش منطقیه (عملگر = در زبان C علاوه بر اینکه مقدار سمت راست رو به سمت چپ نسبت میده، اون مقدار رو ریترن میکنه؛ بهمین دلیل در زبان C میشه نوشت a=b=c درحالیکه در زبان پاسکال خطای سینتکس داره؛ حالا اگه این مقداری که بعد از انتساب توسط = ریترن میشه ۰ باشه حاصل if میشه false و اگه غیر ۰ باشه حاصل if میشه true که گاهی پاسخ مورد نظر ما رو میده و گاهی نمیده که این اشکالو برنامه نویس باید بفهمه)؛
خیلی متشکرم و ممنون
۱
ارسال: #۸
  
RE: سوال از خطاها
به نظر منم ۴ میشه، خطای منطقی! چون اصولا این عمل خطایی ایجاد نمیکنه فقط عبارت یه مقداری برمیگردونه که هیچ مقصدی برای نوشتنش تعیین نشده پس از این مقدار استفاده نمیشه ولی خطایی هم نمیده، یه مثال میارم: دستور printf رو تصور کنید، این دستور یه مقدار چاپ می کنه و تعداد کاراکتر چاپ شده رو بر میگردونه، حالا اگه متغیری سمت چپش بنویسیم( ;('x=printf('something ) این مقدار میره توی x، اما اگه هیچی ننویسیم و فقط printf خالی رو صدا بزنیم ( ;('printf('something ) دستور بدرستی اجرا میشه و از مقدار برگشتی صرفنظر میشه، اگه قرار بود با عبارت بالا خطایی پیش بیاد واسه این دستور چاپ هم باید پیش بیاد ولی همه میدونیم که پیش نمیاد.
البته این نظر منه، امیدوارم آخرش به یه نتیجه قطعی برسیم، چون اگه زبونم لال فردا نه پس فردا تو کنکور بیاد همه میمونیم چی بزنیم(اما خدایی رشته هم داریما!!! پره از این ابهامات!)
البته این نظر منه، امیدوارم آخرش به یه نتیجه قطعی برسیم، چون اگه زبونم لال فردا نه پس فردا تو کنکور بیاد همه میمونیم چی بزنیم(اما خدایی رشته هم داریما!!! پره از این ابهامات!)
ارسال: #۹
  
RE: سوال از خطاها
(۱۷ بهمن ۱۳۹۲ ۰۱:۴۹ ب.ظ)firouziam نوشته شده توسط: به نظر منم ۴ میشه، خطای منطقی! چون اصولا این عمل خطایی ایجاد نمیکنه فقط عبارت یه مقداری برمیگردونه که هیچ مقصدی برای نوشتنش تعیین نشده پس از این مقدار استفاده نمیشه ولی خطایی هم نمیده، یه مثال میارم: دستور printf رو تصور کنید، این دستور یه مقدار چاپ می کنه و تعداد کاراکتر چاپ شده رو بر میگردونه، حالا اگه متغیری سمت چپش بنویسیم( ;('x=printf('something ) این مقدار میره توی x، اما اگه هیچی ننویسیم و فقط printf خالی رو صدا بزنیم ( ;('printf('something ) دستور بدرستی اجرا میشه و از مقدار برگشتی صرفنظر میشه، اگه قرار بود با عبارت بالا خطایی پیش بیاد واسه این دستور چاپ هم باید پیش بیاد ولی همه میدونیم که پیش نمیاد.
البته این نظر منه، امیدوارم آخرش به یه نتیجه قطعی برسیم، چون اگه زبونم لال فردا نه پس فردا تو کنکور بیاد همه میمونیم چی بزنیم(اما خدایی رشته هم داریما!!! پره از این ابهامات!)
بله حرفتون درسته
کدش هم تست شد خطای کامپایل نداد
۰
ارسال: #۱۰
  
RE: سوال از خطاها
به نظرم گزینه ۱ درسته
اگه درست میگم که بگید تا تو همین پست توضیحات رو بنویسم
اگه نه هم که هیچی
اگه درست میگم که بگید تا تو همین پست توضیحات رو بنویسم
اگه نه هم که هیچی
ارسال: #۱۱
  
RE: سوال از خطاها
(۱۶ بهمن ۱۳۹۲ ۱۱:۳۳ ب.ظ)hosshah نوشته شده توسط: به نظرم گزینه ۱ درستهنظر خودمم روی گزینه یک هست به علت اینکه درخت پارس می تونه متوجه بشه که به جای مساوی به اضافه اومده! اما با توجه به سوال پارسال شک کردم! که اینجا خطای منطقی نیست؟!!
اگه درست میگم که بگید تا تو همین پست توضیحات رو بنویسم
اگه نه هم که هیچی
ارسال: #۱۲
  
RE: سوال از خطاها
(۱۶ بهمن ۱۳۹۲ ۱۱:۳۶ ب.ظ)fulgent نوشته شده توسط: نظر خودمم روی گزینه یک هست به علت اینکه درخت پارس می تونه متوجه بشه که به جای مساوی به اضافه اومده! اما با توجه به سوال پارسال شک کردم! که اینجا خطای منطقی نیست؟!!
البته سوال پارسال رو من از روی تجربه پاسخ دادم که درست بود اما این بر اساس دانشه و اطمینان زیادی نداره
برای کجاست این سوال
۰
ارسال: #۱۳
  
RE: سوال از خطاها
(۱۶ بهمن ۱۳۹۲ ۰۵:۳۳ ب.ظ)fulgent نوشته شده توسط: سلام
نمیدونم سوال زیر جز سوالهای کامپایلر یا برنامه سازی.... به هر حال ممنون میشم جواب سوال رو بدین:
استفاده از + به جای = در عبارت زیر، در زبان C چه نوع خطایی محسوب می شود؟
;a + b-c
۱) نحوی(زمان کامپایل)
۲) ازمون نوع (زمان اجرا)
۳) معنایی(زمان کامپایل)
۴) منطقی(زمان اجرا)
سوال مربوط ب درس برنامه سازی هست و احتمال زیاد گزینه ۱/
۰
ارسال: #۱۴
  
RE: سوال از خطاها
اگر همه با گزینه ۱ موافق هستید پس یعنی میشه گفت سوالی هم که پارسال داده بودند در مورد == در شرط If ، اگر در گزینه ها خطای نحوی داشت جواب خطای نحوی می شد؟
اگر بله، یعنی نحوی نتونسته بود این خطا رو بگیره که در زمان اجرا به عنوان خطای منطقی مطرح شد؟
اگر خیر، چرا؟ و چطور این خطای نحوی میشه و اون نمیشه؟
دچار تناقض عجیب غریبی شدم!!!
اگر بله، یعنی نحوی نتونسته بود این خطا رو بگیره که در زمان اجرا به عنوان خطای منطقی مطرح شد؟
اگر خیر، چرا؟ و چطور این خطای نحوی میشه و اون نمیشه؟
دچار تناقض عجیب غریبی شدم!!!
ارسال: #۱۵
  
RE: سوال از خطاها
نحوی که قطعا نبود ولی حالا معنایی رو نمیدونم چجور نقض کنم
چون ما میتونیم با استفاده از پارسری که داریم a=b رو هم کاهش بدیم
یعنی این هم یک عبارت مجاز توی زبانمون هست
چون ما میتونیم با استفاده از پارسری که داریم a=b رو هم کاهش بدیم
یعنی این هم یک عبارت مجاز توی زبانمون هست
ارسال: #۱۶
  
RE: سوال از خطاها
(۱۶ بهمن ۱۳۹۲ ۱۱:۴۵ ب.ظ)fulgent نوشته شده توسط: اگر همه با گزینه ۱ موافق هستید پس یعنی میشه گفت سوالی هم که پارسال داده بودند در مورد == در شرط If ، اگر در گزینه ها خطای نحوی داشت جواب خطای نحوی می شد؟
اگر بله، یعنی نحوی نتونسته بود این خطا رو بگیره که در زمان اجرا به عنوان خطای منطقی مطرح شد؟
اگر خیر، چرا؟ و چطور این خطای نحوی میشه و اون نمیشه؟
دچار تناقض عجیب غریبی شدم!!!
سوال پارسال رو کسایی ک ب برنامه سازی C++ و ساختمان مسلط بودن خیلی راحت می تونستن تشخیص بدن ک خطای منطقی هست.
البته ممکن بود این خطا در سوال پارسال در یک زبان دیگه ک عملگر مساوی مقدار برگشتی نداشت ، خطای معنایی تلقی بشه.
ارسال: #۱۷
  
RE: سوال از خطاها
ارسال: #۱۸
  
RE: سوال از خطاها
(۱۷ بهمن ۱۳۹۲ ۱۲:۱۰ ق.ظ)hosshah نوشته شده توسط:(17 بهمن ۱۳۹۲ ۱۲:۰۷ ق.ظ)AEM4949 نوشته شده توسط: البته ممکن بود این خطا در سوال پارسال در یک زبان دیگه ک عملگر مساوی مقدار برگشتی نداشت ، خطای معنایی تلقی بشه.
در اون صورت هم من میگم خطا نحوی نبود بلکه خطای مفهومی یا معنایی بود
مرسی___اشتباه تایپی بود . اصلاح شد
ارسال: #۱۹
  
RE: سوال از خطاها
۰
۰
ارسال: #۲۱
  
RE: سوال از خطاها
من رشتم کامپیوتر نیست ولی امیدوارم کمکتون کرده باشم
خطای syntax اگه کد برنامه به صورت گرامری اشتباه باشه این خطا رو داریم
جا ۳=x+1 بنویسیم ۳+۱+x
خطای logical برنامه اجرا میشه ولی جواب مورد نظر بدست نمیاد یعنی موقعه کامپایل مشخص نیست
جا ۳=x+1 بنویسیم ۳=x*1
خطای run time برنامه کامپایل میشه ولی خطای رخ میده و برنامه متوقف میشه مثله اینکه یه جا تقسم صفر بنویسیم
این خطای که شما میگین Syntax هست خطای معنایی نحوی قاعدی ... گزینه دو جواب میشه
خطای syntax اگه کد برنامه به صورت گرامری اشتباه باشه این خطا رو داریم
جا ۳=x+1 بنویسیم ۳+۱+x
خطای logical برنامه اجرا میشه ولی جواب مورد نظر بدست نمیاد یعنی موقعه کامپایل مشخص نیست
جا ۳=x+1 بنویسیم ۳=x*1
خطای run time برنامه کامپایل میشه ولی خطای رخ میده و برنامه متوقف میشه مثله اینکه یه جا تقسم صفر بنویسیم
این خطای که شما میگین Syntax هست خطای معنایی نحوی قاعدی ... گزینه دو جواب میشه
۰
ارسال: #۲۲
  
RE: سوال از خطاها
سوال برنامه سازی فصل ۳هست
+ برا زمان کامپایله؛اگر میگفت کامپایل؛ میشد ترجمه اما الان گفته زمان کامپایل ینی موقع پیاده سازی؛میدونیم + برا پیاده سازیه.پس تا اینجا ۲و ۴ حذف ؛بعد چون ساختار برنامه رو عوض کردیم خطای syntax یا همون نحوی میده گزینه ۱درسته
+ برا زمان کامپایله؛اگر میگفت کامپایل؛ میشد ترجمه اما الان گفته زمان کامپایل ینی موقع پیاده سازی؛میدونیم + برا پیاده سازیه.پس تا اینجا ۲و ۴ حذف ؛بعد چون ساختار برنامه رو عوض کردیم خطای syntax یا همون نحوی میده گزینه ۱درسته
۰
ارسال: #۲۳
  
RE: سوال از خطاها
یه سوال دیگه!
خطای منطقی چطور معلوم میشه؟ یعنی وقتی شما یه برنامه رو می نویسید و حالا اجراش می کنید اگر خطای منطقی وجود داشته باشه به صورت ارور نمایش داده میشه؟
-اگر جواب بله است که من کد سوال پارسال (یعنی به جای == در شرطIf = گذاشتم) و هیچ اروری نداد.(پس یعنی کلا خطایی وجود نداره؟!)
-اگر جواب منفی است پس کاربر باید از کجا این خطای منطقی رو متوجه بشه؟ مگه نمی گیم خطای زمان اجراست؟ پس باید با Run کردن برنامه هرچی خطای زمان کامپایل و اجرا هست معلوم بشه! (که الآن معلوم نمیشه!)
خطای منطقی چطور معلوم میشه؟ یعنی وقتی شما یه برنامه رو می نویسید و حالا اجراش می کنید اگر خطای منطقی وجود داشته باشه به صورت ارور نمایش داده میشه؟
-اگر جواب بله است که من کد سوال پارسال (یعنی به جای == در شرطIf = گذاشتم) و هیچ اروری نداد.(پس یعنی کلا خطایی وجود نداره؟!)
-اگر جواب منفی است پس کاربر باید از کجا این خطای منطقی رو متوجه بشه؟ مگه نمی گیم خطای زمان اجراست؟ پس باید با Run کردن برنامه هرچی خطای زمان کامپایل و اجرا هست معلوم بشه! (که الآن معلوم نمیشه!)
۰
ارسال: #۲۴
  
RE: سوال از خطاها
با تشکر از تمام دوستانی که وقت گذاشتن.
جواب ابهامات:
خطای منطقی به صورت ارور مشخص نمیشه بلکه وقتی نتیجه برنامه با آنچه کاربر انتظار داشته متفاوت میشه، ما متوجه می شویم که خطای منطقی رخ داده است.
در مورد سوال If از آنجایی که دستور انتساب در زبان C با = انجام می گیرد پس اگر ما در شرط If نیز از = استفاده کنیم انگار عملیات انتساب رخ داده که این اتفاق نه از لحاظ نحوی مشکل دارد و نه از لحاظ معنایی، فقط در نهایت کاربر می بیند که جواب انچه که انتظار داشته نشده و متوجه می شود احتمالا خطای منطقی رخ داده است.
در مورد سوال بالا کامپایلر زبان C این عملیات جمع را انجام می دهد ولی چون دستور انتسابی در این خط از برنامه وجود ندارد نتیجه عملیات را درون متغیر خاصی نمی ریزد و در نهایت هم اروری نمی دهد. چون نه خطای منطقی اتفاق افتاده و نه معنایی. اما باز هم کاربر با دیدن نتیجه باید به وجود خطای منطقی پی ببرد.
جواب ابهامات:
خطای منطقی به صورت ارور مشخص نمیشه بلکه وقتی نتیجه برنامه با آنچه کاربر انتظار داشته متفاوت میشه، ما متوجه می شویم که خطای منطقی رخ داده است.
در مورد سوال If از آنجایی که دستور انتساب در زبان C با = انجام می گیرد پس اگر ما در شرط If نیز از = استفاده کنیم انگار عملیات انتساب رخ داده که این اتفاق نه از لحاظ نحوی مشکل دارد و نه از لحاظ معنایی، فقط در نهایت کاربر می بیند که جواب انچه که انتظار داشته نشده و متوجه می شود احتمالا خطای منطقی رخ داده است.
در مورد سوال بالا کامپایلر زبان C این عملیات جمع را انجام می دهد ولی چون دستور انتسابی در این خط از برنامه وجود ندارد نتیجه عملیات را درون متغیر خاصی نمی ریزد و در نهایت هم اروری نمی دهد. چون نه خطای منطقی اتفاق افتاده و نه معنایی. اما باز هم کاربر با دیدن نتیجه باید به وجود خطای منطقی پی ببرد.
۰
ارسال: #۲۵
  
RE: سوال از خطاها
به نظر من گزینه ۳ درسته چون همون جوری که می دونیم خطاهای معنایی به دو دسته تقسیم میشن :
۱خطای معنایی در زمان کامپایل
۲- خطای معنایی در زمان اجرا
از اون جایی که متغیر تعریف نشده ولی استفاده شده خطای معنایی در زمان کامپایل میده یعنی اصلا کد برنامه برای اجرا تولید نمیشود. و اون عبارت محاسباتی هم مشکلی ندارد.
البته اون عبارتی که شما نوشتید خطای منطقی داره.
۱خطای معنایی در زمان کامپایل
۲- خطای معنایی در زمان اجرا
از اون جایی که متغیر تعریف نشده ولی استفاده شده خطای معنایی در زمان کامپایل میده یعنی اصلا کد برنامه برای اجرا تولید نمیشود. و اون عبارت محاسباتی هم مشکلی ندارد.
البته اون عبارتی که شما نوشتید خطای منطقی داره.
موضوعهای مرتبط با این موضوع... |
|||||
موضوع: | نویسنده | پاسخ: | بازدید: | آخرین ارسال | |
فصل خطاها- اثبات قضیه | Pure Liveliness | ۲ | ۲,۹۱۷ |
۲۹ تیر ۱۳۹۴ ۰۳:۰۴ ب.ظ آخرین ارسال: Pure Liveliness |
|
فصل خطاها- سری تیلور! ... | Pure Liveliness | ۲ | ۲,۵۱۲ |
۲۹ تیر ۱۳۹۴ ۰۳:۰۳ ب.ظ آخرین ارسال: Pure Liveliness |
|
انواع خطاها | MiladCr7 | ۲ | ۴,۱۳۰ |
۰۲ بهمن ۱۳۹۳ ۱۲:۵۹ ب.ظ آخرین ارسال: MiladCr7 |
|
سوال مهندسی نرم افزار سراسری ۸۴( خطاها و نقص) | tarane1992 | ۲ | ۳,۴۶۸ |
۰۶ آذر ۱۳۹۳ ۰۳:۰۳ ب.ظ آخرین ارسال: af.hm |
|
سوال کامپیوتر ۸۱(روش تستی بدست آوردن خطاهای صفحه LRU از کتاب حقیقت ) | tarane1992 | ۱ | ۱,۹۹۳ |
۳۰ آذر ۱۳۹۲ ۰۲:۱۶ ق.ظ آخرین ارسال: M@A |
|
خطاهای معمول PHP | parniann | ۰ | ۱,۸۶۴ |
۲۷ مهر ۱۳۹۱ ۱۰:۴۶ ق.ظ آخرین ارسال: parniann |
|
تشخیص خطاهای وابسته به متن در برنامه | sepid | ۷ | ۶,۰۹۵ |
۰۲ بهمن ۱۳۸۹ ۰۲:۱۲ ق.ظ آخرین ارسال: hatami |
Can I see some ID?
Feeling left out?
نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. رمزت رو فراموش کردی؟ اینجا به یادت میاریم! close