زمان کنونی: ۱۰ آذر ۱۴۰۳, ۰۴:۰۱ ق.ظ مهمان گرامی به انجمن مانشت خوش آمدید. برای استفاده از تمامی امکانات انجمن می‌توانید عضو شوید.
گزینه‌های شما (ورودثبت نام)

سوال از خطاها

ارسال:
  

fulgent پرسیده:

سوال از خطاها

سلام
نمیدونم سوال زیر جز سوالهای کامپایلر یا برنامه سازی.... به هر حال ممنون میشم جواب سوال رو بدین:

استفاده از + به جای = در عبارت زیر، در زبان C چه نوع خطایی محسوب می شود؟
;a + b-c


۱) نحوی(زمان کامپایل)
۲) ازمون نوع (زمان اجرا)
۳) معنایی(زمان کامپایل)
۴) منطقی(زمان اجرا)
نقل قول این ارسال در یک پاسخ

۱
ارسال:
  

e.shrm پاسخ داده:

RE: سوال از خطاها

در کمال شگفتی الان با یه کتاب چک کردم! گفته عبارت مثلا ;i+j طبق تعریف نحو زبان C یک عبارت درست است. و اساسا این خطای منطقی میشه.
یادم نمیاد تا حالا همچین کدی نوشته باشم ، برلندم باز نشد کدشو بزنم. ولی میگه درسته دیگه!

[تصویر:  247049_81001903554240048336.jpg]

[تصویر:  247049_46260054318761361119.jpg]
نقل قول این ارسال در یک پاسخ

ارسال:
  

Riemann پاسخ داده:

RE: سوال از خطاها

(۱۷ بهمن ۱۳۹۲ ۰۸:۲۰ ق.ظ)e.shrm نوشته شده توسط:  برلندم
برلند؟ واقعن که !
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ

ارسال:
  

unicornux پاسخ داده:

RE: سوال از خطاها

(۱۷ بهمن ۱۳۹۲ ۰۸:۲۰ ق.ظ)e.shrm نوشته شده توسط:  در کمال شگفتی الان با یه کتاب چک کردم! گفته عبارت مثلا ;i+j طبق تعریف نحو زبان C یک عبارت درست است. و اساسا این خطای منطقی میشه.
یادم نمیاد تا حالا همچین کدی نوشته باشم ، برلندم باز نشد کدشو بزنم. ولی میگه درسته دیگه!


از این کمک بگیرید Idea

مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمی‌باشید. جهت مشاهده پیوندها ثبت نام کنید.
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ

ارسال:
  

e.shrm پاسخ داده:

RE: سوال از خطاها

(۱۷ بهمن ۱۳۹۲ ۱۰:۰۲ ق.ظ)Riemann نوشته شده توسط:  
(17 بهمن ۱۳۹۲ ۰۸:۲۰ ق.ظ)e.shrm نوشته شده توسط:  برلندم
برلند؟ واقعن که !
من ۴ ساله C کد نزدم خب. این برلندم از اعماق فایل هام پیدا کردم که lib هاش پاک شده بود کار نمیکرد!
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ

۱
ارسال:
  

equilibrium پاسخ داده:

RE: سوال از خطاها

کاری که + انجام میده اینه که حاصل دو تا عملوندشو در یه حافظه موقت حساب میکنه و مقدارشو برمیگردونه (به عملگر بعدی)؛ به عبارت دیگه + باعث تغییر متغیرهای حافظه نمیشه مگر اینکه با دستور = اون مقدار محاسبه شده در متغیر موقت به یه متغیر برنامه تخصیص داده بشه؛ به همین جهت در درخت تجزیه + (یا * / -) نمیتونه ریشه قرار بگیره که در سوال پرسیده شده این اتفاق میفته (- میشه ریشه درخت)؛ بنابراین یه درخت تجزیه داریم که تشکیل میشه (نحوی مشکل نداره) اما درخت بامعنایی نیست؛

پ.ن. خطای منطقی قابل تشخیص نیست و خود برنامه نویس باید متوجه اشتباهش بشه؛
پ.ن. اون سوال دیگه ای که مربوط به = و == هست هم دلیلی مشابه به بالا رو داره ولی خطاش منطقیه (عملگر = در زبان C علاوه بر اینکه مقدار سمت راست رو به سمت چپ نسبت میده، اون مقدار رو ریترن میکنه؛ بهمین دلیل در زبان C میشه نوشت a=b=c درحالیکه در زبان پاسکال خطای سینتکس داره؛ حالا اگه این مقداری که بعد از انتساب توسط = ریترن میشه ۰ باشه حاصل if میشه false و اگه غیر ۰ باشه حاصل if میشه true که گاهی پاسخ مورد نظر ما رو میده و گاهی نمیده که این اشکالو برنامه نویس باید بفهمه)؛
نقل قول این ارسال در یک پاسخ

ارسال:
  

fulgent پاسخ داده:

RE: سوال از خطاها

(۱۷ بهمن ۱۳۹۲ ۰۱:۴۷ ب.ظ)Ghiasoddin نوشته شده توسط:  کاری که + انجام میده اینه که حاصل دو تا عملوندشو در یه حافظه موقت حساب میکنه و مقدارشو برمیگردونه (به عملگر بعدی)؛ به عبارت دیگه + باعث تغییر متغیرهای حافظه نمیشه مگر اینکه با دستور = اون مقدار محاسبه شده در متغیر موقت به یه متغیر برنامه تخصیص داده بشه؛ به همین جهت در درخت تجزیه + (یا * / -) نمیتونه ریشه قرار بگیره که در سوال پرسیده شده این اتفاق میفته (- میشه ریشه درخت)؛ بنابراین یه درخت تجزیه داریم که تشکیل میشه (نحوی مشکل نداره) اما درخت بامعنایی نیست؛

پ.ن. خطای منطقی قابل تشخیص نیست و خود برنامه نویس باید متوجه اشتباهش بشه؛
پ.ن. اون سوال دیگه ای که مربوط به = و == هست هم دلیلی مشابه به بالا رو داره ولی خطاش منطقیه (عملگر = در زبان C علاوه بر اینکه مقدار سمت راست رو به سمت چپ نسبت میده، اون مقدار رو ریترن میکنه؛ بهمین دلیل در زبان C میشه نوشت a=b=c درحالیکه در زبان پاسکال خطای سینتکس داره؛ حالا اگه این مقداری که بعد از انتساب توسط = ریترن میشه ۰ باشه حاصل if میشه false و اگه غیر ۰ باشه حاصل if میشه true که گاهی پاسخ مورد نظر ما رو میده و گاهی نمیده که این اشکالو برنامه نویس باید بفهمه)؛

خیلی متشکرم و ممنون Smile
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ

۱
ارسال:
  

firouziam پاسخ داده:

RE: سوال از خطاها

به نظر منم ۴ میشه، خطای منطقی! چون اصولا این عمل خطایی ایجاد نمیکنه فقط عبارت یه مقداری برمیگردونه که هیچ مقصدی برای نوشتنش تعیین نشده پس از این مقدار استفاده نمیشه ولی خطایی هم نمیده، یه مثال میارم: دستور printf رو تصور کنید، این دستور یه مقدار چاپ می کنه و تعداد کاراکتر چاپ شده رو بر میگردونه، حالا اگه متغیری سمت چپش بنویسیم( ;('x=printf('something ) این مقدار میره توی x، اما اگه هیچی ننویسیم و فقط printf خالی رو صدا بزنیم ( ;('printf('something ) دستور بدرستی اجرا میشه و از مقدار برگشتی صرفنظر میشه، اگه قرار بود با عبارت بالا خطایی پیش بیاد واسه این دستور چاپ هم باید پیش بیاد ولی همه میدونیم که پیش نمیاد.

البته این نظر منه، امیدوارم آخرش به یه نتیجه قطعی برسیم، چون اگه زبونم لال فردا نه پس فردا تو کنکور بیاد همه میمونیم چی بزنیم(اما خدایی رشته هم داریما!!! پره از این ابهامات!)
مشاهده‌ی وب‌سایت کاربر
نقل قول این ارسال در یک پاسخ

ارسال:
  

hosshah پاسخ داده:

RE: سوال از خطاها

(۱۷ بهمن ۱۳۹۲ ۰۱:۴۹ ب.ظ)firouziam نوشته شده توسط:  به نظر منم ۴ میشه، خطای منطقی! چون اصولا این عمل خطایی ایجاد نمیکنه فقط عبارت یه مقداری برمیگردونه که هیچ مقصدی برای نوشتنش تعیین نشده پس از این مقدار استفاده نمیشه ولی خطایی هم نمیده، یه مثال میارم: دستور printf رو تصور کنید، این دستور یه مقدار چاپ می کنه و تعداد کاراکتر چاپ شده رو بر میگردونه، حالا اگه متغیری سمت چپش بنویسیم( ;('x=printf('something ) این مقدار میره توی x، اما اگه هیچی ننویسیم و فقط printf خالی رو صدا بزنیم ( ;('printf('something ) دستور بدرستی اجرا میشه و از مقدار برگشتی صرفنظر میشه، اگه قرار بود با عبارت بالا خطایی پیش بیاد واسه این دستور چاپ هم باید پیش بیاد ولی همه میدونیم که پیش نمیاد.

البته این نظر منه، امیدوارم آخرش به یه نتیجه قطعی برسیم، چون اگه زبونم لال فردا نه پس فردا تو کنکور بیاد همه میمونیم چی بزنیم(اما خدایی رشته هم داریما!!! پره از این ابهامات!)

بله حرفتون درسته
کدش هم تست شد خطای کامپایل نداد
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ

۰
ارسال: #۱۰
  

hosshah پاسخ داده:

RE: سوال از خطاها

به نظرم گزینه ۱ درسته
اگه درست میگم که بگید تا تو همین پست توضیحات رو بنویسم
اگه نه هم که هیچی Undecided
نقل قول این ارسال در یک پاسخ

ارسال: #۱۱
  

fulgent پاسخ داده:

RE: سوال از خطاها

(۱۶ بهمن ۱۳۹۲ ۱۱:۳۳ ب.ظ)hosshah نوشته شده توسط:  به نظرم گزینه ۱ درسته
اگه درست میگم که بگید تا تو همین پست توضیحات رو بنویسم
اگه نه هم که هیچی Undecided
نظر خودمم روی گزینه یک هست به علت اینکه درخت پارس می تونه متوجه بشه که به جای مساوی به اضافه اومده! اما با توجه به سوال پارسال شک کردم! که اینجا خطای منطقی نیست؟!!
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ

ارسال: #۱۲
  

hosshah پاسخ داده:

RE: سوال از خطاها

(۱۶ بهمن ۱۳۹۲ ۱۱:۳۶ ب.ظ)fulgent نوشته شده توسط:  نظر خودمم روی گزینه یک هست به علت اینکه درخت پارس می تونه متوجه بشه که به جای مساوی به اضافه اومده! اما با توجه به سوال پارسال شک کردم! که اینجا خطای منطقی نیست؟!!

Dodgy
البته سوال پارسال رو من از روی تجربه پاسخ دادم که درست بود اما این بر اساس دانشه و اطمینان زیادی نداره Big Grin
برای کجاست این سوال
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ

۰
ارسال: #۱۳
  

AEM4949 پاسخ داده:

RE: سوال از خطاها

(۱۶ بهمن ۱۳۹۲ ۰۵:۳۳ ب.ظ)fulgent نوشته شده توسط:  سلام
نمیدونم سوال زیر جز سوالهای کامپایلر یا برنامه سازی.... به هر حال ممنون میشم جواب سوال رو بدین:

استفاده از + به جای = در عبارت زیر، در زبان C چه نوع خطایی محسوب می شود؟
;a + b-c


۱) نحوی(زمان کامپایل)
۲) ازمون نوع (زمان اجرا)
۳) معنایی(زمان کامپایل)
۴) منطقی(زمان اجرا)

سوال مربوط ب درس برنامه سازی هست و احتمال زیاد گزینه ۱/
نقل قول این ارسال در یک پاسخ

۰
ارسال: #۱۴
  

fulgent پاسخ داده:

RE: سوال از خطاها

اگر همه با گزینه ۱ موافق هستید پس یعنی میشه گفت سوالی هم که پارسال داده بودند در مورد == در شرط If ، اگر در گزینه ها خطای نحوی داشت جواب خطای نحوی می شد؟
اگر بله، یعنی نحوی نتونسته بود این خطا رو بگیره که در زمان اجرا به عنوان خطای منطقی مطرح شد؟
اگر خیر، چرا؟ و چطور این خطای نحوی میشه و اون نمیشه؟
دچار تناقض عجیب غریبی شدم!!!Undecided
نقل قول این ارسال در یک پاسخ

ارسال: #۱۵
  

hosshah پاسخ داده:

RE: سوال از خطاها

نحوی که قطعا نبود ولی حالا معنایی رو نمیدونم چجور نقض کنم
چون ما میتونیم با استفاده از پارسری که داریم a=b رو هم کاهش بدیم
یعنی این هم یک عبارت مجاز توی زبانمون هست
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ

ارسال: #۱۶
  

AEM4949 پاسخ داده:

RE: سوال از خطاها

(۱۶ بهمن ۱۳۹۲ ۱۱:۴۵ ب.ظ)fulgent نوشته شده توسط:  اگر همه با گزینه ۱ موافق هستید پس یعنی میشه گفت سوالی هم که پارسال داده بودند در مورد == در شرط If ، اگر در گزینه ها خطای نحوی داشت جواب خطای نحوی می شد؟
اگر بله، یعنی نحوی نتونسته بود این خطا رو بگیره که در زمان اجرا به عنوان خطای منطقی مطرح شد؟
اگر خیر، چرا؟ و چطور این خطای نحوی میشه و اون نمیشه؟
دچار تناقض عجیب غریبی شدم!!!Undecided

سوال پارسال رو کسایی ک ب برنامه سازی C++ و ساختمان مسلط بودن خیلی راحت می تونستن تشخیص بدن ک خطای منطقی هست.
البته ممکن بود این خطا در سوال پارسال در یک زبان دیگه ک عملگر مساوی مقدار برگشتی نداشت ، خطای معنایی تلقی بشه.
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ

ارسال: #۱۷
  

hosshah پاسخ داده:

RE: سوال از خطاها

(۱۷ بهمن ۱۳۹۲ ۱۲:۰۷ ق.ظ)AEM4949 نوشته شده توسط:  البته ممکن بود این خطا در سوال پارسال در یک زبان دیگه ک عملگر مساوی مقدار برگشتی نداشت ، خطای نحوی تلقی بشه.

در اون صورت هم من میگم خطا نحوی نبود بلکه خطای مفهومی یا معنایی بود
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ

ارسال: #۱۸
  

AEM4949 پاسخ داده:

RE: سوال از خطاها

(۱۷ بهمن ۱۳۹۲ ۱۲:۱۰ ق.ظ)hosshah نوشته شده توسط:  
(17 بهمن ۱۳۹۲ ۱۲:۰۷ ق.ظ)AEM4949 نوشته شده توسط:  البته ممکن بود این خطا در سوال پارسال در یک زبان دیگه ک عملگر مساوی مقدار برگشتی نداشت ، خطای معنایی تلقی بشه.

در اون صورت هم من میگم خطا نحوی نبود بلکه خطای مفهومی یا معنایی بود

مرسی___اشتباه تایپی بود . اصلاح شدSmile
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ

ارسال: #۱۹
  

hosshah پاسخ داده:

RE: سوال از خطاها

(۱۷ بهمن ۱۳۹۲ ۱۲:۱۴ ق.ظ)AEM4949 نوشته شده توسط:  مرسی___اشتباه تایپی بود . اصلاح شدSmile

قربون تو Wink
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ

۰
ارسال: #۲۰
  

e.shrm پاسخ داده:

RE: سوال از خطاها

این سوال به نظرم ۱ میشه. همون تحلیل خودت به نظرم درسته. اساسا ربطی هم به خطاهای معنایی نداره.
ولی سوالت در مورد = و == قدیما اینجا توضیح داده بودم :
مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمی‌باشید. جهت مشاهده پیوندها ثبت نام کنید.
نقل قول این ارسال در یک پاسخ

۰
ارسال: #۲۱
  

mohammad.ardeshiri پاسخ داده:

RE: سوال از خطاها

من رشتم کامپیوتر نیست ولی امیدوارم کمکتون کرده باشم

خطای syntax اگه کد برنامه به صورت گرامری اشتباه باشه این خطا رو داریم
جا ۳=x+1 بنویسیم ۳+۱+x

خطای logical برنامه اجرا میشه ولی جواب مورد نظر بدست نمیاد یعنی موقعه کامپایل مشخص نیست
جا ۳=x+1 بنویسیم ۳=x*1

خطای run time برنامه کامپایل میشه ولی خطای رخ میده و برنامه متوقف میشه مثله اینکه یه جا تقسم صفر بنویسیم

این خطای که شما میگین Syntax هست خطای معنایی نحوی قاعدی ... گزینه دو جواب میشه
نقل قول این ارسال در یک پاسخ

۰
ارسال: #۲۲
  

Elena_71 پاسخ داده:

RE: سوال از خطاها

سوال برنامه سازی فصل ۳هست
+ برا زمان کامپایله؛اگر میگفت کامپایل؛ میشد ترجمه اما الان گفته زمان کامپایل ینی موقع پیاده سازی؛میدونیم + برا پیاده سازیه.پس تا اینجا ۲و ۴ حذف ؛بعد چون ساختار برنامه رو عوض کردیم خطای syntax یا همون نحوی میده گزینه ۱درسته
نقل قول این ارسال در یک پاسخ

۰
ارسال: #۲۳
  

fulgent پاسخ داده:

RE: سوال از خطاها

یه سوال دیگه!
خطای منطقی چطور معلوم میشه؟ یعنی وقتی شما یه برنامه رو می نویسید و حالا اجراش می کنید اگر خطای منطقی وجود داشته باشه به صورت ارور نمایش داده میشه؟
-اگر جواب بله است که من کد سوال پارسال (یعنی به جای == در شرطIf = گذاشتم) و هیچ اروری نداد.(پس یعنی کلا خطایی وجود نداره؟!)
-اگر جواب منفی است پس کاربر باید از کجا این خطای منطقی رو متوجه بشه؟ مگه نمی گیم خطای زمان اجراست؟ پس باید با Run کردن برنامه هرچی خطای زمان کامپایل و اجرا هست معلوم بشه! (که الآن معلوم نمیشه!)
نقل قول این ارسال در یک پاسخ

۰
ارسال: #۲۴
  

fulgent پاسخ داده:

RE: سوال از خطاها

با تشکر از تمام دوستانی که وقت گذاشتن.
جواب ابهامات:
خطای منطقی به صورت ارور مشخص نمیشه بلکه وقتی نتیجه برنامه با آنچه کاربر انتظار داشته متفاوت میشه، ما متوجه می شویم که خطای منطقی رخ داده است.
در مورد سوال If از آنجایی که دستور انتساب در زبان C با = انجام می گیرد پس اگر ما در شرط If نیز از = استفاده کنیم انگار عملیات انتساب رخ داده که این اتفاق نه از لحاظ نحوی مشکل دارد و نه از لحاظ معنایی، فقط در نهایت کاربر می بیند که جواب انچه که انتظار داشته نشده و متوجه می شود احتمالا خطای منطقی رخ داده است.
در مورد سوال بالا کامپایلر زبان C این عملیات جمع را انجام می دهد ولی چون دستور انتسابی در این خط از برنامه وجود ندارد نتیجه عملیات را درون متغیر خاصی نمی ریزد و در نهایت هم اروری نمی دهد. چون نه خطای منطقی اتفاق افتاده و نه معنایی. اما باز هم کاربر با دیدن نتیجه باید به وجود خطای منطقی پی ببرد.
نقل قول این ارسال در یک پاسخ

۰
ارسال: #۲۵
  

sonia11 پاسخ داده:

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?

به خاطر سپاری رمز Cancel

Feeling left out?


نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. رمزت رو فراموش کردی؟ اینجا به یادت میاریم! close

رمزت رو فراموش کردی؟

Feeling left out?


نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. close