delphi4arab منتديات دلفي للعرب

نسخة كاملة : كيف انشئ نوع مثل Byte ?
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم ورحمة الله بوركاتة

أنشئ نوع بهذه الطريقة :
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
اعتذر على قصور توصيل السؤال .. فانا مستعجل @@"
شكراً لحسن القراءة .
السلام عليكم لماذا لم تستخدم array ؟؟ ما الذي تريد الوصول اليه اخي لم افهم المقصود
وعليكم السلام ورحمة الله
إقتباس :لماذا لم تستخدم 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

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

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

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

بالنسبة لفكرتي دعني ابسطها لك اكثر ..
لدي حلقة مكونة من 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

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

وشكراً لحسن القراءة
السلام عليكم
هذا بالنسبة للمشاركة الأولى
كود :
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;
السلام عليكم اخي الذي تريد فعله يسمى بالـ Recursion مثل الموجود هنا ان شاء الله احاول معها لاني لا اتعامل مع Recurcive function كثير ا
بالنسبة للمساركة رقم 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
شكراً لكم اخي [S.FATEH ,ghost-dz]

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