اذهب الي المحتوي
أوفيسنا

الردود الموصى بها

قام بنشر

وعليكم السلام

أخي الكريم ابراهيم ما هو منطق التقسيم .. ؟ وعلى أي أساس تتم عملية التقسيم ؟ وهل تضاف الأرقام التي يتم تقسيمها على القيمة الحالية الموجودة في النطاق B1:B6؟

هلا أرفقت لنا بعض النتائج المتوقعة ..؟ 

قام بنشر
الان, ياسر خليل أبو البراء said:

وعليكم السلام

أخي الكريم ابراهيم ما هو منطق التقسيم .. ؟ وعلى أي أساس تتم عملية التقسيم ؟ وهل تضاف الأرقام التي يتم تقسيمها على القيمة الحالية الموجودة في النطاق B1:B6؟

هلا أرفقت لنا بعض النتائج المتوقعة ..؟ 

الأخ العزيز ياسر

جزاك الله خيرا على سرعة الرد

المرفق هو لمحل بيع مواد تموينية فى مصر

القيم فى العمود b  هى قيمة الدعم المخصص للمواطنين حسب عدد أفرادهم

الخلية c1 هى اجمالى ماتم توزيعه من الدعم بنهاية اليوم

المطلوب معرفة عدد البطاقات التى صرفت دعمها وبها فرد واحد ( b1 ) ومبلغها 49 جنيه وعدد البطاقات التى صرفت دعمها وبها فردين ( b2 ) ومبلغها 99 جنيه وهكذا

أرجو أن أكون قد وضحت سؤالى ومرفق ملف أكثر وضوجا

تقسيم2.rar

قام بنشر

الموضوع معقد جداً لأن عدد الاحتمالات كبيرة جداً جداً .. وقد لا توجد نتيجة في النهاية ..

هلا أرفقت النتائج المتوقعة ..... حيث جربت احتمالات كثيرة بشكل يدوي ولم أجد النتيجة المرجوة

قام بنشر
1 ساعه مضت, ياسر خليل أبو البراء said:

الموضوع معقد جداً لأن عدد الاحتمالات كبيرة جداً جداً .. وقد لا توجد نتيجة في النهاية ..

هلا أرفقت النتائج المتوقعة ..... حيث جربت احتمالات كثيرة بشكل يدوي ولم أجد النتيجة المرجوة

الأخ العزيز ياسر

لك منى جزيل الشكر على مجهودك معى جعله الله فى ميزان حسناتك

سأعطى مثالا آخر لعله يكون أبسط

لنفرض أنك معلم فى فصل دراسى قررت أن توزع مبلغ 100 جنيه على طلاب الفصل البالغ عددهم 11 طالب قسمنهم الى ثلاث مجموعات مثلا بحيث يأخذ كل طالب فى المجموعة الأولى 5 جنيهات  وكل طالب فى المجموعة الثانية 10جنيه وكل طالب فى المجموعة الثالثة 15 جنيه وتم توزيع المبلغ على الطلاب جميعهم 

هل يمكننا عن طريق معادلة او كود أن نحسب عدد طلاب كل مجموعه

وبخصوص طلبك ليس لدى نتائج متوقعه

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

10.rar

قام بنشر
2 ساعات مضت, بن علية حاجي said:

السلام عليكم

هذا حل من الحلول (عدد الطلاب 11 لا يعطي حلا فتم تغييره بالعدد 12 أو 13)... إن شاء الله أحاول أن أقدم لك حلا آخر باستعمال Solver

بن علية حاجي

10.rar

الأخ العزيز / بن عليه

العدد 11 أعطانى حلا موضح فى المرفق

فلو فرضنا أن عدد طلاب المجموعة الأولى 5 والثانية 3 والثالثة 3 يكون مجموعهم 11

ولو أخذ كل طالب فى المجموعة الأولى 5 جنيهات وفى الثانية 10 وفى الثالثة 15 يكون المجموع 100 جنيه وهو المبلغ الذى تم توزيعه

وفى مثال سيادتكم

مجموع المبلغ وصل الى 120 جنيه وهو غير مطابق للمبلغ الذى تم توزيعه 100 جنيه

فى انتظار رأى حضرتك

جزاك الله خيرا

11.rar

قام بنشر

الأخ الكريم إبراهيم 

يوجد احتمالات كثيرة للمطلوب .. 

المثال بسيط ولذا يمكن تنفيذه ولكن سيكون معقد لو زادات البيانات ....

جرب الكود في ورقة العمل المسماة ورقة 2 .. انقر على زر الأمر وسينتج لك في أول ثلاثة أعمدة الأعداد المتوقعة .. والثلاثة الأعمدة الأخرى حاصل ضرب الأرقام في 5 و 10 و 15  ، والعمود الأخير للمجموع

قمت بعمل تنسيق شرطي لعمود المجموع إذا كانت القيمة مساوية لـ 100 ..

قم بتنفيذ الكود ثم قف في أول صف ثم فلتر العمود G على شرط الرقم 100 لتظهر لك الاحتمالات الممكنة 

تقبل تحياتي

Possible Combinations.rar

قام بنشر

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

معذرة على الخطأ في الملف المرفق في ردي السابق، قمت بتصحيح معادلة المجموعة الثالثة في الجدول، وبالتالي العدد 11 أعطى 4 حلول منها الحل الذي أدرجتَه في توضيحك... والعدد 12 أعطى خمسة حلول... فمعذرة مرة أخرى...

بالنسبة للحل الذي يُستعمل فيه Solver فهو غير ممكن إذ يجب أن يكون عدد المعادلات مساويا عدد المجاهيل (القيم المطلوب تعيينها)

بن علية حاجي

10.rar

قام بنشر
9 ساعات مضت, ياسر خليل أبو البراء said:

الأخ الكريم إبراهيم 

يوجد احتمالات كثيرة للمطلوب .. 

المثال بسيط ولذا يمكن تنفيذه ولكن سيكون معقد لو زادات البيانات ....

جرب الكود في ورقة العمل المسماة ورقة 2 .. انقر على زر الأمر وسينتج لك في أول ثلاثة أعمدة الأعداد المتوقعة .. والثلاثة الأعمدة الأخرى حاصل ضرب الأرقام في 5 و 10 و 15  ، والعمود الأخير للمجموع

قمت بعمل تنسيق شرطي لعمود المجموع إذا كانت القيمة مساوية لـ 100 ..

قم بتنفيذ الكود ثم قف في أول صف ثم فلتر العمود G على شرط الرقم 100 لتظهر لك الاحتمالات الممكنة 

تقبل تحياتي

Possible Combinations.rar

الأخ العزيز / ياسر

جزاك الله خيرا على مجهودك معى

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

فهل لدىكم حل  وهل يمكن اضافة ما تمنع النتائج أقل من المبلغ الذى سيتم توزيع لنقلل النتائج

انظر المرفق ( الرجاء الضغط على الكود لمشاهدة النتائج لأنى قمت بحذفها لتقليل حجم الملف حتى يمكن رفعه حيث يصل حجمه بعد تفعيل الكود الى 35 ميجا )

Possible Combinations2.rar

8 ساعات مضت, بن علية حاجي said:

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

معذرة على الخطأ في الملف المرفق في ردي السابق، قمت بتصحيح معادلة المجموعة الثالثة في الجدول، وبالتالي العدد 11 أعطى 4 حلول منها الحل الذي أدرجتَه في توضيحك... والعدد 12 أعطى خمسة حلول... فمعذرة مرة أخرى...

بالنسبة للحل الذي يُستعمل فيه Solver فهو غير ممكن إذ يجب أن يكون عدد المعادلات مساويا عدد المجاهيل (القيم المطلوب تعيينها)

بن علية حاجي

10.rar

الأخ العزيز بن عليه

لك منى كل الشكر والتقدير على مجهودك المثمر

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

ولكنى لم أحصل على نتائج فهل تتكرم بالنظر فى معادلات الملف المرفق لتصويب الأخطاء

11.rar

قام بنشر

أخي الكريم إبراهيم جرب الكود التالي عله يفي بالغرض

Option Explicit

Sub PossibleCombinations()
    Dim r       As Variant
    Dim v       As Double
    Dim i       As Long
    Dim a       As Long
    Dim b       As Long
    Dim c       As Long
    Dim d       As Long
    Dim e       As Long
    Dim f       As Long
    Const x     As Long = 20

    ReDim r(1 To 1048576, 1 To 13)

    Application.ScreenUpdating = False
        For a = 1 To x
            For b = 1 To x
                For c = 1 To x
                    For d = 1 To x
                        For e = 1 To x
                            For f = 1 To x
                                v = Application.WorksheetFunction.Sum(a * 49, b * 99, c * 149, d * 199, e * 224, f * 249)
                                If v = 14221 Then
                                    i = i + 1
                                    r(i, 1) = a
                                    r(i, 2) = b
                                    r(i, 3) = c
                                    r(i, 4) = d
                                    r(i, 5) = e
                                    r(i, 6) = f
                                    r(i, 7) = a * 49
                                    r(i, 8) = b * 99
                                    r(i, 9) = c * 149
                                    r(i, 10) = d * 199
                                    r(i, 11) = e * 224
                                    r(i, 12) = f * 249
                                    r(i, 13) = Application.WorksheetFunction.Sum(r(i, 7), r(i, 8), r(i, 9), r(i, 10), r(i, 11), r(i, 12))
                                    If i >= Rows.Count Then GoTo Skipper
                                End If
                            Next f
                        Next e
                    Next d
                Next c
            Next b
        Next a
Skipper:
        Range("A1").Resize(i, UBound(r, 2)).Value = r
    Application.ScreenUpdating = True

    MsgBox "Done...", 64
End Sub

الكود سيستغرق وقت طويل بعض الشيء لربما يصل لأكثر من 5 دقائق لذا لا تقلق .. عدد النتائج كبير جداً .. لأن الاحتمالات كثيرة جداً جداً

  • Like 1
قام بنشر

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

في 05/07/2017 at 08:07, ابراهيم مرسى said:

الأخ العزيز بن عليه

لك منى كل الشكر والتقدير على مجهودك المثمر

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

ولكنى لم أحصل على نتائج فهل تتكرم بالنظر فى معادلات الملف المرفق لتصويب الأخطاء

11.rar

أخي الكريم ابراهيم مرسي، الطريقة التي وضعتها في الملف 10.rar صالحة فقط لثلاث مجموعات (ثلاثة مجاهيل) وأنت تريد تطبيقها على 5 مجموعات لأنه وكما ذكرت سابقا إنه يجب أن يكون عدد المجاهيل مساويا على الأقل عدد المعادلات، وفي المسألة لديك فقط معادلتين (المبلغ الموزع وعدد الطلبة) والطريقة المعتمدة في الملف 10.rar باعتبار أن عدد المعادلات هو 2 وعدد المجاهيل هو 3 هي أن نثبت قيم أحد المجاهيل (من 0 أو من 1 إلى عدد الطلبة) ونعين المجهولين الآخرين باستعمال المعادلتين... أما إذا زاد عدد المجاهيل إلى أكثر من ثلاثة فيجب ترك اثنين منها (يتم تعينهما بالمعادلتين) وتثبيت كل الباقي... مثلا إذا كان عدد المجاهيل 4 فنقوم بتثبيت اثنين منها (وعدد الاحتمالات في هذه الحالة يساوي "مربع عدد الطلبة"، عموما يكون عدد الاحتمالات مساويا "عدد الطلبة  أس عدد المجاهيل ناقص 2" إذا فرضنا أن عدد الطلبة هو n وعدد المجاهيل هو k فإن عدد الاحتمالات هو nk-2) ونعين المجهولين الآخرين باستعمال المعادلتين... وهكذا 

وأقترح أن يكون الحل باستعمال الأكواد غير أني أعتقد أن الأكواد يكون عملها بطيئا أكثر فأكثر كلما زاد عدد المجاهيل... والله أعلم

ليس لي طريقة أخرى للحل...

بن علية حاجي

  • Like 1
قام بنشر
18 ساعات مضت, ياسر خليل أبو البراء said:

أخي الكريم إبراهيم جرب الكود التالي عله يفي بالغرض


Option Explicit

Sub PossibleCombinations()
    Dim r       As Variant
    Dim v       As Double
    Dim i       As Long
    Dim a       As Long
    Dim b       As Long
    Dim c       As Long
    Dim d       As Long
    Dim e       As Long
    Dim f       As Long
    Const x     As Long = 20

    ReDim r(1 To 1048576, 1 To 13)

    Application.ScreenUpdating = False
        For a = 1 To x
            For b = 1 To x
                For c = 1 To x
                    For d = 1 To x
                        For e = 1 To x
                            For f = 1 To x
                                v = Application.WorksheetFunction.Sum(a * 49, b * 99, c * 149, d * 199, e * 224, f * 249)
                                If v = 14221 Then
                                    i = i + 1
                                    r(i, 1) = a
                                    r(i, 2) = b
                                    r(i, 3) = c
                                    r(i, 4) = d
                                    r(i, 5) = e
                                    r(i, 6) = f
                                    r(i, 7) = a * 49
                                    r(i, 8) = b * 99
                                    r(i, 9) = c * 149
                                    r(i, 10) = d * 199
                                    r(i, 11) = e * 224
                                    r(i, 12) = f * 249
                                    r(i, 13) = Application.WorksheetFunction.Sum(r(i, 7), r(i, 8), r(i, 9), r(i, 10), r(i, 11), r(i, 12))
                                    If i >= Rows.Count Then GoTo Skipper
                                End If
                            Next f
                        Next e
                    Next d
                Next c
            Next b
        Next a
Skipper:
        Range("A1").Resize(i, UBound(r, 2)).Value = r
    Application.ScreenUpdating = True

    MsgBox "Done...", 64
End Sub

الكود سيستغرق وقت طويل بعض الشيء لربما يصل لأكثر من 5 دقائق لذا لا تقلق .. عدد النتائج كبير جداً .. لأن الاحتمالات كثيرة جداً جداً

جزاك الله خيرا

 

18 ساعات مضت, بن علية حاجي said:

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

أخي الكريم ابراهيم مرسي، الطريقة التي وضعتها في الملف 10.rar صالحة فقط لثلاث مجموعات (ثلاثة مجاهيل) وأنت تريد تطبيقها على 5 مجموعات لأنه وكما ذكرت سابقا إنه يجب أن يكون عدد المجاهيل مساويا على الأقل عدد المعادلات، وفي المسألة لديك فقط معادلتين (المبلغ الموزع وعدد الطلبة) والطريقة المعتمدة في الملف 10.rar باعتبار أن عدد المعادلات هو 2 وعدد المجاهيل هو 3 هي أن نثبت قيم أحد المجاهيل (من 0 أو من 1 إلى عدد الطلبة) ونعين المجهولين الآخرين باستعمال المعادلتين... أما إذا زاد عدد المجاهيل إلى أكثر من ثلاثة فيجب ترك اثنين منها (يتم تعينهما بالمعادلتين) وتثبيت كل الباقي... مثلا إذا كان عدد المجاهيل 4 فنقوم بتثبيت اثنين منها (وعدد الاحتمالات في هذه الحالة يساوي "مربع عدد الطلبة"، عموما يكون عدد الاحتمالات مساويا "عدد الطلبة  أس عدد المجاهيل ناقص 2" إذا فرضنا أن عدد الطلبة هو n وعدد المجاهيل هو k فإن عدد الاحتمالات هو nk-2) ونعين المجهولين الآخرين باستعمال المعادلتين... وهكذا 

وأقترح أن يكون الحل باستعمال الأكواد غير أني أعتقد أن الأكواد يكون عملها بطيئا أكثر فأكثر كلما زاد عدد المجاهيل... والله أعلم

ليس لي طريقة أخرى للحل...

بن علية حاجي

مشكور أخى الكريم على التوضيح

قام بنشر

وجزيت خيراً بمثل ما دعوت لي أخي الكريم

إليك كود آخر أسرع في التنفيذ .. 

Sub PossibleCombinations()
    Dim a, p As Long, u As Long, arr As Variant
    Dim i1 As Long, i2 As Long, i3 As Long, i4 As Long, i5 As Long, i6 As Long
    Dim tot1 As Long, tot2 As Long, tot3 As Long, tot4 As Long, tot5 As Long, tot6 As Long

    Debug.Print "Start At : " & Format$(Now, "HH:MM:SS")
    Const Target As Long = 14221
    Const x As Long = 20
    u = Rows.Count
    ReDim a(1 To 1048576, 1 To 13)
    arr = Array(49, 99, 149, 199, 224, 249)
    
    Application.ScreenUpdating = False
        For i1 = 1 To x
            tot1 = i1 * arr(0)
            If tot1 >= Target Then GoTo L1
            For i2 = 1 To x
                tot2 = tot1 + i2 * arr(1)
                If tot2 >= Target Then GoTo L2
                For i3 = 1 To x
                    tot3 = tot2 + i3 * arr(2)
                    If tot3 >= Target Then GoTo L3
                    For i4 = 1 To x
                        tot4 = tot3 + i4 * arr(3)
                        If tot4 >= Target Then GoTo L4
                        For i5 = 1 To x
                            tot5 = tot4 + i5 * arr(4)
                            If tot5 >= Target Then GoTo L5
                            For i6 = 1 To x
                                tot6 = tot5 + i6 * arr(5)
                                If tot6 = Target Then
                                    p = p + 1
                                    If p > u Then GoTo Skipper
                                    a(p, 1) = i1
                                    a(p, 2) = i2
                                    a(p, 3) = i3
                                    a(p, 4) = i4
                                    a(p, 5) = i5
                                    a(p, 6) = i6
                                    a(p, 7) = i1 * 49
                                    a(p, 8) = i2 * 99
                                    a(p, 9) = i3 * 149
                                    a(p, 10) = i4 * 199
                                    a(p, 11) = i5 * 224
                                    a(p, 12) = i6 * 249
                                    a(p, 13) = tot6
                                End If
L6:                                 Next i6
L5:                             Next i5
L4:                         Next i4
L3:                     Next i3
L2:                 Next i2
L1:             Next i1
Skipper:
    
        Range("A1").Resize(p, UBound(a, 2)).Value = a
    Application.ScreenUpdating = True
    
    Debug.Print "Stop At : " & Format$(Now, "HH:MM:SS")
    MsgBox "Done...", 64
End Sub

 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • اضف...

Important Information