اهلا وسهلا بك فى بوابة الثانوية العامة ... سجل الان

العودة   بوابة الثانوية العامة المصرية > القسم الإداري > أرشيف المنتدى

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

مشاهدة نتائج الإستطلاع: هل تريد البرنامج المقرر Visual Basic 2008 express
نعم أريدة وأحتاجة 74 86.05%
لا شكراً غير مهم 12 13.95%
المصوتون: 86. أنت لم تصوت في هذا الإستطلاع

 
 
أدوات الموضوع ابحث في الموضوع انواع عرض الموضوع
  #826  
قديم 24-05-2013, 07:23 AM
الصورة الرمزية hassanalhawy
hassanalhawy hassanalhawy غير متواجد حالياً
مــٌــعلــم
 
تاريخ التسجيل: Sep 2010
المشاركات: 1,514
معدل تقييم المستوى: 16
hassanalhawy is on a distinguished road
افتراضي

أنظر لهذا التعديل وستعجب له
Function Sum(ByVal First As String, ByVal second As String) As Byte
Dim total As String
total = First + second
Return total

End Function



Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MsgBox(Sum("255", "1"))
End Sub
ستجد أن الخطأ ظهر فى سطر Return total
__________________
يخطئ من يظن أن للذئاب ديناً
  #827  
قديم 24-05-2013, 09:18 AM
tmrmsr tmrmsr غير متواجد حالياً
عضو ممتاز
 
تاريخ التسجيل: Aug 2012
المشاركات: 303
معدل تقييم المستوى: 13
tmrmsr is on a distinguished road
Smile الدالة والقيمة الراجعة (Return Value)

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

Public Class Form1
Function Sum(ByVal First As Byte, ByVal second As Byte) As Byte
Dim total As Short
total = First + second
Return total
End Function

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MsgBox(Sum(255, 1))
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim total As Short
total = 255 + 1
MsgBox(total))
End Sub

End Class
عند الضغط على button2 ماذا يحدث

عند الضغط على button1 ماذا يحدث
طبعا مع التفسير


  #828  
قديم 24-05-2013, 09:45 AM
الصورة الرمزية hassanalhawy
hassanalhawy hassanalhawy غير متواجد حالياً
مــٌــعلــم
 
تاريخ التسجيل: Sep 2010
المشاركات: 1,514
معدل تقييم المستوى: 16
hassanalhawy is on a distinguished road
افتراضي

ممكن حضرتك الإنتقال للرابط التالى حيث تم إثارة الموضوع وبه العديد من المناقشات
مطلوب الحل فورا
__________________
يخطئ من يظن أن للذئاب ديناً
  #829  
قديم 24-05-2013, 10:00 AM
tmrmsr tmrmsr غير متواجد حالياً
عضو ممتاز
 
تاريخ التسجيل: Aug 2012
المشاركات: 303
معدل تقييم المستوى: 13
tmrmsr is on a distinguished road
Smile

1- يجوز الإعلان عن متغير أو غيره نوع بيانه يختلف عن نوع بيان الدالة ثم نجعله القيمة الراجعة (Value)
2- عندما تستقبله الدالة عند استدعائها يتم تحويله لنفس نوع بيان الدالة
حيث أن الدالة Sum نوع بيانها Byte وتم استخدام المتغير Total المعلن في نطاق الدالة Sum بنوع بيان Short كقيمة راجعة

3- عند استدعاء الدالة Sum في نطاق معالج الحدث الخاص ب Button1
تم تخصيص قيمة للوسيط الأول والوسيط الثاني أكبر من مدى نوع بيان الدالة وهذا لا يجوز فيتسبب في خطأ Runtime
منها نخلص
عند استدعاء الدالة لابد من تخصيص قيم من نفس نوع بيان وسائط الدالة أو يمكن تحويلها لهذا النوع وأن تكون في مدى القيم المسموح بها
الإعلان عن الدالة سليم لكن الاستدعاء لم يلتزم بمواصفات الدالة (مجازا)

آخر تعديل بواسطة tmrmsr ، 24-05-2013 الساعة 10:12 AM سبب آخر: تصويب
  #830  
قديم 24-05-2013, 10:01 AM
الصورة الرمزية hassanalhawy
hassanalhawy hassanalhawy غير متواجد حالياً
مــٌــعلــم
 
تاريخ التسجيل: Sep 2010
المشاركات: 1,514
معدل تقييم المستوى: 16
hassanalhawy is on a distinguished road
افتراضي

الغريب أن نوع بيان المعاملات First و second يؤثر فى مكان حدوث الخطأ
فعندما يكون نوع بيان المعاملات First و second نفس نوع بيان الدالة وهو Byte يحدث الخطأ عند الأمر total = First + second
و عندما يكون نوع بيان المعاملات First و second نفس نوع بيان القيمة الراجعة total وهو مثلاً Short يحدث الخطأ عند الأمر Return total
__________________
يخطئ من يظن أن للذئاب ديناً
  #831  
قديم 24-05-2013, 10:06 AM
الصورة الرمزية hassanalhawy
hassanalhawy hassanalhawy غير متواجد حالياً
مــٌــعلــم
 
تاريخ التسجيل: Sep 2010
المشاركات: 1,514
معدل تقييم المستوى: 16
hassanalhawy is on a distinguished road
افتراضي

255 ليست أكبر من مدى الـ Byte
((MsgBox(Sum(255, 1
__________________
يخطئ من يظن أن للذئاب ديناً
  #832  
قديم 24-05-2013, 10:08 AM
tmrmsr tmrmsr غير متواجد حالياً
عضو ممتاز
 
تاريخ التسجيل: Aug 2012
المشاركات: 303
معدل تقييم المستوى: 13
tmrmsr is on a distinguished road
Smile

في زر Button 2
تم تخصيص قيمة من خلال ناتج تعبير 255+1
التي هي في حدود نطاق مدى نوع المتغير

لذلك عرضت الرسالة
ولم يحدث خطأ

لكن في زر Button1
المتغير استقبل القيمة لأنها تناسبه لكن عند تحويلها لنوع بيان الدالة القيمة أصبحت خارج نطاق نوع بيان الدالة
فحدث خطأ Overflow
وشكرا
  #833  
قديم 24-05-2013, 10:10 AM
tmrmsr tmrmsr غير متواجد حالياً
عضو ممتاز
 
تاريخ التسجيل: Aug 2012
المشاركات: 303
معدل تقييم المستوى: 13
tmrmsr is on a distinguished road
Smile

اقتباس:
المشاركة الأصلية كتبت بواسطة hass****hawy مشاهدة المشاركة
255 ليست أكبر من مدى الـ Byte
((MsgBox(Sum(255, 1
معذرة
ناتج الجمع وعند التحويل لنوع بيان الدالةbyte
  #834  
قديم 24-05-2013, 10:14 AM
الصورة الرمزية hassanalhawy
hassanalhawy hassanalhawy غير متواجد حالياً
مــٌــعلــم
 
تاريخ التسجيل: Sep 2010
المشاركات: 1,514
معدل تقييم المستوى: 16
hassanalhawy is on a distinguished road
افتراضي

الخطأ لم يكن فى الأمر Return total ولكنه حدث فى الأمر total = First + second
وكما ذكرت حضرتك فإن
total نوعها Short سوف تستقبل ناتج الجمع دون مشاكل
فكيف يظهر الخطأ فى
total = First + second
__________________
يخطئ من يظن أن للذئاب ديناً
  #835  
قديم 24-05-2013, 10:18 AM
الصورة الرمزية hassanalhawy
hassanalhawy hassanalhawy غير متواجد حالياً
مــٌــعلــم
 
تاريخ التسجيل: Sep 2010
المشاركات: 1,514
معدل تقييم المستوى: 16
hassanalhawy is on a distinguished road
افتراضي

ممكن حضرتك تنظر لتلك المناقشات
اقتباس:
المشاركة الأصلية كتبت بواسطة hass****hawy مشاهدة المشاركة
أولاً بالنسبة للزر الأول قيمة tatal سوف تكون 256 وهذا الرقم تتقبله tatal لأنها من نوع short
ولكن عند تحويل تلك القيمة الراجعة من نوع بيان short إلى نوع بيان byte اللى هوا نوع بيان الدالة sum يصطدم التحويل بأعلى قيمة لمدى الـ byteوهو 255 فيعطى رسالة خطأ وقت التشغيل
ولكن السؤال هنا
إذا كان شرحى هذا صحيح
فلماذا لم يشر للخطأ للسطر return total ؟ ولكنه أشار للسطر السابق له وهو total = first + second
هذا غير مفهوم
عذراً أستاذ / سيف فأنا أسأل وأرد على نفسى
اقتباس:
المشاركة الأصلية كتبت بواسطة سيف سالم مشاهدة المشاركة
اصبت الحقيقة
لماذا الرن تيم في هذا السطر
ولماذا نفذ في button2
البرنامج لم يصل بعد للقيمة الراجعة حتى يصدم بالنوع
اقتباس:
المشاركة الأصلية كتبت بواسطة سيف سالم مشاهدة المشاركة
انت عارف
لو اردنا ان نفسر
لماذا الكمبيوتر لم يستطع تخصيص 256 في النوع short
هو نفس السبب
فسر
1+2=4
اقتباس:
المشاركة الأصلية كتبت بواسطة جعيصه مشاهدة المشاركة
يبقى نوصل الى ان نوع القيمه الراجعه هى نفس نوع الداله برغم اختلاف نوع الاعلان
اقتباس:
المشاركة الأصلية كتبت بواسطة hass****hawy مشاهدة المشاركة
هذا هو التفسير المنطقى لذلك
وحتى لو كتبنا الكود كما يلى سوف يعطى خطأ فى نفس السطر

function sum(byval first as byte, byval second as byte) as
dim total as short
total = first + second
total = total - 1
return total
end function
بالرغم من أن total أصبحت قيمتها فى المدى المسموخ لـ byte
اقتباس:
المشاركة الأصلية كتبت بواسطة hass****hawy مشاهدة المشاركة
أنظر لهذا التعديل وستعجب له
function sum(byval first as short, byval second as short) as byte
dim total as short
total = first + second
return total

end function



private sub button1_click(byval sender as system.object, byval e as system.eventargs) handles button1.click
msgbox(sum(255, 1))
end sub
ستجد أن الخطأ ظهر فى سطر return total
اقتباس:
المشاركة الأصلية كتبت بواسطة hass****hawy مشاهدة المشاركة
أنظر لهذا التعديل وستعجب له
function sum(byval first as string, byval second as string) as byte
dim total as string
total = first + second
return total

end function



private sub button1_click(byval sender as system.object, byval e as system.eventargs) handles button1.click
msgbox(sum("255", "1"))
end sub
ستجد أن الخطأ ظهر فى سطر return total
اقتباس:
المشاركة الأصلية كتبت بواسطة hass****hawy مشاهدة المشاركة
الغريب أن نوع بيان المعاملات first و second يؤثر فى مكان حدوث الخطأ
فعندما يكون نوع بيان المعاملات first و second نفس نوع بيان الدالة وهو byte يحدث الخطأ عند الأمر total = first + second
و عندما يكون نوع بيان المعاملات first و second نفس نوع بيان القيمة الراجعة total وهو مثلاً short يحدث الخطأ عند الأمر return total
__________________
يخطئ من يظن أن للذئاب ديناً
  #836  
قديم 24-05-2013, 11:56 AM
tmrmsr tmrmsr غير متواجد حالياً
عضو ممتاز
 
تاريخ التسجيل: Aug 2012
المشاركات: 303
معدل تقييم المستوى: 13
tmrmsr is on a distinguished road
Smile

اقتباس:
المشاركة الأصلية كتبت بواسطة hass****hawy مشاهدة المشاركة
الخطأ لم يكن فى الأمر return total ولكنه حدث فى الأمر total = first + second
وكما ذكرت حضرتك فإن total نوعها short سوف تستقبل ناتج الجمع دون مشاكل
فكيف يظهر الخطأ فى total = first + second
الأمر يحتاج لبحث واطلاع امهلني بعض من الوقت
  #837  
قديم 24-05-2013, 01:12 PM
الصورة الرمزية MR : ABO BATTA
MR : ABO BATTA MR : ABO BATTA غير متواجد حالياً
معلم الحاسب الآلى
 
تاريخ التسجيل: Jan 2009
المشاركات: 14,295
معدل تقييم المستوى: 31
MR : ABO BATTA will become famous soon enough
افتراضي

اقتباس:
المشاركة الأصلية كتبت بواسطة hass****hawy مشاهدة المشاركة
الغريب أن نوع بيان المعاملات first و second يؤثر فى مكان حدوث الخطأ
فعندما يكون نوع بيان المعاملات first و second نفس نوع بيان الدالة وهو byte يحدث الخطأ عند الأمر total = first + second
و عندما يكون نوع بيان المعاملات first و second نفس نوع بيان القيمة الراجعة total وهو مثلاً short يحدث الخطأ عند الأمر return total
هو ده الكلام المظبوط والاستنتاج الصحيح يا مستر حسن
__________________
يارب ارفع عنَّا وعن مصر الفتن ما ظهر منها وما بطن
واحفظ بلاد المسلمين من كل شر وسوء يا أرحم الراحمين
  #838  
قديم 24-05-2013, 01:59 PM
tmrmsr tmrmsr غير متواجد حالياً
عضو ممتاز
 
تاريخ التسجيل: Aug 2012
المشاركات: 303
معدل تقييم المستوى: 13
tmrmsr is on a distinguished road
Smile

اقتباس:
المشاركة الأصلية كتبت بواسطة hass****hawy مشاهدة المشاركة
الخطأ لم يكن فى الأمر Return total ولكنه حدث فى الأمر total = First + second
وكما ذكرت حضرتك فإن total نوعها Short سوف تستقبل ناتج الجمع دون مشاكل
فكيف يظهر الخطأ فى total = First + second
الخطأ حدث عن تنفيذ السطر total = First + second
بسبب عندما يتم جمع قيمة المتغير First الذي نوعه Byte والمتغير Second الذي نوع Byte
ناتج الجمع يتم تمثيله أيضا في شكل Byte
وبما أن ناتج الجمع أكبر من الحد المسموع يحدث خطأ Runtime

لو القيمة في الحد المسموح يتم تحويل الناتج الذي نوعه Byte إلى Short
ليخزن في المتغير Total

ثم يتم تحويل المتغير Total إلى Byte ويرجع للدالة

وحلا لهذا الوضع
قم بعمل تحويل صريح
total =CShort( First) +CShort ( second)

ستجد الخطأ يظهر في سطر Return Total
  #839  
قديم 24-05-2013, 03:27 PM
الصورة الرمزية hassanalhawy
hassanalhawy hassanalhawy غير متواجد حالياً
مــٌــعلــم
 
تاريخ التسجيل: Sep 2010
المشاركات: 1,514
معدل تقييم المستوى: 16
hassanalhawy is on a distinguished road
افتراضي

لقد قمت بتطبيق ما قلته فى كود برمجة عادى وكانت النتيجة مشابهة
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim total As Short
Dim first, Second As Byte
first = 255
Second = 1
total = first + Second
MsgBox(total)
End Sub

ولكن ما علاقة ناتج الجمع 256 بالـ Byte
هل هذا له علاقة بكيفية معالجة البيانات داخل المعالج .؟
وإذا كان الأمر كذلك فهل هذه المعالجة لها إمتداد فى الذاكرة ؟
وهل عملية الإستدعاء من الذاكرة قبل المعالجة لها تأثير فى عملية التخزين؟
نريد توضيح لأن الأمر مبهم
__________________
يخطئ من يظن أن للذئاب ديناً
  #840  
قديم 24-05-2013, 04:04 PM
الصورة الرمزية hassanalhawy
hassanalhawy hassanalhawy غير متواجد حالياً
مــٌــعلــم
 
تاريخ التسجيل: Sep 2010
المشاركات: 1,514
معدل تقييم المستوى: 16
hassanalhawy is on a distinguished road
افتراضي

وممكن توضح بنفس الكيفية ما الذى يحث عند تنفيذ الكود التالى

function sum(byval first as byte, byval second as short) as byte
dim total as short
total = first + second
return total

end function



private sub button1_click(byval sender as system.object, byval e as system.eventargs) handles button1.click
msgbox(sum(255, 1))
end sub
__________________
يخطئ من يظن أن للذئاب ديناً
 

العلامات المرجعية

الكلمات الدلالية (Tags)
أبوزياد, اتفة الفصل الرابع وورد, شرح الترم الثاني فيديو


ضوابط المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا يمكنك اضافة مرفقات
لا يمكنك تعديل مشاركاتك

BB code متاحة
كود [IMG] متاحة
كود HTML معطلة

الانتقال السريع


جميع الأوقات بتوقيت GMT +2. الساعة الآن 04:38 PM.