الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الفرق بين Syntax Error و Logical Error

مغلق
بدأه الذ11بح في 11 يناير 2008 · 13 رد · 19,928 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

قال تعالى "وكان الإنسان عجولا" سورة الإسراء - آية 11

فعلا الاية هذي تنطبق علي لاني استعجلت في كتابة الموضوع بدون مااقرا التعليمات

سؤالي الاهم كيف افرق بين الينتاكس ايرور واللوجيك ايرور والرن اوف تايم ايرور

اتمنى الرد بسرعة لان عندي اختبار وهالمشكلة حايستني مقررنا ماوضح كيف نفرق بينهم

شكرا لكم

تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 11 يناير 2008 في 19:49

يارب التأهل ياكريم

#2

السلام عليكم ,,

الـ syntax error هي الأخطاء الناتجة عن كتابة الكود بطريقة خاطئة,

بمعنى أبسط, الـ compiler لن يفهم الكود المكتوب, و لذلك سيعطيك خطأ, لأن اللغة لها قواعد و لن يستطيع الـ compiler حسب القواعد التي يتبعها فهم ما تريد لذلك يعطيك خطأ,

مثال على ذلك تصور أنك بدل أن تكتب for كتبت ffor أو بدل while كتبت wile و هكذا,

هذا النوع من الأخطاء يسمى "أخطاء وقت الترجمة"

بالنسبة للأخطاء المنطقية logical errors فالكود الذي كتبته سيكون صحيحاً 100%, و لكن هناك مشكلة فيه لا يمكن للكمبيوتر حلها, مثال على ذلك :

تصور أنك قمت بالقسمة على الصفر! عند عمل compiling للكود فالـ compiler لن يعطيك أي خطأ و كود سليم 100%, و لكن عند تشغيل البرنامج سيظهر الخطأ, و هذا النوع من الأخطاء أصعب من النوع الأول من حيث اكتشافه, إضافة إلى ذلك هذا النوع من الأخطاء يسمى "أخطاء وقت التشغيل"..

تحياتي ,,

#3

بسم الله الرحمن الرحيم

شكرا لك اخوي لكن تراي ابتثيقل شوي واقول وضح لي اكثر استاذنا قال ان اخطاء الرن اوف تايم هي ان تقسم على صفر مانعنى هالكلام

ثانيا راح اقول اللي فهمته من توضيحك السينتاكس ايرور هي الاخطاء الاملائية بمعنى اننا مانضيف السيمي كولون في اخر الجمل واننا نبدا باحرف كبيرة

اما اللوجيك ايرور هي الاخطاء اللي ماراح يقبلها تشغيل البرنامج

اذا تقدر توضح لي اكثر اللوجيك ايرور

لان الاستاذ راح يعطينا برنامج وفيه اخطاء ويقول حدد الخطاء ونوعه لو تقدر اخوي انك تعطيني مثال بسيط على هالشي وهل اقدر احصر اللوجيك ايرور بقائمة معينة

اكرررر شكري لك

يارب التأهل ياكريم

#4

أولا لا يوجد آية تقول "ان الانسان خلق عجولا"

الآية تقول "وكان الإنسان عجولا" سورة الإسراء - آية 11

أو "خلق الإنسان من عجل" سورة الأنبياء - آية 37

أو "إن الإنسان خلق هلوعا" سورة المعارج - آية 19

أرجو من المشرف أن يقوم بتعديل الآية

ثانيا رجاء لا تكتب بخط كبير لأني أشعر أني أقرأ كلام انجليزي وليس كلام عربي بسبب تشابك الكلام وعادة ما يكون الكلام غير واضح

ثالثا بالنسبة للأخطاء الـ Logical فهي كثيرة مثل حساب الجذر التربيعي لعدد سالب أو حساب لوغاريتم لعدد سالب أو للصفر وغير ذلك من العمليات الغير معرفة في مجموعة الأعداد الحقيقية

من أقوال الأئمة

الإمام علي بن أبي طالب -رضي الله عنه-: "الناس ثلاثة : فعالم رباني ، ومتعلم على سبيل النجاة ، وهمج رِعاع غوغاء أتباع كل ناعق ، يميلون مع كل ريح ، لم يستضيئوا بنور العلم ، ولم يلجئوا إلى ركن وثيق".

الإمام مالك -رحمه الله- : " لن يصلح آخر هذه الأمة إلا بما أصلح به أولها ".

الإمام الأوزاعي -رحمه الله- : " عليك بآثار من سلف وإن رفضك الناس وإياك وآراء الرجال وإن زخرفوه لك بالقول ".

الإمام الفضيل بن عياض -رحمه الله- : " عليك بطرق الهدى و لا يضرك قلة السالكين و إياك و طرق الضلالة ولا يغرك كثرة الهالكين ".

علامة الزمان الإمام الألباني -رحمه الله- : " إن الخلاص إلى أيدي هؤلاء الشباب يتمثل في أمرين لا ثالث لهما ؛ التصفية والتربية ".

وكل خير في اتباع من سلف وكل شر في ابتداع من خلف

#5

السلام عليكم ,,

شكراً لأخي باسم على الانتباه لهذه الخطأ في الآية, قمت بتعديله الآن.

بالنسبة للأخطاء المنطقية, فأنا لا أدري حقيقة إذا كان يمكن حصرها, و لكن لا أعتقد أن أفضل المبرمجين في العالم يمكنه معرفتها كلها :lol:

بالنسبة لكيفية معرفتها, فإذا عرفت أن الكود ليس به أخطاء syntax بعد ذلك تتبع الكود خطوة خطوة و قم بالتعويض مكان المتغيرات لتعرف إذا كان هناك خطأ منطقي أم لا ,,

تحياتي ,,

#6

السلام عليكم

الاخوة خلطو بين الlogical error والrun time error.

الlogical error هوخطاء يعطيك نتيجة خاطئة ولا يوقف عمل المبرنامج..

باختصار هناك ثلاث انواع من الاخطاء..

خطاء كتابي وهذا يتم اكتشافة عند الترجمة وهو من اسهل انواع الاخطاء..

خطاء فى برمجي وهذا يجعل البرنامج يتوقف عن العمل فجئة او لا يستطيع ان يقلع, وهذا النوع اصعب من الخطاء الكتابي..

خطاء منطقي وهذا هو اخطر انواع الاخطاء حيث انه إذا لم يتم ملاحظة الخطاء من قبل المستخدم فلن تعرف ان هناك خطاء اساساً

على سبيل المثال الة حاسبة تعطيك نتيجة 120 + 190 = 300 إذا لم تلاحظ ان النتيجة خطاء فلن يخبرك البرنامج ولن يتم اكتشاف الخطاء..

والسلام عليكم

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#7

السلام عليكم ,,

شكراً للأستاذ أحمد على التصحيح ,,

الحقيقة أن دماغي هذه الأيام لم يعد يستوعب كثيراً :huh:

تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 11 يناير 2008 في 20:38

#8
باسم الموجي كتب:
أولا لا يوجد آية تقول "ان الانسان خلق عجولا"

الآية تقول "وكان الإنسان عجولا" سورة الإسراء - آية 11

أو "خلق الإنسان من عجل" سورة الأنبياء - آية 37

أو "إن الإنسان خلق هلوعا" سورة المعارج - آية 19

أرجو من المشرف أن يقوم بتعديل الآية

ثانيا رجاء لا تكتب بخط كبير لأني أشعر أني أقرأ كلام انجليزي وليس كلام عربي بسبب تشابك الكلام وعادة ما يكون الكلام غير واضح

ثالثا بالنسبة للأخطاء الـ Logical فهي كثيرة مثل حساب الجذر التربيعي لعدد سالب أو حساب لوغاريتم لعدد سالب أو للصفر وغير ذلك من العمليات الغير معرفة في مجموعة الأعداد الحقيقية

اشكرك اخوي سنان على تصحيح الاية تدري طول عمري اقولها لكن مافيه احدد صححها لي وانا ماحفظت الاية لكن شكرا لك جزيل الشكر للفت الانتباه

ومن اليوم ورايح ماراح اكتب بخط كبير لكن انا اكتب بهالخط علشان اشوف زين بصراحة نظاراتي تكسرت وانا معاقب نفسي اني مالبس نظارات لمدة شهرين وشكلي راح اكلها صدق

وشكرا لك للتوضيح وانا يوم شفت ردك على سؤالي عرفت انك مو زعلان على الكلام اللي كتبته عن المنتدى

واخوي خالد ماتشوف شر ان شاء الله

وشكرا ايضا لاخوي احمد غريب لانه فهم سؤالي بالضبط

الله يجزاااااااااااكم خير

يارب التأهل ياكريم

#9

انا اسف اخوي باسم العواجى انا شفت الاسم في البداية سنان بعدين يوم شيكت من جديد لقيت انت اللي كاتب الموضوع باقي الكلام موجه للاخ سنان

يارب التأهل ياكريم

#10

اخي العزيز الذ11بح ..

انت حفظت اسمي حتى انك بدأت تخلط بيني وبين اخي باسم ..

لازلت مبتدأ باللغه واسالتك بسيطه .. تخلط بيننا .. فماذا سيحصل عندما ستدخل في امور معقده باللغه .. هل ستنسى المنتدى .. ؟؟

ان شاءالله لا يوجد فرق بيننا فكلنا اخوه ..

اخي الاجابة على استفسارك ولو انني وجدت ان جواب الاخ احمد غريب كافي .. ولكن لكي لا تقول اني كلام لو فعل ..

اخي تقسم الاخطاء عامة الى نوعين رئيسين ..

اولا .. خطأ زمن التصميم ..

هذا النوع من الاخطاء يتم اثناء كتابة وتصميم البرنامج .. اي انه يظهر عندما تضغط على كوبايل للكود ..

وهو ما يسمى بالخطأ الاملائي .. اي في املاء قواعد اللغة .. مثلا انك نسيت ان تضع الفارزة المنقوطة في نهاية جملة محدده .. او انك نسيت وضع قوس النهاية الذي ينهي الدالة main او اي دالة اخرى .. او استخدمت متغير من دون تعريفه مسبقا او اي خطأ بسيط اخر ..

ثانيا .. خطأ زمن التنفيذ .. او run time erore .. وهو الخطأ الذي يظهر بعد ان تقوم بتنفيذ البرنامج وعمله ..

اي ان البرنامج في البداية يعمل بصورة طبيعيه ولكن عندما تقوم بتنفيذ وظيفة محدده فيه تجده يتوقف لسبب ما .. والسبب هذا قد يكون منطقيا .

فماذا نعني هنا بمنطقيا .. ؟؟؟

السبب المنطقي هو ان تكون انت قد اخطأت في عملية رياضيه املائها البرمجي للغة يكون صحيحا .. ولكن رياضيا وعلميا هي خاطئه ..

كمثال على ذلك دالة الدستور لحل المعادلات ..

X = -(B) + sqrt((b*b)-4*a*b));

فلو كانت قيمة

(b*b)-4*a*b)

اقل من صفر .. فهذا سيؤدي الى خطأ رياضي لا تستطيع اللغة معالجته لانه سيطلب من البرنامج ايجاد الجذر التربيعي لعدد سالب .. وهذا مستحيل رياضيا ..

حالة ان ياتي ما تحت الجذر سالبا تاتي فقط اثناء تنفيذ البرنامج فمثلا ..

لو ادخلت القيم a = 1 b= 4 c = 8 فان هذه القيم تؤدي الى خطا منطقي لانها تطلب ايجاد الجذر التربيعي لعدد سالب ..

اما لو ادخلت القيم .. a= 1 b = 4 c= 4 فانه سيؤدي الى ان يكون ماتحت الجذر صفر وجذر الصفر هو صفر .. وبذلك لن يحصل الخطأ المنطقي ..

من هنا نتوصل الى حقيفة ان الخطأ المنطقي ياتي من قبل المستخدم الذي يستعمل برنامجك ..

والحل للاخطاء المنطقية هي المرونه .. مرونة البرنامج ..

فما هي المرونه .؟؟؟

المرونه هي ان تجعل برنامج يختبر كل خطوة ممكن ان تؤدي الى خطأ منطقي ..اي ان تفكر اثناء تصميم البرنامج وكتابة الكود في الاماكن التي من الممكن ان يحدث فيها خطأ منطقي..

ففي مثالنا السابق المرونه تكون في ان تجعل هناك شرط وهو اذا كانت قيمة المميز اكبر او تساوي الصفر .. جد الجذر والعلاقة بكاملها اما اذا كانت اقل من صفر فاطبع رسالة لا يمكن ايجاد الجذر للعدد السالب ..

وبذلك نكون قد تخلصنا من خطأ منطقي كان من الممكن ان نقع به ...

خطأ منطقي اخر ممكن ان يقع به الاشخاص .

في برنامج الحاسبه وفي دالة القسمه بالذات .. لو كان العدد الثاني صفر .. فماذا ستكون النتيجة .. بالتاكيد ستكون خطأ لانه لا يمكن القسمه على صفر .. لذلك يجب ان تجعل برنامجك مرنا بحيث ان لايقبل ان يكون العدد الثاني صفر ... لكي لا يحصل الخطأ المنطقي ..

ارجو ان تكون اجابتي كافيه ..ووفيت بما قلته لك سابقا ..

تحياتي العطرة ...

يَارَبُ إِن ضَاقَت قُلُوُب الْنَّاسٍ عَنْ مّافِي .. مِنْ خَيْرٍٍ فَعَفْوكَ لَا يَضِيْقْ ..

#11

لن أقول أكثر ما قالوه الأخوان الله يعطيهم العافية وفو وكفو

احب أن أنبه على الأخطاء المنطقية لأنها من أبشع وأصعب الأخطاء إستكشافا

اخطاء منطقية / وهي أخطاء بشرية من صنعنا كالمعادلات والجمل التكرارية الا منتهي والقيم والخاطئة ... مثال ذلك :

لو طلبت منك عمل برنامج تدخل فيه عمر الأشخاص المراهقين إذا كان مراهق يخرج له رسالة توضح ذلك وإذا كان العكس يظهر ما يوضح ذلك

وكتب الكود التالي :

int main ()
{
	 int Age = 0;

	 cin >> Age;

	if (Age > 13 && Age < 20 ) 

		cout << "You're Teenager \n";

		else 
			cout << "You're not Teenager \n ";

	return 0;
}

هل يمكنك معرفة المشكلة مع بنية القرار هذه ؟؟؟

الكود لا يوجد به أي خطأ من الأخطاء النحوي أو أخطا وقت التشغيل ولكن يوجد به خطا منطقي وهو :

المراهق هو شخص عمره بين 13 و 19 سنة ولكن البنية المنطقية هنا تفشل في التعرف على الشخص البالغ عمره 13

أرأيت كم يصعب إكتشاف الأخطاء المنطقية <_<

تحيااااااااتي

للصداقة البرمجية

pro-vb6@hotmail.com

#12

لماذا كل هذه ...

أولا كما ذكر اخي أحمد غريب ... عليكم التمييز بين ال Run time error و ال Syntactical Error ...

ثانيا ... لا يوجد أي كومبايلر يتعامل مع الأخطاء المنطقيه بالمعنى الحرفي ... باختصار شديد اي Compiler يقسم ال Code الى Tokens ... و يتم فحص ال Token من قبل ال Compiler تبعا لل Compiler Rules و طبعا هذه ال Rules تختلف من لغه لأخرى و هي ما يسمى بال Syntax Validation Rules...

أما التعامل مع ال Logical Errors فيتم من خلال ال Lexical Analyzer و لهذه اللحظه ليس فاعل إلا و كما قلت على Common Logical Errors ...

الان ال Compiler بالعاده يتعامل مع الأخطاء البرمجيه دون علم إلا بالشهير منها ك Division By Zero مثلا ... حتى احيانا عند محاولة ارفاق قيمه لمتغير من Type يختلف عن القيمه المدخله فمفاهيم ال Compiler الحديثه تدرجه تحت بند Syntactical Error رغم اننا لو نظرنا لوجدنا أن الخطأ Logical.

لأن الأخطاء المنطقيه لا تحصى فهي تعتمد على عقلية المبرمج ... و طرق البرمجه كثيره ... و لا دخل لل Compiler بها (كل شيخ و طريقتو) ... طالما انك تلافيت ال Syntactical Errors و ال Common Logical Errors فال Compiler كفيل بعمل Compiling دون أدنى مشاكل و إعطائك النتيجه سواء اكانت النتيجه هي ما تريده أو لا ... فأن لم تكن فالخلل يكون في منطقيتك البرمجيه.

It's hard to stay in such ridiculous situation

#13
سنان محمد صالح كتب:
اخي العزيز الذ11بح ..

انت حفظت اسمي حتى انك بدأت تخلط بيني وبين اخي باسم ..

لازلت مبتدأ باللغه واسالتك بسيطه .. تخلط بيننا .. فماذا سيحصل عندما ستدخل في امور معقده باللغه .. هل ستنسى المنتدى .. ؟؟

ان شاءالله لا يوجد فرق بيننا فكلنا اخوه ..

اخي الاجابة على استفسارك ولو انني وجدت ان جواب الاخ احمد غريب كافي .. ولكن لكي لا تقول اني كلام لو فعل ..

اخي تقسم الاخطاء عامة الى نوعين رئيسين ..

اولا .. خطأ زمن التصميم ..

هذا النوع من الاخطاء يتم اثناء كتابة وتصميم البرنامج .. اي انه يظهر عندما تضغط على كوبايل للكود ..

وهو ما يسمى بالخطأ الاملائي .. اي في املاء قواعد اللغة .. مثلا انك نسيت ان تضع الفارزة المنقوطة في نهاية جملة محدده .. او انك نسيت وضع قوس النهاية الذي ينهي الدالة main او اي دالة اخرى .. او استخدمت متغير من دون تعريفه مسبقا او اي خطأ بسيط اخر ..

ثانيا .. خطأ زمن التنفيذ .. او run time erore .. وهو الخطأ الذي يظهر بعد ان تقوم بتنفيذ البرنامج وعمله ..

اي ان البرنامج في البداية يعمل بصورة طبيعيه ولكن عندما تقوم بتنفيذ وظيفة محدده فيه تجده يتوقف لسبب ما .. والسبب هذا قد يكون منطقيا .

فماذا نعني هنا بمنطقيا .. ؟؟؟

السبب المنطقي هو ان تكون انت قد اخطأت في عملية رياضيه املائها البرمجي للغة يكون صحيحا .. ولكن رياضيا وعلميا هي خاطئه ..

كمثال على ذلك دالة الدستور لحل المعادلات ..

X = -(B) + sqrt((b*b)-4*a*b));

فلو كانت قيمة

(b*b)-4*a*b)

اقل من صفر .. فهذا سيؤدي الى خطأ رياضي لا تستطيع اللغة معالجته لانه سيطلب من البرنامج ايجاد الجذر التربيعي لعدد سالب .. وهذا مستحيل رياضيا ..

حالة ان ياتي ما تحت الجذر سالبا تاتي فقط اثناء تنفيذ البرنامج فمثلا ..

لو ادخلت القيم a = 1 b= 4 c = 8 فان هذه القيم تؤدي الى خطا منطقي لانها تطلب ايجاد الجذر التربيعي لعدد سالب ..

اما لو ادخلت القيم .. a= 1 b = 4 c= 4 فانه سيؤدي الى ان يكون ماتحت الجذر صفر وجذر الصفر هو صفر .. وبذلك لن يحصل الخطأ المنطقي ..

من هنا نتوصل الى حقيفة ان الخطأ المنطقي ياتي من قبل المستخدم الذي يستعمل برنامجك ..

والحل للاخطاء المنطقية هي المرونه .. مرونة البرنامج ..

فما هي المرونه .؟؟؟

المرونه هي ان تجعل برنامج يختبر كل خطوة ممكن ان تؤدي الى خطأ منطقي ..اي ان تفكر اثناء تصميم البرنامج وكتابة الكود في الاماكن التي من الممكن ان يحدث فيها خطأ منطقي..

ففي مثالنا السابق المرونه تكون في ان تجعل هناك شرط وهو اذا كانت قيمة المميز اكبر او تساوي الصفر .. جد الجذر والعلاقة بكاملها اما اذا كانت اقل من صفر فاطبع رسالة لا يمكن ايجاد الجذر للعدد السالب ..

وبذلك نكون قد تخلصنا من خطأ منطقي كان من الممكن ان نقع به ...

خطأ منطقي اخر ممكن ان يقع به الاشخاص .

في برنامج الحاسبه وفي دالة القسمه بالذات .. لو كان العدد الثاني صفر .. فماذا ستكون النتيجة .. بالتاكيد ستكون خطأ لانه لا يمكن القسمه على صفر .. لذلك يجب ان تجعل برنامجك مرنا بحيث ان لايقبل ان يكون العدد الثاني صفر ... لكي لا يحصل الخطأ المنطقي ..

ارجو ان تكون اجابتي كافيه ..ووفيت بما قلته لك سابقا ..

تحياتي العطرة ...

هذي مشاركتك كاملة اخوي سنان لكن انا فيني مشاكل في النظر علشان كذا خلطت في الاسماء وانا والله العظيم اتشرف انك ترد انت او اي احد الاعضاء او المشرفين على اسئلتي

وانا فعلا مبتدئ لكن تدري ايش هدفي هو اني اكون المشرف على قسم لغة السي بلس بلس عندكم بعد اذن المشرف طبعا لكن من جد المنتدى ترك عندي مبدا في الحياة هو

الفشل اول طرق النجاح وانا اليوم اتعلم منكم بكرة ان شاء الله القى من يتعلم عندي لكن بكون فيه فرق انا بعد ماأعطي اي معلومة عرفتها منكم راح اقول وبكل فخر اني كنت في احد الايام كنت طال عندكم في المنتدى العبقري

يارب التأهل ياكريم

#14

للمهتمين بفهم المترجمات ...

قام الأخ Ala2 VB مشكورا بالبديء بدروس حول المترجمات.

و تستطيعون متابة الموضوع من هنا:

/index.php?showtopic=148791

It's hard to stay in such ridiculous situation

هذا الموضوع مغلق.

مواضيع مشابهة