تمرين حول الاستثناء Exception
#1
تمرين خفيف جدا سهل بمعنى الكلمة Rolleyes
اول شيء نعمل المشروع مشروع صغير
ضع على Form
Edit - 3
Button -1
نضع هذا الكود في الزر
PHP كود :
procedure TForm1.Button1Click(Sender: TObject);
Var
A,b,c: Integer;
begin
A 
:= StrToInt (Edit1.Text);
b := StrToInt (Edit2.Text);
C := A Div B   ;
Edit3.Text := IntToStr(C);
end; 

عند عمل البرنامج يكون

Edit1 القيمة الاولة

Edit2 القيمة الثاية

Edit3 الناتج

اذا وضعت القيمة الثانية 0 ستكون نتائج التنفيذ هكذا
[صورة: 1KefXu.png]

المطلوب:استثناء هذا الخطاء و اظهار رسالة من المبرمج
هكذا..
[صورة: UvWwHv.png]
في أمان الله
الرد
#2
السلام عليكم و رحمة الله
لكي لا يترك الموضوع بدون ردود هذه مساهمتي البسيطة:
PHP كود :
procedure TForm1.Button1Click(Sender: TObject);
var
  
A, b, c: Integer;
begin
  A 
:= StrToInt(Edit1.Text);
  
b := StrToInt(Edit2.Text);
  
C := 0;
  try
    
C := A div B;
  
except
    on E
: Exception do
    
begin
      
if E.ClassName = 'EDivByZero' then
        ShowMessage
('رسالة الخطأ الخاصة بالقسمة على الصفر');
    
end;
  
end;
  
Edit3.Text := IntToStr(C);
end; 

تعمدت التدقيق في الفحص لتجنب اظهار رسالة الخطأ في حالات غير حالة الفسمة على الصفر...
الرد
#3
أظهار الرسالة .
Application.MessageBox('','' ,MB_ICONEXCLAMATION);
الكود
كود :
procedure TForm1.Button1Click(Sender: TObject); Var A,b,c: Integer; begin A := StrToInt (Edit1.Text); b := StrToInt (Edit2.Text); Edit3.Text := IntToStr(C); C := A Div B ; if b=0 then Application.MessageBox('لا يمكن قبول رقم صفر كعدد ثانى الرجاء تغير الرقم','warring' ,MB_ICONEXCLAMATION); Edit3.Text :='عفواّ : لا يمكن القسمة على صفر' end;
> مبرمج مبتدئ < سبحان الله بحمده... سبحان الله العظيم
الرد
#4
Insid3Code كتب :لكي لا يترك الموضوع بدون ردود هذه مساهمتي البسيطة:
تعمدت التدقيق في الفحص لتجنب اظهار رسالة الخطأ في حالات غير حالة الفسمة على الصفر...
شكرا على المساهمة

طريقه شبه صحيحه هناك حل صحيح و اقل اكواد لماذا if ! :confused: ثم الاستثناء من المفترض انه لا ينتج شيء من الخطاء لماذا Edit3 يدخل رقم 0 بعد ظهور الخطاء

قريبا من الحل Rolleyes

لا تتعمق كثير في الفحص يمكنك صد هذا الخطاء بدون ذالك بطريقه افضل
الرد
#5
karika2 كتب :أظهار الرسالة .
بارك الله فيك . لاكن طريقة خطاء
لم ينجح ظهور الرسالة ايضا يدخل ارقام عشوائية في Edit3 Big GrinBig Grin:confused:
الرد
#6
إقتباس :طريقه شبه صحيحه هناك حل صحيح و اقل اكواد لايش if !
امكانية حدوث استثناء في حالات عديدة لا تمد بصلة للقسمة على الصفر، مثل ادخال من المستعمل رمز او حرف مكان الأرقام، و لتفادي اظهار بغباء رسالة تقول انه ممنوع القسمة على الصفر في حالة ادخال المستعمل حرف مثلا... لكل الاستثناءات..

تعمدت فحص نوع الاستثناء قبل اظهار الرسالة، اذا كان من نوع EDivByZero نظهر الرسالة الخاصة به، و ان كان يخالفها نظهر رسالة اخرى مثلا...

إقتباس :ثم الاستثناء من المفترض انه لا ينتج شيء من الخطاء لماذا Edit3 يدخل رقم 0 بعد ظهور الخطاء
عملت Initialization الى الصفر للمتغر C قبل استعماله، لتنظيم الأمور اكثر و تفادي ان يتم ارجاع قيم عشوائية من الذاكرة في حالة حدوث الاستثناء...
الرد
#7
رابــــــط
كود :
http://www.delphibasics.co.uk/Article.asp?Name=Exceptions
> مبرمج مبتدئ < سبحان الله بحمده... سبحان الله العظيم
الرد
#8
karika2 كتب :"]رابــــــط
نعم هذي الطريقه الصحيحه ^^ لكن ناقص انك تحلها بنفسك سهل جدا :d
الرد
#9
طريقة الحل الصحيحة //
PHP كود :
procedure TForm1.Button1Click(Sender: TObject);
Var
A,b,c: Integer;
begin
A 
:= StrToInt (Edit1.Text);
b := StrToInt (Edit2.Text);
c := 0;
try
C := A Div B;
Except
on E
: EDivByZero do
MessageDlg('لا يمكن قبول رقم صغر كعدد ثاني الرجاء تغيير الرقم', mtWarning,[mbok],0);
end;
Edit3.Text := IntToStr(C);
end; 
الرد


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


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم