delphi4arab منتديات دلفي للعرب
كيف انشئ نوع مثل Byte ? - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : كيف انشئ نوع مثل Byte ? (/showthread.php?tid=5335)



كيف انشئ نوع مثل Byte ? - ALmuhhnad - 22-06-2013

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

أنشئ نوع بهذه الطريقة :
PHP كود :
type
  numArr 
= 0..99; 
الطريقة السابقة تعمل جيداً ...
لكن عندما استعمل النوع السابق بهذه الصيغة :
PHP كود :
var
  
nnn : numArr;
begin
  nnn 
:= 75 * 2;
end; 
احصل على خطأ من نوع :
[Error] Unit1.pas(95): Constant expression violates subrange bounds
السبب ان الناتج اكبر من نطاق النوع نفسه ..
السؤال الآن كيف اجعله يكمل العدد يعني مثلا :
لدي : 2* 55 = 110 واالنوع الذي استعمله اعلى قيمة فيه 99 يتم إكمال العد بعد ان يصل إلى اعلى قيمة كأن يصبح 2 * 55 = 11 لان 110 - 99 = 11
اعتذر على قصور توصيل السؤال .. فانا مستعجل @@"
شكراً لحسن القراءة .


كيف انشئ نوع مثل Byte ? - S.FATEH - 22-06-2013

السلام عليكم لماذا لم تستخدم array ؟؟ ما الذي تريد الوصول اليه اخي لم افهم المقصود


كيف انشئ نوع مثل Byte ? - ALmuhhnad - 22-06-2013

وعليكم السلام ورحمة الله
إقتباس :لماذا لم تستخدم array ؟؟
هذا فقط اسم النوع لا دخل له بالمصفوفات ...

**** عندما يكون الناتج العملية اكبر من نطاق النوع مثلا انا وضعت نوع بهذا الشكل :
PHP كود :
type
  numArr 
= 0..99; 

ووضعت عملية جمع مثلاً :
PHP كود :
var
  
nnn : numArr;
begin
  nnn 
:= 90 + 20;
  
Form1.Caption := IntToStr(nnn)
end; 
ان يكون المتغير nnn يحمل القيمة 19 ..
كيف حصل الناتج السابق (19) بعد جمع 90 + 20 اصبح = 110 ولكن النوع الذي وضعته اكبر قيمة له 99 لذلك
عملية الجمع السابقة بعد ان وصل العدد إلى 99 يكون العدد الذي يليه هو 0
يعني :
90 + 9 = 99
90 + 10 = 0
90 + 11 = 1
90 + 20 = 19

اتمنى وصلت القكرة

وشكراً لحسن القراءة


كيف انشئ نوع مثل Byte ? - S.FATEH - 22-06-2013

عفوا اخي حتى الان لم توضح ماذا تريد او ماذا تجرب تحقيقه لماذا تصر على استخدام Rang اذا اردت شيئ يمكن
اعادة استخدامه من برنامجك فالاصح ان تجعل class يحمل ماذا تريد ؟؟


كيف انشئ نوع مثل Byte ? - ALmuhhnad - 22-06-2013

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

هممم ... انا حتى الآن لا اعرف الاصح .. لكن اعرف الصح على الاقل ^^

بالنسبة لفكرتي دعني ابسطها لك اكثر ..
لدي حلقة مكونة من 10 ارقام
0, 1, 2, 3, 4, 5, 6, 7, 8, 9
كود :
http://im41.gulfup.com/rsmuU.png
وهي التي تمثل النوع Int1_9
PHP كود :
type
  Int1_9 
= 0..9; 
وانا بدي استعمل هذا النوع بشكل عادي
لكن هذا النوع من عشر ارقام
لما اجي ادخل له 11 رقم او اكثر يحدث خطأ :
إقتباس : [Error] Unit1.pas(95): Constant expression violates subrange bounds
وانا أريـد بدلاً من حدوث هذا الخطاً ان يكمل الدورة بالعد 11 يعني لما يصل الرقم إلى 9 ينتقل للبداية 0 وبعدها 1
فلو وضعت هذه مثلاً :
PHP كود :
var
  
nnn : Int1_9;
begin
nnn 
:= 11    ; nnn it's must be 1
end; 

.. مثال آخر في واقع الحيات ..
عدد ايام الاسبوع 7
فلو كنا باليوم الاول "السبت" واسئلتك ما هو اليوم بعد مرور 10 ايام ؟
ماذا ستقول وما هي الطريقة التي اتبعتها في طريقة الحساب
(السبت = 1) , (الأحد = 2) , (الأثنين = 3) , (الثلثاء = 4) , (الأربعاء = 5) , (الخميس = 6) , الجمعة = 7)
السبت(1), الأحد(2), الاثنين(3), الثلثاء(4), الاربعاء(5), الخميس(6), الجمعة(7), السبت(8), الأحد(9), الاثنين(10)
الآن نقول انه سيكون يوم الاثنين .....

مثال آخر بنمط رياضيات :
عد لي من 1 إلى 15 بنمط النوع الذي انشأته سابقاً :
PHP كود :
type
  Int1_9 
= 0..9; 
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4

......
اعتقد لا يوجد توضيح اكثر من ذلك ... ^^"
بنسبة لما أريـد استعماله , ليس لشيء معين لكن أريـد ان اعرف كيف يتم إنشاء مثل هذا النوع ...

وشكراً لحسن القراءة


كيف انشئ نوع مثل Byte ? - Agmcz - 22-06-2013

السلام عليكم
هذا بالنسبة للمشاركة الأولى
كود :
type numArr = 0..99; procedure TForm1.Button1Click(Sender: TObject); var n, nn, nnn : numArr; begin n := 22; nn := 2; nnn := n * nn mod 99; ShowMessage(IntToStr(nnn)); end;



كيف انشئ نوع مثل Byte ? - S.FATEH - 22-06-2013

السلام عليكم اخي الذي تريد فعله يسمى بالـ Recursion مثل الموجود هنا ان شاء الله احاول معها لاني لا اتعامل مع Recurcive function كثير ا


كيف انشئ نوع مثل Byte ? - Agmcz - 22-06-2013

بالنسبة للمساركة رقم 3
هذا أحد الحلول
PHP كود :
type
  numArr 
= 0..99;

procedure TForm1.Button1Click(Sender: TObject);
var
  
n, nn, nnn : numArr;
begin
  n 
:= 90;
  
nn := 9;
  
nnn := (n + nn) mod 100;
  
//nnn := (n * nn) mod 100;
  //nnn := (n - nn) mod 100;
  
ShowMessage(IntToStr(nnn));
end; 

والنتائج

90 + 9 = 99
90 + 10 = 0
90 + 11 = 1
90 + 20 = 10


كيف انشئ نوع مثل Byte ? - ALmuhhnad - 23-06-2013

شكراً لكم اخي [S.FATEH ,ghost-dz]

بالنسبة لجواب اخي ghost-dz .. فعلاً هذا هو بالضبط ..
لكن لو اردت دمجه مع النوع .. بدلاً من إستخدام الامر mod كل مرة يكون فيها العدد اكبر او عندما أريـد استعمال هذا النوع
هل هناك طريقة لوضع دالة مع النوع نفسه تعمل عمل الامر mod او ما شابه ؟