• الإعلانات

    • فيصل الحربي

      تسجيل عضوية جديدة في المنتدى   01/31/2016

      السلام عليكم ورحمة الله وبركاته  عزيزي العضو الجديد :  حاليا رسالة الإيميل لتأكيد صحة إيميلكم تذهب للبريد العشوائي ( جاري حل المشكلة )  فإذا لم تجد رسالة التحقق من إيميلكم في صندوق الوارد لديكم إتجه للبريد العشوائي ( JUNK)  وقم بتفعيل إشتراككم من هناك   

Khaled Alshaya

المشرفون
  • عدد المشاركات

    2,052
  • تاريخ الانضمام

  • تاريخ اخر زياره

كل شيء نشر بواسطة Khaled Alshaya

  1. السلام عليكم و رحمة الله و بركاته.... تصور أن لدينا متتابعة على الشكل التالي: n, n+1, n+2, ..., n+i و قام أحد الأشخاص بنزع عدد من تلك المتتابعة, ثم قام ببعثرة الأرقام فأصبح ترتيبها عشوائياً عند إدخالها لبرنامجك. هل تستطيع معرفة العدد الذي تم نزعه من المتتابعة المدخلة للبرنامج؟ ملاحظات لتسهيل كتابة الخوارزمية: أولاً, افترض أن الأعداد المدخلة لا تقل عن عددين. فليس هناك داع للتحقق من وجود عددين فأكثر. ثانياً, افترض أن أطراف المتتابعة لم يتم المساس بها, بالتالي فإن العنصرين n و n+i دائماً حاضران ضمن مدخلات الخوارزمية. ثالثاً, و هذه الملاحظة تتبع من الملاحظة الثانية, أن العدد الضائع أو لنقل العدد الذي تم نزعه هو عدد من منتصف المتتابعة. بالتالي لو سميناه n+k فإن k لابد أن تحقق الشرط التالي: 0 < k < i رابعاً, ليس مطلوباً منك التحقق من كون المدخل لبرنامج صحيح أم لا, و افترض أنك تحصل دائماً على مدخلات صالحة للخوارزمية بقصد تبسط كتابة البرنامج لا أكثر. و هذا يعني أن الأعداد المدخلة عبارة عن أعداد موجبة دائماً. ما يلي عبارة عن أمثلة على مدخلات البرنامج و مخرجاته(العدد الضائع)... Example 1: Input: 1 3 Ouput: 2 Example 2: Input: 3 1 Ouput: 2 Example 3: Input: 9 6 7 5 2 3 1 8 Ouput: 4 Example 4: Input: 99 96 91 95 93 98 89 97 92 94 100 Ouput: 90 ما هي أفضل خوارزمية تستطيع الوصول إليها لحل هذا السؤال؟ بمجرد كتابتك للبرنامج ضعه في الموضوع, و بعد أن نصل إلى عدد جيد من الإجابات سنقوم بمناقشتها و طرح أفضل خوارزمية لحل السؤال. تحياتي :)
  2. لغز العدد الضائع!

    أعتقد أنه Gauss يا هيثم, و القصة صحيحة بالفعل, اكتشف النظرية عندما كان في الابتدائية :wacko: بالمناسبة Euler أجن و أجن من Gauss و Euler's Identity تسمى أجمل Identity في الرياضيات كلها حسب رأي الكثيرين, لأنها تجمع جميع الأعداد المميزة! الصفر و الواحد و i و pi و e ... ماذا بقي :lol:, السؤال هو كيف وصل لهذه المتطابقة أصلاً!
  3. لغز العدد الضائع!

    يا شباب هيثم ممنوع من الاشتراك في الألغاز القادمة :lol: الله ينور عليك يا هيثم, أتيت بالحل المثالي. بالمناسبة لا أعتقد أنه يوجد خوارزمية أفضل :) تحياتي...
  4. لغز العدد الضائع!

    السلام عليكم ... حل لابأس به أخي و معذور بسبب الصيام لذلك لن نطالب بتشغيل المخ بأقصى طاقته :P , و لكن لا تنسى أن تستفيد من نقطة حصر الأعداد المدخلة بالأعداد الموجبة فقط. عموماً, هناك حلول أفضل, و لا تحتاج إلى ترتيب الأعداد لكشف العدد الضائع. تحياتي...
  5. التطور البرمجي

    السلام عليكم ... أعتقد أن أستاذنا عماد كفى و وفى من ناحية طرح السؤال, و أحب أن أضيف أن جميع الدوال المذكورة متوفرة في أي آلة حاسبة للجيب, و لا تحتاج إلى حزم برمجيات. في الحقيقة أن الآلات الحاسبة الأقل من عادية توفر دوالاً أكثر من ذلك بكثير, و أنا أتكلم هنا عن أبسط أنواعها, لأنه كان لدي T89 كانت تقوم بالعجائب مقارنة بما تفضلتي حضرتك بذكره على أنه ميزة في البرنامج المذكور.
  6. سؤال حول إستخدام fgets

    متى أصبح لديك blog :cool: الطريقة التي أتبعتها هي كالتالي: #include <stdio.h> int main () { FILE * pFile; char buff[20]; pFile = fopen ("file.txt","r"); if (pFile==NULL) perror ("Error opening file"); else { /* fgets returns NULL if it is the end-of-file or if there is an error. Otherwise, it returns a pointer to the passed string. */ while ( fgets(buff, 20, pFile) ) printf("%s", buff); /* Here you can check if it is the end-of-file, or if there is an error. */ fclose (pFile); } return 0; } الطريقة ببساطة أن تتحقق من القيمة العائدة من fgets فإن كانت NULL فإنه ليس هناك شيء لقرائته إما لحدوث خطأ أو انتهاء البيانات في الملف, أما إن لم تكن كذلك فإن العائد من fgets هو نفس المؤشر buff. طبعاً إعادة buff للتسهيل لا أكثر إن كنت ستقوم باستخدام العائد من fgets مباشرة. هناك ملاحظة بسيطة مربكة في الحقيقة, و هي كيفية عمل الـ end-of-line. عندما يكون هناك بيانات, و تم وضعها في buff و من ثم وجدنا end-of-line فلن يتم إعادة NULL مباشرة, و إنما سيتم عمل set للـ end-of-line في الـ stream نفسه و في هذه الحالة عبارة عن ملف يسمى pFile. الآن, عندما تريد أي دالة قراءة pFile فإنها تتحقق من eof أولاً, و تعيد NULL على سبيل المثال إذا كان كذلك. تحياتي...
  7. شكراً أستاذي ياسر, لا يسعني إلا أن أقول إن كان هناك شيء تعلمته منك فهو التواضع أولاً, و البساطة في طرح الإجابة لجاهل مثلي :) تحياتي...
  8. Qt بلا شك هي الأفضل بشكل عام. عموماً كبيئة تطوير معينة, فخياري هو VS و خصوصاً إصدار 2010 مع Visual Assist X تصبح البيئة خرافية صراحة, و هناك بالفعل addin لـ Qt لمن يستخدم VS.
  9. السلام عليكم ,, السؤال واضح من عنوانه, نريد تحويل حرف من Upper Case to Lower Case, تصور أن لدينا المتغير التالي من نوع char : char A = 'A'; نريد طريقة برمجية بلغة ++C لتحويل الحرف 'A' إلى 'a' !! هذا هو المطلوب فقط, ضع حلك في الموضوع و لنتناقش حوله, بعد أن ينتهي الأخوة من وضع الحلول, سأضع طريقتي :) و صدقوني أؤكد لكم أنكم لم تروها من قبل :P تحياتي ,,
  10. السلام عليكم و رحمة الله و بركاته... بداية, أي شخص يمكن أن يضع حله مباشرة في الموضوع, و لاحاجة للرسائل الخاصة :) هل تستطيع إثبات التالي... افتراض أن لدينا خمس نقاط مختلفة في المستوي الثنائي, و جميع تلك النقاط ممثلة بإحداثي سيني صحيح و إحداثي صادي صحيح: LaTeX أثبت أنه لا بد أن توجد نقطة منتصف Mid Point واحدة على الأقل بين زوج من تلك النقاط, هي الأخرى تكون إحداثياتها صحيحة, بحيث أن الإحداثي السيني و الإحداثي الصادي لنقطة المنتصف تلك ينتميان للأعداد الصحيحة أيضاً. الـ Mid Point لأي نقطتين هي في المستوي الثنائي: LaTeX إذا استطعت حل الشق الأول من السؤال, فيمكن حل الشق الثاني بسهولة أيضاً. افترض أنك معطى عدد الأبعاد Dimensions (بعدان كما في الشق الأول) و لنسمي عدد الأبعاد n. هل تستطيع إيجاد العلاقة بين عدد الأبعاد و بين أقل عدد من النقاط الصحيحة المطلوبة لكي نضمن وجود نقطة منتصف واحدة على الأقل هي الأخرى صحيحة بين زوج من تلك النقاط المعطاة في البعد n. تحياتي...
  11. أهلاً هيثم, من المؤكد أنه قد يوجد نقطة منتصف صحيحة بين نقطتين معينتين. و لكن السؤال يقصد أن خمس نقاط في المستوي الثنائي هي بالفعل كافية لضمان وجود نقطة منتصف صحيحة على الأقل بين زوج من النقاط المعطاة دون حتى معرفة النقاط المعطاة مادمنا نعرف أنها مختلفة.
  12. أهلاً بالأخوة, يبدو أنه لا داع بعد الآن لحبس الحلول, ضعوها رجاءً و في المرة القادمة سنأتي بسؤال سهل ممتنع حقيقي و ليس مزيف كهذا :lol: تحياتي...
  13. أهلاً أستاذي, إن كنت تحب أن تتكرم بإعطاء الأخوة وقتاً إضافياً فلا مانع. إضافة إلى أن كلامي كان موجهاً للطلاب و ليس لأساتذتنا في المنتدى :P
  14. شكراً لكم جميعاً أساتذتنا الأفاضل, و الله الحديث ذو شجون :) أستاذنا راغب, هل ينطبق هذا الإثبات على الزمر التبادلية فقط؟ أليس هذا الإثبات صالحاً حتى ولو لم تكن الزمرة تبادلية؟ أستاذنا ياسر, بالنسبة لمسلمات الزمرة, التي قمت حضرتك بعرضها. استطعت فهم التالي: G1 هي هي الـ Closure G2 هي الـ Uniqueness of Product G4 هي الـ Identity Element و الـ Inverse بقي G3, لم أستطع فهم عن ماذا تعبر. هل تعبر عن الـ Associativity؟ هل لك أنت تشرح لنا المعنى بعد إذنك. و سؤالي الأخير و اعذرني إن كنت سأخرج عن الموضوع قليلاً, هل الـ Associativity شرط لكون فئة مع عملية ثنائية عبارة عن زمرة؟ السؤال هذا طرحته عندما كنا ندرس مقدمة في الجبر التجريدي( مقدمة بسيطة جداً :P ) و لم أجد الإجابة الشافية. و إذا كان كذلك فهل هناك مثال تجتمع فيه الشروط الثلاثة الأخرى بالنسبة للـ Closure و Identity Element و Inverse دون تحقق الـ Associativity و بالتالي لا تتحقق شروط الزمرة؟ تحياتي...
  15. السلام عليكم ... شكراً أستاذنا على هذه النفحة الرياضية :) في الحقيقة بما أن الموضوع تم فتحه, أو طرح السؤال لحضرتكم و هو عن متى نقبل المسلمة(Axiom) على أنها مسلمة و متى نعتبرها فرضية(Hypothesis) تحتاج إلى إثبات. مازاد استغرابي و حبي للرياضيات البحتة هو أن الرياضيين كانو يعتبرون الكثير من الفرضيات الرياضية مسلمات, حتى تم إثباتها و أصبحت مبرهنات. مثال ذلك, مسلمات الاحتمالات Probability axioms. أستاذنا في الجامعة يقول بأنها ليست مسلمات حقيقية لأنه تم إثباتها. لو تعطينا بداية الخيط في الموضوع, و شكراً لكم. تحياتي...
  16. أعتقد أن لدي فكرة أخرى و هي عن طريق الحصول على الـ Transitive Closure للـ Adjacency Matrix و خلال حسابها سنستطيع الحصول على مسافات الطرق بداية من العقد المتصلة مباشرة, ثم العقد المتصلة بطريق مسافته 2, ثم ثلاثة, و هكذا. و سوف يكون لدينا Distance Matrix بحيث نحصل على الـ Minimum لكل distance بين كل node و الأخرى, و عند حساب قوى الـ Adjacency Matrix فإننا سنعلم المسافة التي تتصل بها كل Node مع الأخرى, و بالتالي نقارن المسافة التي استخلصناها من الـ Adjacency Matrix مع المسافة الموجودة في الـ Distance Matrix. لم أتأكد من الفكرة صراحة و لكن أحببت وضعها لمن يحب مناقشتها أو لديه معلومات أكثر. و أتمنى أن لا أكون قد بدأت التخريف في فكرة لا أصل لها :) تحياتي...
  17. أخي العزيز, فهمت المطلوب :) الطريقة التي تخطر ببالي, هي أن تقوم بتمثيل الشبكة التي لديك على شكل Graph. و من ثم تقوم بتطبيق خوازمية Dijkstra Shortest Path لكل Node, بحيث يصبح لديك في النهاية أقصر طريق إلى كل Node أخرى من الـ Node التي بدأت بها. بهذه الطريقة تحصل على أقصر مسار, إضافة إلى المسار نفسه. تحتاج إلى تطبيق الخوازمية لكل Node على حدة. و عندما يتغير الـ Configuration الخاص بالشبكة, بإضافة Node أو حذفها تقوم بإعادة حساب الطرق مرة أخرى. هذا ما يخطر ببالي حالياً. أنا قمت بكتابة خوازمية Dijkstra و لكني لا أجد الكود الذي كتبته حالياً, و هو ليس صعباً بالمناسبة, يمكنك الذهاب إلى Wikipedia و ستجد شرحاً جيداً هناك أو من أي كتاب خوارزميات. أعتقد أن الخوارزمية ستكون بطيئة نسبياً, إذا كان عدد الـ Node كبيراً جداً, و الحل باعتقادي أن تقوم بتقسيم الـ Nodes إلى مجموعات في كل مجموعة Node رئيسية تمثل نقطة التقاء الـ Node الموجودة في منطقتها, و بالتالي تقوم بتنفيذ الخوارزمية على الـ Regions بدلاً من كل Node. تحياتي...
  18. و عليكم السلام أخي العزيز, سؤالان قبل أن نحاول الإجابة على سؤالك بإذن الله, ماهو نظام التشغيل الذي تعمل عليه الأجهزة؟ لأن فعل شيء كهذا ممكن بسهولة أكثر بكثير باستخدام الـ Network Stack المتوفرة في أنظمة التشغيل. و بناء Graph, و كتابة Routing Protocol من الصفر أصعب بكثير من استخدام الـ IP protocol. ماذا تريد من فعل شيء كهذا؟ للاستفادة فقط من تجربتك :) تحياتي....
  19. لغز محير في لغة السي ...!

    أخي أنصحك بأن يكون لديك صبر في تعلم البرمجة. لا تقفز من موضوع إلى موضوع هكذا. ببساطة, الـ Undefined Behavior هو تصرف غير مسؤولة عنه الدالة التي تناديها أو الشيء (Construct) الذي تقوم باستعماله في اللغة. مثلاً, من المعروف أن القسمة على صفر خطأ منطقي. في لغات أخرى, يكون هناك ما يسمى بالـ Exception في اللغة اسمه Divide by Zero أو ما شابه, ليخبرك أنك قسمت على صفر. في C و ++C هناك شروط يجب أن تتوفر قبل عمل أي دالة بشكل صحيح. تسمى أحياناً الـ Preconditions. ببساطة أكثر, صاحب الدالة التي سوف تستعملها يقول لك يجب أن تنادي الدالة بالطريقة التالية, و إن لم تناديها بالطريقة المعطاة فإن الدالة ليست مسؤولة عن التحقق من صحة ما يمرر لها. بالتالي صاحب الدالة لا يقوم بالتحقق من شيء, و إنما يفترض أنك أنت المسؤول عن المناداة بشكل صحيح. و أنت قمت بمناداة الدالة printf بشكل خاطئ. هذا هو الـ Undefined Behavior بكل بساطة. و لا يمكنك بأي حال من الأحوال أن تقول ظهرت لي نتيجة ما عند تجربة الكود, إذاً فهو صحيح. لأن الدالة نفسها لا تتحقق أصلاً من شيء. بالتالي الناتج خاطئ حتى لو كان صحيحاً على مترجم معين بنسخة معينة على نظام تشغيل معين باستخدام مكتبات معينة و جميع الظروف التي تحيط لحظة تشغيل الكود! تحياتي...
  20. لغز محير في لغة السي ...!

    عزيزي الكود خاطئ, و ينتج عنه Undefined Behavior.
  21. تقسيم 200000 بنسبة 1 : 2

    :D طارت B_Share من غير قصد. أيضاً صحيح, لا أدري لماذا لم أفكر في هذا أيضاً. تحياتي...
  22. السلام عليكم ... موضوع جميل. و لكن يمكنك الحصول على عدد الأعداد التي يمكن قسمتها على عدد ما في فترة discrete بالطريقة التالية. أولاً نفترض أن الفترة مغلقة, أي أن طرفي الفترة ضمن الأعداد المحسوبة: Let [a, b] be the discrete interval with b >= a, and we want to check how many numbers in that interval divide the number "c". Then: number of numbers that divide c = floor(b/c) - floor((a-1)/c) هذه الطريقة سهلة الإثبات, فكر في أنك تقوم بحساب عدد مضاعفات العدد c في الفترة من a إلى b. تحياتي...
  23. تقسيم 200000 بنسبة 1 : 2

    ممكن سؤال آخر . لو أردت منك حل لهذه المسألة ولكن مختلف عن الذى أورده هل تستطيع ؟ يعنى بدون عملية القسمة مع عملية الضرب لا أعتقد أن هذا ممكن, لأنك تحتاج إلى الضرب في النسب. و لكن يمكنك تحسين الطريقة بالشكل التالي: Let Total = 200000; Let A_Share = 1; Then, A_Total = (A_Share/(A_Share+B_Share)) * Total; B_Total = Total - A_Share; تحياتي...
  24. هذه طريقة أخرى خطرت لي باستخدام الـ boolean to int conversions: char a = 'A', b; b = a + (a > 90) * -32 + (a <= 90) * 32; تعديل: شكراً للأخ namespace على اكتشاف مشكلة في الكود قبل التعديل :)
  25. ترتيب ملف شكلا

    أنا طلعت جاي أبيع الماء في حارة السقايين :lol: أكيد يا حسن لا يمكن المقارنة بين Python و ++C في هذا النوع من البرامج, لأن Python أفضل بكل بساطة. عموماً, أنا لم أرد استخدام Boost, و إلا كان الكود سيصبح أفضل بكثير و أقرب لكود Python, و لكن ليس كثيراً :P