![]() |
|
بخصوص حساب rip - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15) +--- الموضوع : بخصوص حساب rip (/showthread.php?tid=8150) |
بخصوص حساب rip - heraiz - 24-09-2016 ارجو من الاخوة مساعدتي في كيفية عمل هذا البرنامج في دلفي و هو لحساب 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 لا تعمل RE: بخصوص حساب rip - Mr.DOS - 24-09-2016 سلام عليكم استعمل الدالة 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;RE: بخصوص حساب rip - heraiz - 24-09-2016 شكرا اخي لقد استعملت هذه الفكرة و لكن عندما يكون المتغير a عدد كبير فان الناتج يكون خاطى مثلا عند استعمال a العدد 22416770 فما فوق فان حاصل جداءه في100 دائما يعطي العدد -2053290296 RE: بخصوص حساب rip - Mr.DOS - 25-09-2016 السلام عليكم - في الشرط الاول انت لست مجبر على اضهار جداء الحساب الجاري في 100 اكيد راح يكون الناتج خاطئ ادخل جداء الضرب في العملية (اثناء التنفيذ - runtime ) / مقسوم على المتغير الثاني b لتحصل على باقي القسمة للمحافضة على الدالة mod كما بالمثال اعلاه بالظبط لان فكرة البرنامج هي الحصول على rip ، لست مجبر على اظهار تفاصيل العملية يكفي تكون فاهم فكرة عمل البرنامج - ولله الموفق RE: بخصوص حساب rip - bennabdellah - 26-09-2016 اخي دلفي يستطيع الحساب عادي و دا حل لك ، فقط ماهو هدا 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.----------- |