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

اختبر مهاراتك في المؤشرات (الحلقة الرابعة)

بدأه khaled_prg في 3 مارس 2012 · 45 رد · 3,099 مشاهدة · في مشاريع ومسابقات القسم
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

لا زال اللقاء يتجدد مع سلسلة اختبر مهاراتك في المؤشرات و أهلا و سهلا بكم في الحلقة الرابعة من هذه السلسلة :)

تحدثنا في الحلقة الثالثة عن أول مشروع في هذه السلسلة. المشروع يتعلق بمحاكاة عملية التسجيل في الــ YAHOOو قد تقدم الأعضاء التالية أسماءهم بمحاولة للمشروع :

  • Omnivore
  • ahmedsaoud31
  • khaled_prg
  • محمد ابوزايد
  • ElectroDoc

لتجربة برنامج Omnivore :

emailvalidation_version0.4_exe_only.zip

لتجربة برنامج ahmedsaoud31 :

main.rar

لتجربة برنامج khaled_prg :

main.rar

لتجربة برنامج محمد ابوزايد :

main.rar

لتجربة برنامج ElectroDoc :

main.rar

من أجل تنظيم مشاركات و نقد الأعضاء, سنبدأ مع لائحة الأسماء حسب ترتيب أسبقية المحاولة. كل عضو يضع ما لديه من اقتراحات حول المحاولة المطروحة على طاولة النقاش. ثم يتم تقييم العضو و ننتقل إلى العضو الموالي.

كل عضو له الحق في تقييم المحاولة (أدني تقييم هو نقطة واحدة و أعلى تقييم هو 3 نقاط).

نبدأ الآن مع العضو Omnivore. ثم بعد ذلك نأتي إلى محاولة العضو ahmedsaoud31 ثم khaled_prg ثم محمد ابوزايد و نختتم هذه الحلسة بنقد محاولة العضو ElectroDoc.

بالتوفيق للجميع.

تم تعديل هذه المشاركة بواسطة khaled_prg في 4 مارس 2012 في 15:29

#2

السلام عليكم

عذرا لعدم تواجدي امس و مبارك للأخ همام ( اقصد بذلك الاخ ElectroDoc ) هو فعلا همام , طبيب و مبرمج !!!! ماشاء الله ( انا اعرف اصدقاء متخصصين في علوم الحاسب و درسوا البرمجة و لا يبرمجون ) همة عالية ماشاء الله

بالتوفيق للجميع

وما كلُّ ذِي لُبٍّ بمِؤْتيكَ نُصحَه ****** وما كلُّ مؤْتٍ نُصحَه بلبيب

************************************************

ما دعوة أنفع يا صـــــاحبي .... من دعوة الغــــائب للغــــائب

ناشدتك الــــرحمن يا قــــارئاً .... أن تسأل الغفران للكاتب (ولوالديه)

#3
OmniVore كتب:

السلام عليكم

عذرا لعدم تواجدي امس و مبارك للأخ همام ( اقصد بذلك الاخ ElectroDoc ) هو فعلا همام , طبيب و مبرمج !!!! ماشاء الله ( انا اعرف اصدقاء متخصصين في علوم الحاسب و درسوا البرمجة و لا يبرمجون ) همة عالية ماشاء الله

بالتوفيق للجميع

blush.gif

شكراً لك أخ OmniVore ولكلماتك الجميلة (بالمناسبة كيف عرفت اسمي؟ أظن من ملف الوورد أليس كذلك؟ laugh.gif)

#4

عملٌ رائع شباب :)

اشتاق الى تلك الايام خالد, انت تعلم ذلك جيدا :blush:

تعديل: أخ همام, اى IDE تستخدم؟ لم افهم الصيغة الخاصة بالملف التنفيذى للمشروع(كود)

تم تعديل هذه المشاركة بواسطة XMasterrrr في 4 مارس 2012 في 08:45

.Everyone has a dream

.I never thought that I would be the one I am on now

...No Pain No Gain

مشرف قسم السى/سى++ و الاسيمبلى سنة 2015 بأذن الله ...

تعديل: مشرف قسم السى/سى++ من 2012.

#5
ElectroDoc كتب:

blush.gif

شكراً لك أخ OmniVore ولكلماتك الجميلة (بالمناسبة كيف عرفت اسمي؟ أظن من ملف الوورد أليس كذلك؟ laugh.gif)

touché كما يقولون , هههههههههههههههههههههههههه

وما كلُّ ذِي لُبٍّ بمِؤْتيكَ نُصحَه ****** وما كلُّ مؤْتٍ نُصحَه بلبيب

************************************************

ما دعوة أنفع يا صـــــاحبي .... من دعوة الغــــائب للغــــائب

ناشدتك الــــرحمن يا قــــارئاً .... أن تسأل الغفران للكاتب (ولوالديه)

#6

بالمناسبة اخى خالد, انا معكم من بداية المشروع القادم, أرنا ما لديك يارئيس :D

.Everyone has a dream

.I never thought that I would be the one I am on now

...No Pain No Gain

مشرف قسم السى/سى++ و الاسيمبلى سنة 2015 بأذن الله ...

تعديل: مشرف قسم السى/سى++ من 2012.

#7

السلام عليكم

ما لكم يا شباب ؟ :)

لمااذ لا أرى اقتراحات الأعضاء حول محاولة الأخ Omnivore ؟

هل تنتظروني ؟ ... لماذا ؟ :blush:

أنا مجرد مشارك بسيط شأني شأن كافة المشاركين .. و ليس من المنطقي أن تنتظرني جماعة بأسرها لكي أضع اقتراحاتي أنا أولا ! :blink: ثم إني لا أملك الوقت الكافي للرد على الموضوع بسرعة ! :)

عموما, قمت بتجربة سريعة لبرنامج الأخ Omnivore و قد لاحظت فيه 3 أخطاء :

  • الأول : عندما تكون كلمة المرور عبارة عن مجموعة من tabulation سيتم تسجيل الدخول دون شرط أو قيد !
  • الثاني : عندما يطلب منا البرنامج إدخال Y للرجوع إلى الواجهة الرئيسية من جديد, ثم نُدخل YX فسيتم اعتبار X إيميل جديد و يُظهر البرنامج رسائل الخطأ المتعلقة بذلك.
  • الثالث : آخر خطأ من الأخطاء السابقة يقول أن الرمز المُخالف الذ تم إدخاله هو '-' و أنا لم أُدخل هذا الرمز مطلقا ! :)

تقييمي للأخ Omniovore :

2/3

تم تعديل هذه المشاركة بواسطة khaled_prg في 4 مارس 2012 في 15:25

#8

السلام عليكم

بالنسبة لى أرى الآتى ( ليس تقييماً وإنما مجرد وجهه نظر )

بالنسبة للبرنامج ككل فهو حقق الغرض المطلوب منه ولى بعض الملاحظات :

1 - عدم قبول الحروف الكبيرة فى اسم النطاق أو الدومين ( وأرى أنك لست بمخالف فى هذه الجزئية لأن نص المشروع لن يتطرق لهذه الجزئية وكانت النطاقات مكتوبة بالحروف الصغيرة )

2 - نص الشروط المطلوبة فى كلمة السر ( كلمة المرور يجب أن لا تحتوي على الرموز الآتية <,>,|,:,",',/,\ ) وبالتالى أى شيئ خلاف ذلك فهو مسموح ... كما نوه الأخ خالد ...

3 - بالنسبة أيضاً لما قاله الأخ خالد لموضع زيادة حرف بعد y فإنه يعتبره إيميل غير صالح فهذا شرط إضافى لسهولة عمل البرنامج ولا يواخذ عليه .

تقييمى : 3/3

لاتحسبن العلم ينفع وحده مالم يتوج ربه بخلاق

لا إله إلا أنت سبحانك إني كنت من الظالمين

#9

السلام عليكم

مرحبا أخي أحمد :)

بداية, كما يعلم الجميع, هذا الموضوع خاص بنقاش المحاولات لذا فمن الطبيعي جدا أن تختلف آرائنا (بما في ذلك التقييم) حول كل محاولة :)

و الإختلاف في وجهات النظر لا يُفسد للود قضية (من باب التذكير فقط .. أنا أعلم أن الود بيننا في أحسن حالاته و لله الحمد :happy: )

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

لم أحاسبه على هذه الجزئية لأنني أعلم أن مستواه البرمجي يسمح له بتخطيها بكل سهولة (يمكنه تحويل اسم النطاق إلى أحرف صغيرة قبل أن يتحقق من صحته كما يمكنه إدراج اسم النطاق بالأحرف الكبيرة كحالة موافقة).

و كما ذكرتَ أنت "نص المشروع لم يتطرق لهذه الجزئية وكانت النطاقات مكتوبة بالحروف الصغيرة" :)

اقتباس
أى شيئ خلاف ذلك فهو مسموح ... كما نوه الأخ خالد ...

ليس أي شيئ أخي أحمد :)

الأخ Omnivore تأكد جيدا من هذه الحالات و الخطأ الوحيد هو نسيانه للتأكد من tab أما بقية الرموز الغير مرئية فالبرنامج يرفضها بالكامل.

اقتباس
بالنسبة أيضاً لما قاله الأخ خالد لموضع زيادة حرف بعد y فإنه يعتبره إيميل غير صالح فهذا شرط إضافى لسهولة عمل البرنامج ولا يواخذ عليه .

تقييم الأعضاء هنا (أو على الأقل حسب وجهة نظري الشخصية) هو تعبير عن كمالية الرنامج و ليس السؤال هنا هل البرنامج يحقق المطلوب أم لا ؟

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

احترامي لك.

#10
اقتباس
ليس أي شيئ أخي أحمد :)

الأخ Omnivore تأكد جيدا من هذه الحالات و الخطأ الوحيد هو نسيانه للتأكد من tab أما بقية الرموز الغير مرئية فالبرنامج يرفضها بالكامل.

إذا فأنت من أخطأت أخ خالد كان نص الشروط المطلوبة فى كلمة السر ( كلمة المرور يجب أن لا تحتوي على الرموز الآتية <,>,|,:,",',/,\ ) ولم تتضمن الحرف الغير مرئية , أى تقبل أى شيئ عادا تلك الرموز فقط .

إذاً فهو مصيب فى حالة tab ومخطئ فى عدم قبول الرموز الغير مرئية الأخرى.

لاتحسبن العلم ينفع وحده مالم يتوج ربه بخلاق

لا إله إلا أنت سبحانك إني كنت من الظالمين

#11
اقتباس
إذا فأنت من أخطأت أخ خالد كان نص الشروط المطلوبة فى كلمة السر ( كلمة المرور يجب أن لا تحتوي على الرموز الآتية <,>,|,:,",',/,\ ) ولم تتضمن الحرف الغير مرئية , أى تقبل أى شيئ عادا تلك الرموز فقط .

إذاً فهو مصيب فى حالة tab ومخطئ فى عدم قبول الرموز الغير مرئية الأخرى.

أخي أحمد, يجب التفريق بين شيئين :

  • الشروط الضمنية التي يفرضها المنطق حسب التحقق من صحة المُدخلات.
  • الشروط العامة التي يفرضها المشروع.

مثلا, حسب الشروط العامة للمشروع : لا يمكن لكلمة المرور أن تحتوي على أحد الرموز المخالفة.

و لكن هل يمكن أن تكون كلمة المرور عبارة عن مجموعة من المسافات البيضاء فقط ؟؟

المنطق يقول لا و شروط المشروع لا تملك موقفا من هذه الجزئية !

إذا فشروط المشروع ليست كل شيء .. هناك شروط أخرى ضمنية يجب على المبرمج أن يحتاط بها, و الدليل على ذلك أن برنامج الأخ Omnivore يرفض كلمة المرور التي تحتوي على المسافات البيضاء فقط كما يرفض إدخال الرموز الغير مرئية في كلمة المرور .. إذا لماذا لا يرفض أيضا الــ tab ؟ ألا يُعتبر tab أحد الرموز الغير مرئية ؟؟ :)

الهدف الرئيسي من المشروع هو التحقق من صحة المُدخلات قبل التحقق من قواعد كلمة المرور أو اسم المستخدم, إذا وضعنا قواعد لكلمة المرور و اسم المستخدم فهذا لا يعني أن كل شيء ما عدا تلك الرموز المخالفة مقبول .. يجب أن نُحَكِّمْ المنطق في هذه الجزئية.

#12
ahmedsaoud31 كتب:

إذا فأنت من أخطأت أخ خالد كان نص الشروط المطلوبة فى كلمة السر ( كلمة المرور يجب أن لا تحتوي على الرموز الآتية <,>,|,:,",',/,\ ) ولم تتضمن الحرف الغير مرئية , أى تقبل أى شيئ عادا تلك الرموز فقط .

إذاً فهو مصيب فى حالة tab ومخطئ فى عدم قبول الرموز الغير مرئية الأخرى.

المبرمج الناجح مثل الجراح الناجح.

اذا كانت كلمة المرور يجب أن لا تحتوي على الرموز الآتية <,>,|,:,",',/,\ فمن الطبيعى انها ﻻ تحتوى على الحروف الغير المرئية

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

وهذا سيجعل المشروعات القادمة دقيقة جدا وقد ﻻ يستوعبها المبتدئون أمثالى من الوهلة اﻻولى.

post-15367-027053900%201340345097.gifpost-15367-087183200%201340344597.gif
post-247365-0-10080400-1379403554_thumb.

#14

1-ماذا لو فشل كود السطر التالى فى حجز مساحة الذاكرة التى تطلبها؟

    char* buf = new char[BUF_SIZE];

ما مصير هذا الكود اذا فشل الكود السابق فى حجز الذاكرة السابقة؟

bool check0 = StringUtility::CountSymbols(email,'@') == 1;
    if(!check0)
        AddEmailErrorMessage(" - Erreur Format : ",
                             "l'email ne doit contenir qu'un seul symbole '@'",0);
    size_t username_size = StringUtility::CopyUntil(email,0,buf,BUF_SIZE - 1,'@');
    bool check1 = CheckUsernameLength(username_size);
    .........................
    .........
    ..... to end of function;

2-على ما يبدو انك استخدمت لغة السى فلما استخدمت new وdelete وهما جديدتان فى السي++. أﻻ ترى انهما قد يرجعان نتائج ﻻتتوقعها لغة السي اساسا فيؤدى الى خطأ فادح؟

بالسبة للنقطة اﻻولى فقد وقعنا فيها جميعا اى ان اكودنا ليس فيها نظام تصيد اﻻخطاء المبنى داخل لغتى السي والسي++.

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

تقييم اخى OmniVore وانا اخر م يقيمك بــ 2\3 نــقطة.

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

تم تعديل هذه المشاركة بواسطة محمد ابوزايد في 4 مارس 2012 في 18:46

post-15367-027053900%201340345097.gifpost-15367-087183200%201340344597.gif
post-247365-0-10080400-1379403554_thumb.

#15

السلام عليكم

لى بعض الملاحضات أستاذ خالد :

إن كان القصد من المشروع هو محاكاة التسجيل فى ياهو فكان عليك أن تقول تلك الجملة وفقط ...هذا مشروع محكاة لعملية التسجيل فى ياهو ...

وبما أنك وضعت شروط تحكم هذا فيجب أن تضع جميع الشروط التى تقيد العمل ولا تعتمد على النية :happy: .

فمن (المنطق) الذى نفهمة من تلك العبارة (كلمة المرور يجب أن لا تحتوي على الرموز الآتية <,>,|,:,",',/,\ ) أى مسموح بأى شيئ خلافها وإلا من له رأى أخر يبدية لنا لنعاود تعلم اللغة العربية من جديد ؟؟؟ :D

khaled_prg كتب:

مثلا, حسب الشروط العامة للمشروع : لا يمكن لكلمة المرور أن تحتوي على أحد الرموز المخالفة.

و لكن هل يمكن أن تكون كلمة المرور عبارة عن مجموعة من المسافات البيضاء فقط ؟؟

المنطق يقول لا و شروط المشروع لا تملك موقفا من هذه الجزئية !

من قال لك أن كلمة المرور لا يمكن أن تكون مسافات فقط ؟

فهذه الأشياء تعتمد على طبيعة المبرمج وماذا يريد ولا دخل لها فى المنطق بشيئ على سبيل المثال :

1 - عند تسجيلك فى جوجل لا يصح لك إستخدام العلامة _ لماذا ...؟ الله أعلم ... بينما تستطيع إستخدامها فى ياهو .

khaled_prg كتب:

مما أثار دهشتي في برنامج الأخ Omnivore أن كلمة المرور تقبل وجود tab بينما لا يقبلها اسم المستخدم ! :blink:

بالنسبة ل tab عندك حق لأنها تسخدم فى العادة للإنتقال بين الحقول فإن كنت تريدنا التقيد بشروط فيجب وضع الشروط كلها أو أن تضيف لهذه الشروط (كما يجب مراعات الشروط الواجب توافرها أثناء تسجيلك بياهو !)

محمد ابوزايد كتب:

المبرمج الناجح مثل الجراح الناجح.

اذا كانت كلمة المرور يجب أن لا تحتوي على الرموز الآتية <,>,|,:,",',/,\ فمن الطبيعى انها ﻻ تحتوى على الحروف الغير المرئية

ومن الطبيعى أيضاً عدم إستخدام @,#,$,%,^,&,*,؟,. أو غيرها من الرموز

الإختلاف في وجهات النظر لا يُفسد للود قضية (من باب التذكير فقط .. أنا أعلم أن الود بيننا في أحسن حالاته و لله الحمد :happy: ) :D

تم تعديل هذه المشاركة بواسطة ahmedsaoud31 في 4 مارس 2012 في 20:06

لاتحسبن العلم ينفع وحده مالم يتوج ربه بخلاق

لا إله إلا أنت سبحانك إني كنت من الظالمين

#16

السلام عليكم ..

XMasterrrr كتب:

أخ همام, اى IDE تستخدم؟ لم افهم الصيغة الخاصة بالملف التنفيذى للمشروع(كود)

أهلاً بك أخ XMasterrrr. أستخدم Pelles C IDE (تجده هنا). هو عبارة عن مترجم C و بيئة تطوير مجانية وخفيفة، لكن بنفس الوقت متكاملة وبها كل ما يلزم لتطوير برامج لويندوز (Console أو Win32/64). لكن تدعم الـ C فقط (لا تدعم ++C).

بالنسبة للتقييم، سأكون معكم يا شباب متابعاً لا أكثر. لا أستطيع التقييم لأن تقييم الكود يتطلب دراسته بإمعان، وللأسف ليس لدي الوقت الكافي لذلك.

(كتابة كود من الصفر أسهل عندي من قراءة كود جاهز!! smile.gif)

ملاحظة على الهامش:

اقتباس

وبما أنك وضعت شروط تحكم هذا فيجب أن تضع جميع الشروط التى تقيد العمل ولا تعتمد على النية :happy: .

أتفق مع أخي أحمد على هذه النقطة.

#17
اقتباس
ماذا لو فشل كود السطر التالى فى حجز مساحة الذاكرة التى تطلبها؟

char* buf = new char[BUF_SIZE];

ما مصير هذا الكود اذا فشل الكود السابق فى حجز الذاكرة السابقة؟

bool check0 = StringUtility::CountSymbols(email,'@') == 1;
    if(!check0)
        AddEmailErrorMessage(" - Erreur Format : ",
                             "l'email ne doit contenir qu'un seul symbole '@'",0);
    size_t username_size = StringUtility::CopyUntil(email,0,buf,BUF_SIZE - 1,'@');
    bool check1 = CheckUsernameLength(username_size);
    .........................
    .........
    ..... to end of function;

حتى نكون مُنصفين ! :)

الأخ Omnivore تأكد من هذه الحالة في الدالة CopyUntil عندما استعمل الدالة assert :

size_t StringUtility::CopyUntil(const char* src, int index, char* dest, size_t dest_size , char stop_char){
    ClearStateBuffer();
    assert(IsBufferValid(src) && IsBufferValid(dest));
    ...
    return i;
}

و بالتالي, الأخ وضع في الإعتبار أن عملية الحجز الديناميكي قد تفشل.

اقتباس
على ما يبدو انك استخدمت لغة السى فلما استخدمت new وdelete وهما جديدتان فى السي++. أﻻ ترى انهما قد يرجعان نتائج ﻻتتوقعها لغة السي اساسا فيؤدى الى خطأ فادح؟

كيف لا تتوقعهما لغة السي أساسا ؟ :blink:

على حسب فهمي, توجد حالتان : إما أن تنجح عملية الحجز أو تفشل و الأخ احتاط في كلتا الحالتين :)

هل توجد حالة أخرى ؟ :wacko:

لدي سؤال للأخ Omnivore :

قمت بتصفح الكود الذي كتبتَه ووجدت دالة اسمها GetChar في الملف Console.cpp :

int Console::GetChar ( )
{
   int ch = getch();
   while(ch == 0 || ch == 224){
       getch();
       ch = getch();
   }
   return ch;  
}

ما فائدة هذه الدالة ؟

ثم لماذا تقرأ المُدخلات مرتين ؟؟

getch();
ch = getch();

و هناك سؤال آخر .. بالنسبة للدالة getch, هل تعيد void أم char ؟؟ :blink:

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

وبما أنك وضعت شروط تحكم هذا فيجب أن تضع جميع الشروط التى تقيد العمل ولا تعتمد على النية :happy:

لم أسمع بمصطلح النية البرمجية في حياتي أبدا :D

يا أحمد, لا توجد نية في المشروع و لاهم يحزنون ! :lol:

هناك فرق بين مشروع وَضَعَتْهُ شركة (مثل الياهو) و توجد شروط محددة و كل شيء يحكمه قانون و بين مشروع وضعه عبد ضعيف اسمه khaled_prg :D

هذا المشروع مُوجه للمبرمجين فقط, إذا يجب أن نترك لهم مساحة يفكرون فيها .. حتى يقف شعرهم من شدة التفكير :D

الهدف الأساسي للمشروع هو اختبار سرعة بديهية المبرمج وكيف يقتنص الأخطاء و يعالجها :)

يعني, أنا إذا قلت لكم .. مفيس الرموز دية و مفيش كمان الرموز الغير مرئية و مفيش .. و . مفييش ...!

مالذي تركتُه لكم أنتم كمبرمجين ؟!؟

ماذا ستفكرون فيه الآن غير تحويل كلامي إلى كود سي أو سي++ !؟؟

المبرمج يجب أن تكون لديه حاسة الشم مرتفعة جدا :D

اقتباس
فمن (المنطق) الذى نفهمة من تلك العبارة (كلمة المرور يجب أن لا تحتوي على الرموز الآتية <,>,|,:,",',/,\ ) أى مسموح بأى شيئ خلافها وإلا من له رأى أخر يبدية لنا لنعاود تعلم اللغة العربية من جديد ؟؟؟ :D

و من قال ذلك ؟ :)

أنا قلتُ أن كلمة المرور يجب أن لا تحتوي على الرموز المذكورة لكن لم أقل الرموز المذكورة فقط !, انتبه !! .. فهناك فرق :wink:

الآن يأتي دور المنطق ليحدد ماهي الرموز الأخرى التي يجب إقصاءها ضمنيا ؟

اقتباس
من قال لك أن كلمة المرور لا يمكن أن تكون مسافات فقط ؟

المنطق هو من قال ذلك ! :D إسأله إن كنت تريد معرفة السبب :lol:

سواء كان الياهو يقبل بها أم لا !, نحن كمبرمجين يجب أن ننظر إلى المسألة من الناحية الأمنية, البعد الأمني مهم جدا في مثل هذه الأشياء ..

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

هناك الآن الكثير من المواقع التي ترفض أن تُسجل فيها بكلمة مرور سخيفة (و المسافات البيضاء أكبر مثال على ذلك) !

اقتباس
فهذه الأشياء تعتمد على طبيعة المبرمج وماذا يريد ولا دخل لها فى المنطق بشيئ على سبيل المثال :

عند تسجيلك فى جوجل لا يصح لك إستخدام العلامة _ لماذا ...؟ الله أعلم ... بينما تستطيع إستخدامها فى ياهو .

نحن نبحث عن الأشياء التي لا يمكننا برمجتها أو الأخطاء التي توجد في برامجنا حتى نصلحها, إذا قلتَ لي يجب استبعاد العلامة _ أو $ فكل ما علي فعله هو إضافة تلك العلامة في سلسة المحارف المحظورة .. إذا إضافة هذه العلامة أو مسح أخرى لا تعبر عن شيء. :)

اقتباس
بالنسبة ل tab عندك حق لأنها تسخدم فى العادة للإنتقال بين الحقول فإن كنت تريدنا التقيد بشروط فيجب وضع الشروط كلها أو أن تضيف لهذه الشروط (كما يجب مراعات الشروط الواجب توافرها أثناء تسجيلك بياهو !)

القضية لا تتعلق بالياهو أو جوجل .. كلما ما في الأمر أن وجود رموز غير مرئية في كلمة المرور ليس منطقيا !, خصوصا و أن الأخ استبعدها من اسم المستخدم !!

اقتباس
ومن الطبيعى أيضاً عدم إستخدام @,#,$,%,^,&,*,؟,. أو غيرها من الرموز

كما قلتُ لك سابقا, عندما نريد استبعاد تلك الرموز فهذه ليست فكرة برمجية يُعاقب عليها .. لأنه يمكنني إدراج تلك الرموز في سلسلة المحارف المخالفة لقواعد اللغة و ينتهي الأمر !

اقتباس
بالنسبة للتقييم، سأكون معكم يا شباب متابعاً لا أكثر

على الأقل يمكنك تجربة البرنامج و اكتشاف الأخطاء الموجودة به (إن وجدت).

التقييم مسألة ضرورية .. لأنه يعبر عن رأي كل مشارك و هذا يهمنا جدا .. الرأي و الرأي الآخر :D

تم تعديل هذه المشاركة بواسطة khaled_prg في 4 مارس 2012 في 21:02

#18

السلام عليكم

لا عليك أخى خالد لن نطيل الجدل فى الموضوع كثيراً ... :regular_smile:

دكتور/همام كتب:
بالنسبة للتقييم، سأكون معكم يا شباب متابعاً لا أكثر.لا أستطيع التقييم لأن تقييم الكود يتطلب دراسته بإمعان، وللأسف ليس لدي الوقت الكافي لذلك.

دكتور / همام مجرد عمل إختبار للبرنامج لا لتتبع الكود , وملاحظاتك لطريقة عملة .

دمتم بخير

لاتحسبن العلم ينفع وحده مالم يتوج ربه بخلاق

لا إله إلا أنت سبحانك إني كنت من الظالمين

#19

السلام عليكم

اولا شكرا للحميع على تخصيص جزء من وقته الثمين لقراءة الكود أو تجريب البرنامج

اقتباس
مما أثار دهشتي في برنامج الأخ Omnivore أن كلمة المرور تقبل وجود tab بينما لا يقبلها اسم المستخدم !
اقتباس
إذا لماذا لا يرفض أيضا الــ tab ؟ ألا يُعتبر tab أحد الرموز الغير مرئية ؟؟

السبب بسيط و هو انني في حالة اسم المستخدم احصر التحقق في الحروف المقبولة فقط ( الحروف الابجدية + ارقام + _) ولا اقبل غبر ذلك أما عند كلمة المرور فلو لاحظت المتغير not_accepted_chars ستجد انه لا يحتوي على حالة الــtab ( لا يوجد \t ) لذلك البرنامج يعتبره حرفا صحيحا .

اقتباس
ما مصير هذا الكود اذا فشل الكود السابق فى حجز الذاكرة السابقة؟

معك حق و يجب عمل تحقق من نتيجة new , كنت سأستعمل الاستثناءات مع try و catch ولكن لم اشأ تعقيد الكود لانه كان مشروعا تعليميا, لكن لو كان في مشروع حقيقي لاستعملت خصائص البرنامج الحديثة std::shared_ptr و std::unique_ptr (وهي ميكانزمات لتحرير الذاكرة آليا دون ان يفعل المبرمج ذلك) + try و catch و الاستثناءات,

وكما قال الاخ خالد استعملت ابسط حل و هو assert لتوقيف البرنامج اذا كان هناك خطأ,

اقتباس
قمت بتصفح الكود الذي كتبتَه ووجدت دالة اسمها GetChar في الملف Console.cpp

هذا لتجنب الازرار F1, F2,....... والاسهم و الحروف غير المرئية, فاذا كان الحرف سهما أو F1,.... فان النظام يرسل حرفين احدهما 0 أو 224 ثم يتبعه بحرف آخر ( لذا تجد انك اذا ضغطت على ازرار الاسهم سيكتب لك حروفا مثل H, M, K .... فالحرف الاول غير مرئي [0 أو 224 ] و الحرف الثاني هو الذي ظهر وهذا ما لا تريده انت في برنامجك, اذن يجب التخلص من الحرف الثاني اذا كان الاول يساوي 0 أو 224 و بذلك تعالج الاسهم و F1, F2,... )

اقتباس
الثاني : عندما يطلب منا البرنامج إدخال Y للرجوع إلى الواجهة الرئيسية من جديد, ثم نُدخل YX فسيتم اعتبار X إيميل جديد و يُظهر البرنامج رسائل الخطأ المتعلقة بذلك.

هذا خطأ في الدفاع :lol:

اقتباس
و هناك سؤال آخر .. بالنسبة للدالة getch, هل تعيد void أم char ؟؟

لا void ولا char هي تعيد int وبما انني اضع الناتج في char اذن فهي قيمة الــLow Order Byte

اقتباس
مشروع وضعه عبد ضعيف اسمه khaled_prg

انا اسميك AhMeD La StAr , هههههههههههههه ( راجع ملف pdf خاصتك )

بالتوفيق للجميع

تم تعديل هذه المشاركة بواسطة OmniVore في 4 مارس 2012 في 21:39

وما كلُّ ذِي لُبٍّ بمِؤْتيكَ نُصحَه ****** وما كلُّ مؤْتٍ نُصحَه بلبيب

************************************************

ما دعوة أنفع يا صـــــاحبي .... من دعوة الغــــائب للغــــائب

ناشدتك الــــرحمن يا قــــارئاً .... أن تسأل الغفران للكاتب (ولوالديه)

#20

لي سؤال واحد أخي Omnivore :)

اقتباس
لا void ولا char هي تعيد int وبما انني اضع الناتج في char اذن فهي قيمة الــLow Order Byte

إذا كانت تعيد int فكيف تستخدمها هكذا :

getch();

ألا تعني الكتابة السابقة أن getch لا تعيد شيء ؟ :blush:

ننتظر تقييم أخونا ElectroDoc ثم بعد ذلك ننتقل إلى العضو ahmedsaoud31.

#21
khaled_prg كتب:

لي سؤال واحد أخي Omnivore :)

إذا كانت تعيد int فكيف تستخدمها هكذا :

getch();

ألا تعني الكتابة السابقة أن getch لا تعيد شيء ؟ :blush:

لا تعني ذلك بالضرورة , فاذا كنت لا تهتم بالقيمة التي تعيدها دالة يمكنك مناداتها و وتجاهل و عدم حفظ القيمة المعادة, كما في المثال السابق

بالتوفيق للجميع

وما كلُّ ذِي لُبٍّ بمِؤْتيكَ نُصحَه ****** وما كلُّ مؤْتٍ نُصحَه بلبيب

************************************************

ما دعوة أنفع يا صـــــاحبي .... من دعوة الغــــائب للغــــائب

ناشدتك الــــرحمن يا قــــارئاً .... أن تسأل الغفران للكاتب (ولوالديه)

#22
اقتباس
كيف لا تتوقعهما لغة السي أساسا ؟ :blink:

على حسب فهمي, توجد حالتان : إما أن تنجح عملية الحجز أو تفشل و الأخ احتاط في كلتا الحالتين :)

هل توجد حالة أخرى ؟ :wacko:

الــ new موجودة فقط بداخل سي++ وتعتبر من اﻻموار القياسية فى التخصيص الديناميكى للذاكرة. انت ﻻ يجب عليك اطلاقا استخدام malloc بداخل برامج سي++ اﻻ فى حالة الضرورة القصوى. ﻻن malloc ليست مصممة لميزة البرمجة كائنية التوجية OOP فى سي++. ان استخدمتها فى تخصيص الذاكرة للفئات هذا سيمنع استدعاء بانى الفئة. ومن ذلك اﻻ يحق لنا ان نتوقع ان لغة السي قد ﻻ تفهم البيانات التى ترجها new.

اقتباس
ما فائدة هذه الدالة ؟

ثم لماذا تقرأ المُدخلات مرتين ؟؟

getch();

ch = getch();

انا اضم صوتى الى صوتك أخى خالد واريد تفسيرا أم انة سهو ؟ حتى باكر غدا

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

post-15367-027053900%201340345097.gifpost-15367-087183200%201340344597.gif
post-247365-0-10080400-1379403554_thumb.

#23
اقتباس
الــ new موجودة فقط بداخل سي++ وتعتبر من اﻻموار القياسية فى التخصيص الديناميكى للذاكرة. انت ﻻ يجب عليك اطلاقا استخدام malloc بداخل برامج سي++ اﻻ فى حالة الضرورة القصوى. ﻻن malloc ليست مصممة لميزة البرمجة كائنية التوجية OOP فى سي++. ان استخدمتها فى تخصيص الذاكرة للفئات هذا سيمنع استدعاء بانى الفئة. ومن ذلك اﻻ يحق لنا ان نتوقع ان لغة السي قد ﻻ تفهم البيانات التى ترجها new.

يمكنك إستدعاء الـ constructor لفئه تم حجز مساحتها بغير new عن طريق استدعاء replacement new، و لكن حينها لا يمكنك إستخدام delete و ستحتاج لإستدعاء الـ destructor بنفسك و من ثم تحرير الذاكره.

#include <iostream>
using std::cout;

class test
{
public:
   test() { cout << "constructor called.\n"; }

   ~test() { cout << "destructor called.\n"; }
};


int main()
{
  void* ptr = malloc(sizeof(test));

  test* t = new (ptr) test;

  t->~test();

  free( t );
}

و الله ولي التوفيق

مدونتي: C++ Tips and Tricks

#24

السلام عليكم

محمد ابوزايد كتب:

انا اضم صوتى الى صوتك أخى خالد واريد تفسيرا أم انة سهو ؟ حتى باكر غدا

أجبت عن ذلك هنا :

/index.php?showtopic=258026&view=findpost&p=1269275

و هاهو المقطع :

OmniVore كتب:

هذا لتجنب الازرار F1, F2,....... والاسهم و الحروف غير المرئية, فاذا كان الحرف سهما أو F1,.... فان النظام يرسل حرفين احدهما 0 أو 224 ثم يتبعه بحرف آخر ( لذا تجد انك اذا ضغطت على ازرار الاسهم سيكتب لك حروفا مثل H, M, K .... فالحرف الاول غير مرئي [0 أو 224 ] و الحرف الثاني هو الذي ظهر وهذا ما لا تريده انت في برنامجك, اذن يجب التخلص من الحرف الثاني اذا كان الاول يساوي 0 أو 224 و بذلك تعالج الاسهم و F1, F2,... )

بالتوفيق للجميع

وما كلُّ ذِي لُبٍّ بمِؤْتيكَ نُصحَه ****** وما كلُّ مؤْتٍ نُصحَه بلبيب

************************************************

ما دعوة أنفع يا صـــــاحبي .... من دعوة الغــــائب للغــــائب

ناشدتك الــــرحمن يا قــــارئاً .... أن تسأل الغفران للكاتب (ولوالديه)

#25

بعد تجربة مشروع الأخ OmniVore، أعطيه تقييم 2/3.

وذلك بسبب المشكلة البسيطة في نهاية البرنامج عند إدخال أكثر من حرف في رسالة hit 'y' for yes.

لماذا لم تجعلها تتحقق من الحرف بشكل مباشر (إن كان y أو غيره) بدل انتظار ضغط المستخدم لزر Enter؟ مثلما تفعل من أجل إدخال الإيميل وكلمة المرور.

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

(أيضاً استغربت أن حجم الملف التنفيذي كبير جداً بالمقارنة مع الكود - حوالي 1.4 MB!!!)

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