المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : مشكلة في جمع منازل الأعداد الكبيرة


ثامر أبو بلقيس
22-03-2014, 07:40 PM
السلام عليكم

لجمع أرقام عدد منطقيا بناء الأكواد يكون
كالتالي :
n=Input.GetText("Input1");
n = String.ToNumber(n);
x = 0
while n > 0 do
x = x + Math.Mod(n, 10)
n = math.floor(n/10)
end
Dialog.Message("Notice",x);


لكن عند الوصول إلى أرقام ضخمة تتجاوز 14 منزلــة تبدأ تظهر معي أخطاء
هل الخلل في بناء الكود أم في الأعداد الكبيرة
و هل من كود بديل
ســـلام :abc_138:

ثامر أبو بلقيس
10-09-2014, 01:23 AM
:abc_102: السلام عليكم ورحمة الله وبركاته :abc_138:

ياسرهتهت
10-09-2014, 10:08 AM
وعليكم السلام ورحمة الله وبركاته
استاذ / ثامر
ماذا تقصد بالخطأ
انا جربت الكود وادخلت ارقام كبيرة
عشرين منزلة واكثر ويعمل الكود
بشكل سليم
:abc_152::abc_152::abc_152:

ثامر أبو بلقيس
10-09-2014, 12:57 PM
السلام عليكم ورحمة الله وبركاته
أستاذ ياسر
جرب ناتج 99999999999999999999 هذا العدد المكون من 20 منزلة

المـهاجر
10-09-2014, 01:17 PM
هل الخلل في بناء الكود
لا


أم في الأعداد الكبيرة

نعم


و هل من كود بديل

نعم

المـهاجر
11-09-2014, 02:37 PM
عذرا فلم الاحظ أن تاريخ الإستفسار 22-03-2014 من حوالى 6 أشهر

تتنوع الحلول صعودا من السهولة الفائقة حتى الصعوبة المطلقة
قريبا اضع لك حل بسيط حتى يسهل عليك تنفيذه
بالتوفيق

ثامر أبو بلقيس
11-09-2014, 09:51 PM
الانبوت الأول أكتب فيه العدد
الانبوت الثاني تستقبل فيه النتائج
n=Input.GetText("Input1");
for i = 1 ,#n do
Input.SetText("Input2", String.ToNumber(Input.GetText("Input2"))+ String.ToNumber(String.Mid(n, i, 1)));
end

موفق :abc_138:

المـهاجر
11-09-2014, 10:18 PM
عذرا
لم اكن اعتقد انك لا تعرف مثل هذا الكود البسيط جدا منذ البداية لذلك لم اشأ طرحه

كنت اعد حلا يرتكز على التعامل المباشر مع الأعداد الكبيرة
لكن انت صاحب السؤال و انت من تقرر انه قد تم حله

ثامر أبو بلقيس
11-09-2014, 10:48 PM
لاداعي للاعتذار أخي الكريم .. مشكور جدا على نية تقديم
المساعدة و الاهتمام :abc_138:

ياسرهتهت
11-09-2014, 11:06 PM
:abc_052::abc_052::abc_052:
شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .

ثامر أبو بلقيس
11-09-2014, 11:26 PM
مرور عطر أستاذي ياسر :abc_138:

المـهاجر
12-09-2014, 02:14 AM
حسنا لا مشاكل
إلق نظرة هنا
http://www.abc4web.net/vb/showthread.php?p=268635#post268635

لترى الفرق بين معاملة الرقم كسترنج
و بين التعامل مع الرقم بالأوتوبلاى كرقم مهما بلغ عدد منازله
فى الرابط سترى حاسبة تجرى حسابات مع الأرقام مهما كان عدد منازلها و تظهر 2000 منزلة لرقم الناتج بعد العمليات الحسابية

ثامر أبو بلقيس
12-09-2014, 02:41 AM
من المؤكد عمل ممتاز و مجهود ممتاز
و للأمانة إني إطلعت على عمل مماثل يتعلق
Big number حيث يتم وضع هذا الملف
بعد فكه :
http://www.gulfup.com/?HcqLO3
في مجلد Scripts التابع للأوتوبلاي

ومثلا نأخذ هذا الكود وهو عبارة عن جداء عدد مكون من 2000 منزلة
في عدد آخر
وسيكون هذا الكود لمعاينة النتائج و حساب عدد منازل الناتج
require "bc";
local bignum = bc.number("10000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000");
bignum = bignum * 200
Dialog.Message("Big number", tostring(bignum));
Dialog.Message("Big number", String.Length(tostring(bignum)));


أشكرك أخي وجاري الاطلاع على الملف المشار إليه :abc_138:

المـهاجر
12-09-2014, 02:56 AM
أيضا أنا إطلعت على هذا المثال
لكنه لا زال مثال نظرى
حيث يستخدم أرقام ثابتة كإدخال و يظهر النتائج فى رسالة

تعديل
جرب تستخدم انبوت للإظهار أو للسحب

ثامر أبو بلقيس
12-09-2014, 03:19 AM
لست متأكد بعد من النتائج بعد السحب من أنبوت
و انزال في الاخر
وفق هذا التعديل
require "bc";
bignum = bc.number(""..Input.GetText("Input1"));
bignum = bignum * 12
Input.SetText("Input2",tostring(bignum));
Dialog.Message("Big number", String.Length(tostring(bignum)));

جعل الانبوت متعدد الاسطر

ثامر أبو بلقيس
12-09-2014, 03:23 AM
أيضا أنا إطلعت على هذا المثال
لكنه لا زال مثال نظرى
حيث يستخدم أرقام ثابتة كإدخال و يظهر النتائج فى رسالة

تعديل
جرب تستخدم انبوت للإظهار أو للسحب

لا أستطيع الحكم بخصوص طاقة السكريبت قد يعود الامر لبناءه من الداخل
والله أعلم
ضخامة المنازل قد يتعلق بطول العدد الاول المكتوب في الانبوت 1 وليس الثاني

المـهاجر
12-09-2014, 03:23 AM
الناتج = صفر
عدد منازل الناتج = 1
اعتقد غير صحيح

ساتغاضى عن الإنبوت
جرب نفس الكود الأول مع ضرب الرقم بنفسه و ليس ب 200 و خبرنى عن سرعة الكود
require "bc";
local bignum = bc.number("10000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000");
bignum = bignum * bignum
Dialog.Message("Big number", tostring(bignum));
Dialog.Message("Big number", String.Length(tostring(bignum)));

ثامر أبو بلقيس
12-09-2014, 03:47 AM
سريع جدا

عدد المنازل 3995

و ماتعلق بالأنبوت تأكد بأنه يعمل عادي