بخصوص حساب rip
#1
ارجو من الاخوة مساعدتي في كيفية عمل هذا البرنامج في دلفي  و هو  لحساب rip للصك البريدي
1- الحساب الجاري بدون مفتاح × 100
2- نقسم ناتج العملية رقم (1) على 97 و نحتفض بالباقي
3- نظيف العدد 85 إلى الباقي الناتج عن العملية رقم (2)
   ثم ننظر إذا كان الناتج أقل من 97 نحتفض به أما إذا كان أكثر
   من 97 فننقص منه العدد 97 و نحتفض بالباقي
4- نأخذ العدد 97 و ننقص منه ناتج العملية رقم (3) و الناتج هو رقم RIP

ملاحظة : إذا كان الناتج النهائي أقل من 10 فنضيف له (0) على اليسار.
مثلا:
1) 4178451 × 100 = 417845100
2) (417845100/97) = 4307681 و الباقي 43
3) 58 + 43 = 101 و بما أنه أكثر من 97 فننقص منه 97 يبقى 4
4) 97 - 4 = 93 و هو رقم (RIP)
و للعلم اني جربت عمل هذا المشروع بدلفي الا اني في اعداد كبيرة حجم فان متغير من نوع integer عند ضربه في 100 يصبح يعطي قيم سالبة
مثلا عند استعمال العدد 22416770 فما فوق فان حاصل جداءه في100 دائما يعطي العدد -2053290296
و عند تغيير النوع الى double فان الدالة mod لا تعمل
الرد
#2
سلام عليكم
استعمل الدالة abs

مثال

كود :
var a,b,c:integer; begin a:=strtoint(edit1.text); b:=strtoint(edit2.text); c:= (a*100) mod (b); edit3.Text:=inttostr(abs(c)); end;
الفاشلون نوعان : الأول : فكر ولم يفعل .. والآخر: فعل ولم يفكر
الرد
#3
شكرا اخي لقد استعملت هذه الفكرة و لكن عندما يكون المتغير a عدد كبير  فان الناتج يكون خاطى
مثلا عند استعمال a العدد 22416770 فما فوق فان حاصل جداءه في100 دائما يعطي العدد -2053290296
الرد
#4
السلام عليكم
- في الشرط الاول انت لست مجبر على اضهار جداء الحساب الجاري في 100
اكيد راح يكون الناتج خاطئ 

ادخل جداء الضرب في  العملية (اثناء التنفيذ - runtime ) / مقسوم على المتغير الثاني b لتحصل على باقي القسمة
للمحافضة على الدالة mod 

كما بالمثال اعلاه بالظبط

لان فكرة البرنامج هي الحصول على rip ، لست مجبر على اظهار تفاصيل العملية
يكفي تكون فاهم فكرة عمل البرنامج - ولله الموفق
الفاشلون نوعان : الأول : فكر ولم يفعل .. والآخر: فعل ولم يفكر
الرد
#5
اخي دلفي يستطيع الحساب عادي و دا حل لك ، فقط ماهو هدا RIP و فيما يستعمل ؟
------------------

كود :
PROGRAM CCP; {$APPTYPE CONSOLE} USES  WINDOWS,SYSUTILS,CLASSES; VAR CCP_NUM,RIP : CARDINAL; CCP_STR,EXIT_STR : STRING; CONST ELF : STRING = #13 + #10; BEGIN WRITELN ('WRITE CCP NUMBER' + ELF); READLN (CCP_STR); IF TRYSTRTOINT(CCP_STR,INTEGER(CCP_NUM)) THEN BEGIN    IF CCP_NUM <= 9999999 THEN    BEGIN       RIP := CCP_NUM * 100;    //1       RIP := RIP MOD 97;       //2       RIP := RIP + 58;          //3       IF RIP >= 97 THEN          RIP := RIP - 97;      //4       RIP := 97 - RIP;         //5       WRITELN ('RIP CODE IS : ' + ELF + INTTOSTR(RIP) + ELF);    END    ELSE       WRITELN ('ERROR : CCP CODE MAX 7 CHIFFRES' + ELF); END ELSE    WRITELN ('ERROR : CCP CODE EST SAUF NUMUREUX ' + ELF); READLN(EXIT_STR ); END.

-----------
الرد


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


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