الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

هل تفكيري في هذه المسألة البسيطة لمدة 5 ساعات غريبة؟؟؟

بدأه kiooo96 في 3 ديسمبر 2012 · 6 رد · 717 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

إخواني الكرام، أنا مبتدئ في البرمجة وما تعودت أحل مسائل، وواجهتني المسألة التالية وما حليتها بالكامل (ولكن حليت منها حوالي 90% ولكن بعد تفكير لمدة تقريباً 5 ساعات)، فهل يعتبر بديهتي ضعيفة وذكائي ضعيف وما أصلح للبرمجة؟

المسألة بالنص:

هذه المسألة باستخدام التكرار والخروج منه عند الحاجة:

حسين أعطى والدته مبلغ 1000 ريال تحتفظ به وتعطيه كل يوم مبلغاً ما منه ، وافقت الوالدة لكن بشرط أن لا يزيد عدد الأيام عن عشرة أيام.

يقوم حسين بإدخال المبالغ التي يطلبها من والدته كل يوم على حدى.

يجب أن لا يزيد مجموع ما يطلبه حسين من والدته عن المبلغ الأصلي (1000 ريال)

عند انتهاء الأيام أو عندما يطلب حسين مبلغاً أكثر مما تبقى له يقوم البرنامج بطباعة عدد الأيام والمبلغ المتبقي.

بارك الله فيكم دلوني لأني ما أعرف مستواي في البرمجة مع أني أدرس قرابة سنة كاملة مع نفسي كتب وفيديوهات وهكذا...

#2

أخي ليست العبرة في المدة المستغرقة بل في طريقة التفكير نفسها

أي كيف حللت المسألة

لأن تحليل المسائل ومن ثم تحويلها إلى خوارزمية يحتاج مهارات ومراس وهذه تكتسب اكتسابا ولا دخل للذكاء الخارق بها

فهل لك أن تذكر لنا كيف حلّلّت (من التحليل وليس الحل ) المسألة وكيف اعتبرت أنك حللت 90% وما هو الجزء الذي عجزت عنه ؟

الهدف هو المناقشة لكشف الثغرات في طريقة التحليل إن وجدت

ألا إذا كنت تسأل عن الحل فقط فسنضعه لك.

1

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#3

شكراً أبو أحمد على ردك...

أنا ما عملت تحليل ولا خوارزمية، فقط مسكت المسألة ومباشرة كتبت الأكواد، وكل شوية أنظر للمسألة وآخذ منها إضافات ومعطيات وأضعها في الكود.

وحددت 90% لأني حليت المسألة تماماً ولكن بقيت خطوة صغيرة جداً ما عرفت أحلها، وهذه الخطوة لها ثلاثة إتجاهات، لو صلحت الإتجاه الأول خرب الإتجاه الثالث مثلاً، ولو صلحت الثالث خرب الثاني وهكذا...

والحمدلله أخيراً انتهيت من حلها بعد عناء شديد...

عموماً هذا هو الحل:

static void Main(string[] args)
        {
            int amount = 1000; // المبلغ
            int request = 0; // مقدار ما يطلبه حسين
            int days = 10; // عدد الأيام
            int x = 1; // التعداد الرقمي في كل جملة

            while (amount > 0 && days > 0)
            {
                Console.Write("{0}- Enter your request: ", x);
                request = int.Parse(Console.ReadLine());
                x++;

                if (request > amount || days == 1)
                    break;
                else
                {
                    amount -= request;
                    days--;
                }
            }

            if (amount != 0) // لكي لا يطبع المبلغ ولا الأيام المتبقية في حالة أن حسين أخذ المبلغ بالكامل
            {
                Console.WriteLine();
                Console.WriteLine("Remaining days: {0}", days - 1);
                Console.WriteLine("Remaining amount: {0}", amount);
            }

            Console.ReadKey();
        }
#4

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

الموضوع بسيط جداً بإذن الله ولكنه فعلاً مسألة مراس وخبرة

وأنت قمت بالفعل بعمل خوارزميات ولكنك لم تكتبها على الورق، لأن كل تفكير في أى مشكلة ومحاولة إيجاد خطوات حل لها تعتبر خوارزميات

أما بخصوص المسألة الخاصة بك

أو حتى أى مسألة أخرى

حاول أن تقوم بتمثيل الدور المطلوب من الكمبيوتر

بمعنى اعتبر نفسك بالفعل مكان حسين ماذا ستفعل؟

أولا تعطى والدتك المبلغ اليوم الأول

تطلب منها مبلغ ما في اليوم الثاني

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

وهكذا في تكرار باقى الأيام

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

لذلك فالأنسب في هذه الحالة استخدام

do....while

بدلا من

while

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

أرجو أن يكون هذا مفيداً

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

تم تعديل هذه المشاركة بواسطة ema2000_t في 4 ديسمبر 2012 في 04:26

6

أدعو الله أن يجعل أعمالنا خالصة لوجهه الكريم --- وأن ينفعنا بما علمنا

Dr Sayed Tohamy

Programming Instructor

مدرب برمجة

---------------

EmaSoft2000

-------------------

#5

شكراً أخي ema2000_t.

فعلاً ردك أفادني جداً أولاً في موضوع أني يعتبر استخدمت خوارزميات ولكن ليست على ورق، ثانياً do... while أنسب فعلاً من while.

بس حبيت أعرف شيء بسيط:

1- هل تنصحني باستخدام غالباً الخوارزميات في التفكير (بدون الكتابة على ورق)؟

2- هل جلوسي على مثل هذه المسألة لمدة 5 ساعات طبيعي؟ كوني مبتدئ وهذه تعتبر أول مسألة أفكر فيها؟ وأن مع المراس وحل المسائل سأكتسب السرعة والخبرة؟

وجزاكم الله خير...

#6
kiooo96 كتب:

شكراً أخي ema2000_t.

فعلاً ردك أفادني جداً أولاً في موضوع أني يعتبر استخدمت خوارزميات ولكن ليست على ورق، ثانياً do... while أنسب فعلاً من while.

بس حبيت أعرف شيء بسيط:

1- هل تنصحني باستخدام غالباً الخوارزميات في التفكير (بدون الكتابة على ورق)؟

2- هل جلوسي على مثل هذه المسألة لمدة 5 ساعات طبيعي؟ كوني مبتدئ وهذه تعتبر أول مسألة أفكر فيها؟ وأن مع المراس وحل المسائل سأكتسب السرعة والخبرة؟

وجزاكم الله خير...

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

بارك الله فيك أخى الكريم،،، بالنسبة لأسئلتك

1- لا يفضل في البرمجيات أن تعتمد على الذاكرة، بل لابد من توثيق كل خطوة تتم في المشروع حتى يمكن معرفة متطلباته وإجراءاته وخطواته وكل ما يتعلق به في حالة أردت العودة إليه بعد فترة من الزمن، لأنك ستكون نسيت هذا المشروع، فالتوثيق مهم جداً ويعتبر من أساسيات شركات البرمجيات وله قواعد يطلق عليها Standars ولابد من التزامك بقواعد الشركة التى تعمل بها.

2- بالسنبة لمدة خمس ساعات أو أكثر هذا طبيعى جدا جداً خصوصاً مع المبتدئين، أما فيما بعد ستجد الحلول شبه حاضرة فى رأسك دون تفكير وذلك لأن عامل الخبرة والمراس والمشاريع المتعددة التى قمت بها ستؤثر عليك بالتأكيد لذلك دائما ما ننصح الطلبة بشيئين مهمين جداً لمن أراد النبوغ في البرمجيات...

أولاً: الصبر (لأن علم البرمجة علم منطقى ولابد من اتصاف المبرمج بالصبر ليصل إلى حل المشكلة)

ثانيا: التمارين الكثيرة، لأنك كلما تمرنت كثيراً، كلما أخطأت كثيراً وتعلمت حل الخطأ فعندما يقابلك مرة أخرى لن تستغرق وقتاً في حله لأنك عرفت حله قبل ذلك، بالإضافة لتعرفك على أكواد برمجية جديدة وتحسين أكوادك القديمة.

أرجوا أن يكون هذا مفيداً

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

تم تعديل هذه المشاركة بواسطة ema2000_t في 5 ديسمبر 2012 في 01:39

4

أدعو الله أن يجعل أعمالنا خالصة لوجهه الكريم --- وأن ينفعنا بما علمنا

Dr Sayed Tohamy

Programming Instructor

مدرب برمجة

---------------

EmaSoft2000

-------------------

#7

شكراً أخي ema2000_t على نصائحك وتوضيحاتك، وشكراً أخ أبو أحمد على ردك الجميل.

وجزاكم الله خير...

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…