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

مشاهدة النسخة كاملة : هــل يمكن تــــجزئة رقـــــم بالاعتمـــــاد على علامـــــة ؟


ياسرهتهت
25-06-2014, 11:10 PM
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
أخواني الاعزاء اساتذتي الكرام
هل يمكن تجزئة رقم الي جزئين بالاعتماد على علامة ( . ) بينت

اقصد عندي Input1 يحتوي على 15.7 او 2.22 او 13.12 او 133.349 .........الخ
طبع اقصد رقم من هذه الارقام وليس كلها
وليكن مثلا 13.12
هل يمكن تقسيم اوتجزئة الرقم بحيث يظهر
في Input2 الرقم 13
وفي Input3 الرقم 12
أي قسمة الاعداد ما قبل علامة البينت (.) وما بعد علامة البينت (.)

لقد وجدت اكواد تحذف رقم او رقمان كما تحدد انت من اليسار واليمين
وهذة الاكواد كانت تنفع معي لو كانت عدد الخانات ثابتة قبل (.) وبعدها
في مشروعي لكن للاسف متغيره
وافضل شئ هو كود يقسملي الرقم الي رقمان ما قبل (.) وما بعدها

اتمن ان اجد لديكم الحل

شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .

ثامر أبو بلقيس
26-06-2014, 12:28 AM
سؤال جيد أخي ياسر

نظريا
بافتراض لدينا العدد ص
نحصل على العدد أو الجزء الصحيح من باستعمال الدالة : Math.Floor
وليكن س
يبقى لنا استخلاص الجزء العشري مباشرة سيكون هو حاصل طرح ص-س

لكن هنا ستكون النتيجة معبرة عنها بــ صفر فاصل عدد من الارقام نريد ذلك العدد
نحسب طول هذا الناتج و ننقص منه 2 المعبرين عن الصفر و الفاصلة سينتج معنا طول
الارقام الي بعد الفاصلة أي الجزء العشري للجزء العشري نحوله بضرب ناتج س-ص في
10 أو 100 أو 1000 الخ تلك الأصفار عرفنا عددها برمجيا نستعمل Math.Pow ليتم بناء الكود
النهائي

سأطبق ماذكر و أرسله لك إن شاء الله دقائق :abc_138:

ثامر أبو بلقيس
26-06-2014, 12:42 AM
---- abou_belkiss -------------SEGMENTATION-------------------------------------------
x = Input.GetText("Input1");
Dialog.Message("Notice", Math.Floor(x));
Dialog.Message("Notice", (x- Math.Floor(x))*Math.Pow(10,String.Length((x- Math.Floor(x)))-2));
------------------------------------------------------------------------------------------------



نقرأ حلولا أخرى أجمل إن شاء الله
أو التصحيح ‘ن بدى خطأ

بالتوفيق :abc_138:

ثامر أبو بلقيس
26-06-2014, 02:24 AM
و هذه محاولة أخرى
أجبرني التقريب الغريب في البرنامج لحل بطريقة أخرى
على كل تبقى محاولات و السلام عليكم ورحمة الله
---- abou_belkiss -------------SEGMENTATION-------------------------------------------
x = Input.GetText("Input1");
Dialog.Message("Notice", Math.Floor(x));
Dialog.Message("Notice", String.Mid(x, String.Length(x)-(String.Length(x)- String.Length(Math.Floor(x))-2), String.Length(x)));

ياسرهتهت
26-06-2014, 09:09 AM
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
محاولات رائعة وممتازة اخي ابو بلقيس
المحاولة الاولي كان الخطأ عند نهاية الرقم بصفر
أي البرنامج كان يقرب 1.40 الي 1.4
:abc_139:---------:abc_139:
ام المحاولة الثانية رائعة وصحيحه 100/100
وحققت المطلوب واكثر
انا لم افهم ماذا فعلت ولكن كأنك لغيت التعامل مع الرقم كرقم عشري
:abc_138::abc_138::abc_138::abc_138:
بارك الله فيك وجازك كل خير
بالفعل كل جمل الشكر لا تكفي مجهودك
دمت لنا استاذ ومعلم والله يعطيك الصحة والعافية

http://download.chatalkhaleej.com/uploads/14037662391.png

فرح صالحي
26-06-2014, 02:29 PM
http://download.chatalkhaleej.com/uploads/14037662391.png

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

لوحة رائعة اخي ياسر// نعم هو اهلا لها الاخ ثامر
ان شاء الله رمضان مبارك على الجميع
موفق بإذن الله .:abc_152:.. لك مني أجمل تحية .

ثامر أبو بلقيس
27-06-2014, 04:46 PM
بارك الله فيكما شكرا جزيلا نعم أخي ياسر في المحاولة الثانية لم أتعامل
مع استخراج الجزء الصحيح و الجزء العشري -إن صح التعبير- بعد نزع الفاصلة و الصفر
لانه لا يمكن تجاوز أي جزء عشري القيمة 1
لكن رياضيا 3.2 = 3.20 = 3.200 الخ أي الأصفار لا قيمة لها هناا
المشكل في عملية طرح عدد عشري من عدد صحيح فإن البرنامج يعطي النتيجة صحيحة اذ كان
الجزء العشري المعبر عنه هو 0.5 أما مادونه 0.1 أو 0.2 أو 0.3 أو 0.4 إضافة لما أكبر منه
أي 0.6 أو 0.7 او 0.8 أو 0.9 فإنه سيعطي أخطاء لهذا تخليت عن حل رياضي يمكن الرجوع إليه
في حالة معرفة كم رتبة يمكن أن تكون للجزئين للعدد العشري ليتم استغلال الدالة : Math.Round المسؤولة
عن التقريب :abc_138::abc_138:
السلام عليكم

النصل القاطع
27-06-2014, 10:19 PM
وليكن مثلا 13.12
هل يمكن تقسيم اوتجزئة الرقم بحيث يظهر
في Input2 الرقم 13
وفي Input3 الرقم 12
أي قسمة الاعداد ما قبل علامة البينت (.) وما بعد علامة البينت (.)



الحل مهما إختلف عدد المنازل
num = 13.12
len = String.Length(num);

mark = String.Find(num, ".", 1, false);
int = String.Mid(num, 1, mark-1);
fract = String.Mid(num, mark+1, len-mark);
int = String.ToNumber(int);
fract = String.ToNumber(fract);
Dialog.Message("Notice", "الجزء الصحيح "..int.."\r\n".."الجزء العشرى "..fract, MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);

الجزء الصحيح سيكون فى المتغير int
الجزء العشرى (الكسر) سيكون فى المتغير fract

بالتوفيق

خادم المسلمين
27-06-2014, 10:50 PM
http://download.chatalkhaleej.com/uploads/14037662391.png


كل عام وانتم جميعا بخير
كل عام واستاذنا الغالى
الاستاذ العالم المتواضع " ثامر أبو بلقيس" بخير
الاستاذ ثامر يعد هو الخليفة الاول للاستاذ كريم
وهو جدير لاى تقدير واهل للاحترام

ثامر أبو بلقيس
27-06-2014, 11:08 PM
شكرا جزيلا أخي و صديقي خادم المسلمين على مابدر منكم من كلام طيب مشجع
رمضان كريم و كل عام و الأمة الإسلامية بخير إن شاء الله

---- مازلت بعد لم أخطو أمتار قليلة في المسار الاحترافي للاستاذ عبد الغني -- :abc_138:
نأمل بأن لا نبخل :abc_138:

ثامر أبو بلقيس
27-06-2014, 11:26 PM
وتنويعا للحلول هذا حل آخر :abc_113:
s =Input.GetText("Input1");
for w in string.gfind(s, "%w+") do
Dialog.Message("Notice", ""..w);
end

سيظهر الجزء الصحيح ثم الجزء العشري إن صح التعبير وقلنا جزء عشري :abc_138:


وسأحاول أن أضع حلولا أخرى :abc_138:

ربيع
14-07-2014, 11:22 PM
الأستاذ ياسر هتهت هذا حل باستعمال مصفوفة

في GLOBAL FUNCTIONS
function rod_balek(one, two)
if string.find(one,".") then
one = string.gsub(one,"%.","'.'")
end
if two == "." then
two = "'.'"
end
local x = {}
local find = "(.-)" .. two
local last = 1
local f, d, tam = one:find(find, 1)
while f do
if f ~= 1 or tam ~= "" then
table.insert(x,tam)
end
last = d+1
f, d, tam = one:find(find, last)
end
if last <= #one then
tam = one:sub(last)
table.insert(x, tam)
end
return x
end


واستعمل اينبوت و زر أكتب فيه
v = rod_balek(Input.GetText("Input1"),".")
Dialog.Message("Notice",(v[1]));
Dialog.Message("Notice",(v[2]));

حيث ناتج :
V1 معبر عن الجزء الصحيح
V2 معبر عن الجزء الثاني

سلامي ورمضان كريم :abc_138:

ثامر أبو بلقيس
21-10-2014, 10:06 PM
السلام عليكم ورحمة الله وبركاته
ويمكن استغلال الاضافة Action Extension

result = AE.StringDelimitedToTable(Input.GetText("Input1"), ".");
Dialog.Message("Notice", result[1]);
Dialog.Message("Notice", result[2]);

عظيمه
26-02-2016, 03:38 PM
شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .