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

مشاهدة النسخة كاملة : التعامل مع باقي القسمة بالطريقة الصحيحة


ثامر أبو بلقيس
31-12-2014, 04:33 PM
السلام عليكم ورحمة الله وبركاته

قبل أن أطرح هذا التلميح ... يمكن النقد أو حتى التصحيح
إن بدت لك أخطاء
---------------------------------
باقي قسمة عددين نتيجة نحتاج توظيف نتائجها في كثير من البرامج
فبمجرد أن تفتح الأوتوبلاي و بالضبط عند الدالة Math سنجد :
Math.Mod و هي دالة مسؤولة عن إرجاع باقي القسمة
مثال :
Dialog.Message("Notice",Math.Mod(4,3));

يتم إرجاع القيمة 1 و هي الباقي

لو كتبنا الحروف الاولى من الدالة بقطع صغير فلن يغير في النتائج
مثال :
Dialog.Message("Notice",math.mod(4,3));

كذلك الدالة fmod تؤدي نفس الغرض
مثال :
Dialog.Message("Notice",math.fmod(4,3));


نفس الكلام لو استعملنا الرمز %
Dialog.Message("Notice",4%3);

لحد الان الأمور عادية :abc_138:

الان نجرب :
بأن يكون القاسم أو المقسوم سالبا ؟؟؟
مثال :
ناتج كل من الدوال : math.fmod و math.mod و Math.Mod
في هذا المثال :
Dialog.Message("Notice",Math.Mod(-4,3));
Dialog.Message("Notice",math.mod(-4,3));
Dialog.Message("Notice",math.fmod(-4,3));

كل الرسائل ستعطي بافي القسمة = -1

لكن عند استعمال %
مثال :
Dialog.Message("Notice",-4%3);

سيكون باقي القسمة 2

هناك قاعدة تقول بأن إشارة الباقي تكون نفس إشارة المقسوم عليه

الان يمكنك الحكم متى أستعمل القسمة باستعمال %
و النواتج الخاطئة التي ستحدث عند الاستعمال الخاطيء لأي من الدوال
سأتوقف هنا سلام :abc_138:

خادم المسلمين
31-12-2014, 05:19 PM
مشكور اخى ثامر
ويا ريت توضح بالامثلة العملية لمن يحب ان يتابع دروسك
اعلم ان هذا الدرس ربما يكون موجها لمستوى متقدم
ولكن تقديم أمثلة ربما يشجع المبتدئين علىى متابعة الموضوع وتعم الفائدة
كنت أتمنى ذلك مع كل درس لدالة math
ان ترفق مشروعا فقط يقرب الفكرة الى التطبيق

المـهاجر
31-12-2014, 05:59 PM
math.mod هى دالة اللوا الأصلية
Math.Mod هى نفس الدالة بعد إنضمامها للأوتوبلاى

% هى أصل كل ما سبق و ترجع للغة الأم ++c
و التى تم عمل اللوا لتسهيل التعامل معها

هناك العديد من الحلول لجعل % تعطى الناتج الصحيح فى حالة الأرقام السالبة
و لو فعلنا أى من تلك الحلول نصل ببساطة لكود الدالة math.mod الأصلى بلغة c
المعلوم مسبقا

ثامر أبو بلقيس
31-12-2014, 06:15 PM
مرور عطر أخي خادم المسلمين جزاك الله خيرا
فقط ما كتبته لا يرتقي أن يسمى درسا فقط هي ملاحظة
كتبتها كوني لاحظتها عند التعامل مع قيم سالبة فأوردت الملاحظة قلت ربما تفيد
----------------------------
أخي الكريم المهاجر جد مشكووور على ما أضفته من توضيحات
مهمة و داعمة شكرا جزيلا
توجد كذلك هذه الدالة قد تفيد في مثل هكذا حالات
Dialog.Message("Notice",-4-3*Math.Floor(-4/3));

بارك الله فيكما شكرا جزيلا :abc_138:

abohmam
01-01-2015, 12:49 AM
جزاك الله خيرا أخى ابا بلقيس

بارك الله فيك وفى جهودك النافعة

خادم المسلمين
01-01-2015, 01:10 PM
مرور عطر أخي خادم المسلمين جزاك الله خيرا
فقط ما كتبته لا يرتقي أن يسمى درسا فقط هي ملاحظة
كتبتها كوني لاحظتها عند التعامل مع قيم سالبة فأوردت الملاحظة قلت ربما تفيد
----------------------------
أخي الكريم المهاجر جد مشكووور على ما أضفته من توضيحات
مهمة و داعمة شكرا جزيلا
توجد كذلك هذه الدالة قد تفيد في مثل هكذا حالات
dialog.message("notice",-4-3*math.floor(-4/3));

بارك الله فيكما شكرا جزيلا :abc_138:

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

ثامر أبو بلقيس
01-01-2015, 01:17 PM
لم تجدنى ولن تجدنى مختلفا معك الا حرصا
ليس اختلاف بل ذاك هو المطلوب ... و أكثر ما يسعدني شكرا :abc_138:
-------------------------------------------------------------
مازال موضوع باقي القسمة يشغلني
وقد طرحت انشغالا موازي في مواقع الايكسل لم يفصل فيه
يمكن الاطلاع ويبدو أن الموضوع سيبقى مفتوحا لغاية الفصل في مكمن الخطأ

من هناااا (http://www.officena.net/ib/index.php?showtopic=57938)

المـهاجر
01-01-2015, 04:57 PM
عذرا أخى
لم اكن اتوقع انك تبحث عن حل
فالموضوع موجود فى قسم الشروحات
فإعتقدت ان كل ما سبق كان تمهيد أو مقدمة لدرس ما فلم أشأ التدخل و إفساد مقدمتك بوضع حلول


-------------------------------------------------------------
مازال موضوع باقي القسمة يشغلني
وقد طرحت انشغالا موازي في مواقع الايكسل لم يفصل فيه
يمكن الاطلاع ويبدو أن الموضوع سيبقى مفتوحا لغاية الفصل في مكمن الخطأ



أعذرنى لتأخر الرد
فالآن فقط عرفت أنك تستفسر بغرض الإستفسار و ليس التمهيد لدرس
لذلك هذه هى الدالة الصحيحة
x = 5
y = 3
mod = (x%y + y)%y
Dialog.Message("Notice", mod , MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);

هناك فرق شاسع بين دالة modulo و دالة %


هناك العديد من الحلول لجعل % تعطى الناتج الصحيح فى حالة الأرقام السالبة
و لو فعلنا أى من تلك الحلول نصل ببساطة لكود الدالة math.mod الأصلى بلغة c


و هذا هو ما قدمته فى الدالة التى كتبتها لك
و مع كامل إحترامى لأعضاء منتدى أوفيسنا
فعليك أن تعذرهم فهم مستخدمون للدوال المتاحة بالإيكسل أو ال vba فقط و لا ينفذون أبدا لجذورها فى لغة ++c
و لا يكلف الله نفسا إلا وسعها

ثامر أبو بلقيس
01-01-2015, 05:21 PM
السلام عليكم ورحمة الله وبركاته

الأخ المهاجر مع قراءة ردك أسألك ما الفارق الذي تراه بين ما كتبت
x = 5
y = 3
mod = (x%y + y)%y
Dialog.Message("Notice", mod , MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);


و ماذكرته في أول المشاركة بأن % تعطي الباقي بالطرييقة نفسها اذ تعلق الامر بالأعداد السالبة
x = 5
y = 3
mod = x%y
Dialog.Message("Notice", mod , MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);


ما الفارق الذي تراه بين الاكواد مازال إنشغالي بخصوص الاعداد السالبة
ليس في كيفية الحصول بل بعدم اقتناعي بعمل الدالة

المـهاجر
01-01-2015, 06:30 PM
حسنا
-21 % 4 = 3 لأن -21 + (4*6) = 3
-21 % 3 = صفر لأن -21 + (3*7) = صفر

و لاحظ أن نتائج الدالة mod هى الأخرى ليست منزهة من الأخطاء
و إلا أخبرنى ما هو ناتج
result = Math.Mod(-24, 4);

و لا تخبرنى أنه سالب صفر

ثامر أبو بلقيس
01-01-2015, 07:04 PM
بارك الله فيك لهذا قلت مازلت منشغلا بباقي القسمة
دعني أخبرك عما يحيرني أكثر
أحسب بأي دالة كانت مما سبق في الموضوع
ناتج قسمة 4 على -3

رايح تجد أن الباقي دائما أكبر من المقسوم عليه و كأن العملية
آلية القسمة توقفت في مرحلة معينة
لو استعملنا Math.Mod ومثيلاتها الناتج 1 و هو أكبر من المقسوم عليه -3
و رياضيا غير مقبول
لو استعملنا % أو ماتفضلت به يكون الناتج -2 و هي أكبر من -3

بمعنى في كل الحالات النتائج خطأ خطأ رياضيا لذلك مازلت منشغلا حول الاسباب
تقديري:abc_138:

المـهاجر
02-01-2015, 02:12 PM
فى الحقيقة أنا أستوعب قسمة رقم سالب على رقم موجب
هذا عمليا يشبه تقسيم دين مالى(سالب) على مجموعة من الرجال (قطعا عددهم موجب) ليقوموا بسداده

فى الواقع لا أفهم ما هو التمثيل العملى للقسمة على رقم سالب
يصعب التفكير فى فكرة مجردة من التطبيق

هل هى تشبه ملئ مجموعة حفر (إرتفاع سالب) بواسطة عامود من الماء (ارتفاعه موجب) ؟؟
تقسيم الماء (موجب) على الحفر (سالب)

ما رأيك ؟؟
نتفق و بعدها نواصل

ثامر أبو بلقيس
02-01-2015, 02:19 PM
نعم أخي المهاجر لكن هو منطق رياضي قد لا نجد له تفسيرا واقعيا
لكن لا مناص لأن ننفي عدم وجود قسمة عدد على عدد سالب
أفهمك أخي جيدا لكن وصلت تقريبا لهذا القرار المؤقت بأن لا أفكر في ايجاد باقي قسمة
أعداد أحد اطرافها سالب فكذلك لا تجد تفسيرا مقنعا لما نقول -4 / 3 = -2 و الباقي 2 قد يطرح
السؤال و هل -4 فيها -2 مرة 3 :abc_138:
على كل شكرا جزيلا تقديري و احترامي لشخصكم الكريم :abc_138:

المـهاجر
02-01-2015, 02:25 PM
نعم أخى
لكن قسمة سالب على موجب منطقى جدا

أشهر تاجر إفلاسه و علية 3000 جنيه (تعتبر هنا -3000 )
إجتمع 3 من زملاؤه و قاموا بتقسيم مديونيته على أنفسهم بالتساوى لسدادها عنه

ما هى نتيجة الإجتماع
حصل كل تاجر على -1000 جنيه لسدادها

ثامر أبو بلقيس
02-01-2015, 02:39 PM
كل الأمثلة التي تذكرها منطقية
أخي المهاجر قد لا يحضرني الان تطبيق يضعنا
مباشرة أمام عملية موجب على سالب لكن ليس المهم هو عملية
اسقاط ما يحدث رياضيا على الواقع لأني قرأت عديد الاسئلة التي قد تعطى للطالب
مباشرة بأن يجد نواتج كسو ر ذات بسط موجب و مقام سالب أتمنى أني أوصلت فكرتي
و سأحاول أن أدعم كلامي بأمثلة - إن شاء الله اذ وفقت في ذلك -

ملاحظة :
لهذه الاسباب و لتلك بدأت الموضوع بالترحيب بالنقد البناء - مثل ما تفضلت به- و التصحيح
و ختم بأن يأخذ قرار الاستعمال الصحيح لصاحبه بناء على تعلماته و قناعاته الرياضية
ليأخذ الموضوع منحى توضيح اذ تعلق بالأعداد الموجبة و لفت نظر للأعداد السالبة و مشاكلها :abc_138:

المـهاجر
02-01-2015, 02:40 PM
أعتقد أيضا قسمة سالب على سالب منطقية أيضا
فرضا
أنا مديون ب 5000 جنيه و زميل لى مديون ب 1000 جنيه (هنا -5000 و -1000)
كم النسبة ؟
-5000 / -1000 = 1

و إسقاط ما يحدث رياضيا على الواقع هام جدا إن أرنا فهم النتائج الرياضية على النحو الصحيح
و صنع الدوال اللازمة بشكل صحيح

أبو فارس
03-01-2015, 01:33 PM
:shokr:

مداخلات رائعة بين محترفين