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

Overflow Error

بدأه Abboodd في 24 يناير 2009 · 6 رد · 883 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله

إخواني، عندي مشكلة لم تحلها ساعات من البحث، وهو خطأ OverFlow غريب لم أفهم سببه حتى الآن، إليكم الكود:

  1. Dim Red As Byte
  2. Red= Average * R / Max
  3.  
  4.  

طبعاً ستقولون أن المشكلة هي أن ناتج هذه العملية يكون أكبر من 255، لكن ما رأيكم إذا قلت إن :

Average=52

R <=255

Max <=255

وهذا أمر تأكدت منه عند عمل Debugging ، والأدهى من ذلك أني جربت تعريف Red على أنه Integer أو Long أو حتى Double ولا فائدة!!!

بصراحة يا شباب أنا شعر رأسي قد شاب من هذه المشكلة ، لعلي أجد حلها عند أحد منكم.

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

السلام عليكم ورحمة الله

تم تعديل هذه المشاركة بواسطة Abboodd في 24 يناير 2009 في 08:27

هذه الجملة خاطئة  :wacko: 


#2

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

أي مثلا لو الـ Average يحمل قيمته 52 والـ R يحمل قيمته 5 أو يزيد والـ Max يحمل قيمته 1 فالناتج سيزيد عن 255

انت تفكر في ان قيمة الـ Max و الـ R هي التي لابد وان تقل عن 255 .. بينما الصحيح هو ان الناتج الكلي

حل مشكلتك واضح جدا من مجرد القراءة .. يتطلب منك التركيز في التفكير فقط

اعتذر عن عدم تمكني للمتابعه الدورية في وقتنا الحالي

فليقبل الجميع تقديري واحترامي .. ولكم تحياتي

#3

نعم يا أخ تحدي ، ولكني تأكدت من الأرقام، بعمل نقاط توقف Break points ، وتأكدت مما تقوله.

كما أن:

اقتباس
والأدهى من ذلك أني جربت تعريف Red على أنه Integer أو Long أو حتى Double ولا فائدة!!!

شكراً لك

هذه الجملة خاطئة  :wacko: 


#4

يعني إنت عاوز تقنعني إن الكود ده ممكن تظهرلك فيه مشكلة ؟؟



Dim Red As Integer

For R = 1 To 255
For Max = 1 To 255
Red = Average * R / Max
Next Max
Next R
	Const Average = 52

أو ده ؟؟



Dim Red As Long

For R = 1 To 255
For Max = 1 To 255
Red = Average * R / Max
Next Max
Next R
	Const Average = 52

أو ده ؟؟



Dim Red As Double

For R = 1 To 255
For Max = 1 To 255
Red = Average * R / Max
Next Max
Next R
	Const Average = 52

على كده بقى البروسيسور بتاعك 1 بيت مش 32 ولا 64 :haha:

مش معقول ابدا .. جربهم طيب في مشروع جديد وشوف في خطأ ولا لأ

وبالنسبة للـ Byte قولي الأرقام اللى بتقف معاك .. اقصد عند ظهور الـ OverFlow .. بتكون المتغيرات كام ؟

اعتذر عن عدم تمكني للمتابعه الدورية في وقتنا الحالي

فليقبل الجميع تقديري واحترامي .. ولكم تحياتي

#5

وأنا رأسي سينفجر لهذا السبب، الطريقة نفسها موجودة في مشروع آخر، وما شاء الله عليها :cry: :tantrum: :hot: :angry:

على كل حال سأرفع لك المشروع، ألق نظرة عليه.

Try_on.rar

هذه الجملة خاطئة  :wacko: 


#6

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

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

على سبيل المثال :


X = CByte(128) + CByte(128) + CLng(50000)
	Dim X As Long

لأن ناتج المتغيرين متشابهي النوع يزيد عن الحد الأقصى للنوع ذاته .. وحتى إن زاد عدد المتغيرات

السؤال الآن .. متى تتم العملية بنجااااح ؟؟ .. والإجابة هي تتم عند تحويل النوعين أو إحداهما على الأقل

حتى لا نجمع الـ Byte على الـ Byte وهذا لانه كما اتفقنا اذا تجاوز الناتج الحد الأقصى ستظهر المشكلة

X = CLng(CByte(128)) + CLng(CByte(128)) + CLng(50000)

وكذلك الحال حين يكون المتغيرات من نوع Integer ويزيد الناتج عن (2 ^ 15) - 1

أو المتغيرات من النوع Long ويزيد الناتج عن (2 ^ 31) - 1 .. وفي هذه الحالة يفضل التحويل إلى Double

وعلى سبيل المثال أيضا لظهور المشكلة


X = CLng(1073741824) + CLng(1073741824)
	Dim X As Double

ولحل المشكلة نغيرها إلى الآتي


X = CDbl(CLng(1073741824)) + CDbl(CLng(1073741824))
	Dim X As Double

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

اما ترضى بالحل اما نرسل لك اجود أنواع الصبغة لعلاج آثار الشيبة التي ظهرت في المشاركة الأولى :haha:

ونتمنالك التوفيق والرجوع إلى شبابك في المرة القادمة :haha:

اعتذر عن عدم تمكني للمتابعه الدورية في وقتنا الحالي

فليقبل الجميع تقديري واحترامي .. ولكم تحياتي

#7

الحمد لله ، الحمد لله، الحمد لله

يا وحش يا تحدي :clapping: :)

مع القليل من التعديلات، واستعمال طريقتك، نجح بفضل الله ثم بفضلك.

اقتباس
اما نرسل لك اجود أنواع الصبغة لعلاج آثار الشيبة التي ظهرت في المشاركة الأولى

أنا عمبفكر أعمل New Look B)

هذه الجملة خاطئة  :wacko: 


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