عرض مشاركة واحدة
قديم 05-02-2007, 07:49 AM   #2 (permalink)
MaestrO
don't ask me who i am

 
الصورة الرمزية MaestrO
 

MaestrO واحد رائع للمشاهدةMaestrO واحد رائع للمشاهدةMaestrO واحد رائع للمشاهدةMaestrO واحد رائع للمشاهدةMaestrO واحد رائع للمشاهدةMaestrO واحد رائع للمشاهدةMaestrO واحد رائع للمشاهدة

الدولة Egypt

افتراضي تابع -->



طبعا ممكن واحد يستظرف و يقول طيب الملف اتنسخ و خلاص فين المخرجات بقه، حغيظه و أقوله رسالة أد كده بتقول Mission Accomplished

ملحوظة: لا تسمح لأحد من المعقدين نفسيا أن يعقدك من البرمجة و العلم، هاهي خرائط التدفق التي كان يعتبرها البعض سر عسكري مقصور علي كبار المبرمجين و كانوا يعقدونك بها، أظنك الان اكتشفت كم هي سهلة، روح بقي و قوله لو كنت تعرف أكثر من الكلام كنت عملت




(2) المنطق الاختياري Selection
______________________

و ينقسم هذا النوع الي نوعين فرعيين :

* النوع الأول: البديل المفرد (Single Alternative)
=================================

و فيه اذا تحقق شرط معين يتم تنفيذ العملية و اذا لم يتحقق لا يتم تنفيذها
و يستخدم هذا النوع العبارة الشرطية if ….. then
ايه ؟ .. بتقول الجزء الاخير صعب؟
طيب ليه
- انا مش عارف يعني ايه if… then دي
- دي معناها لو حدث شيء اذا ننفذ أمر ما
- ممكن تشرح أكثر؟
- من عينيا

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

و لنتابع معا كيف يمكن تمثيل تلك الخوارزمية بخريطة تدفق أو flow chart



أظن الان أنك متشوق لمعرفة النوع الثاني و الذي يعطيك تحكم أكبر في اتخاذ القرارات



* النوع الثاني : البديل المزدوج Double Alternative

=================================


في هذا النوع يكون عندنا شرط اذا تحقق يتم تنفيذ عملية و اذا لم يتحقق يتم تنفيذ عملية أخري
مثال :
===

في المثال السابق لو أننا عندنا نفس الملف و نريد نسخه و أثناء تقييم الشرط الخاص بالتأكد من وجود مساحة كافية لنسخ الملف، نقوم مثلا بالغاء ملفات غير ضرورية لكي تتسع المساحة للملف الحالي.
و هذه بالضبط المنطق الذي يعمل عليه البديل المزدوج فهو يعتمد علي شرط، اذا تحقق هذا الشرط يتم تنفيذ عملية ما بعينها و اذا لم يتحقق يتم تنفيذ عملية مختلفة تماما
و يستخدم هذا النوع العبارة الشرطية if … then…. Else
بمعني
لو = if ----------< تحقق الشرط
• افعل شيء ما
لو لم يتحقق الشرط = else
افعل شيء اخر

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

الان خذ قسطا من الراحة و سوف أنتظر تعليقاتك علي الدرس الأخير مع ملاحظة أن البقية اتية و ان شاء الله نبدأ في العملي لذا قم بتنصيب ( set up ) الفيجوال بيسك الاصدار السادس من الان، و تذكر .... البرمجة فكرة
بسم الله الرحمن الرحيم
عادة عندما تبرمج باحترلف سوف تجد أن الكود الذي تعمل عليه ينقسم لجزئين، جزء نمطي أو standard و هو يكون شبه مكرر
مثلا في قواعد البيانات عندما تعمل بمكتبة ال DAO سوف تجد أن الكود الخاص به تقريبا متشابه في جميع البرامج
CODE
dim db as database
dim rs as recordset

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

نطلق عليه المنطق التكراري و هو بكل بساطة مجموعة من الأوامر يقوم البرنامج بتكرارها لعدة مرات، و السؤال الذي أراه يعتصر ذهنك الان و لماذا يحتاج البرنامج لتكرار أمر ما عدة مرات؟، و هل هذا التكرار لا نهائي أم مقيد بشرط ما أم نحدد نحن عدد مرات هذا التكرار أم ماذا؟

لنفترض مثلا أنك اشتريت أربع دجاجات، و ليس لديك سوي وعاء واحد لا يسع الا دجاجة واحدة فماذا تفعل لطهيهم ؟
تضع الدجاجة الاولي في الاناء ثم تنتظر حتي تنتهي العملية ( أي تمام الطهي)، ثم تضع الدجاجة الثانية و هكذا حتي يتم طهي الأربع دجاجات.

و لكن الواقع العملي في البرمجة أفضل كثيرا، فمثلا لو أن عندك 1000 طالب (1، 2، 3، ...... ، 1000 ) و تريد أن تضع تقديراتهم في مادة الرياضيات علي حسب الدرجات، تعالي بنا لنري كيف من الممكن أن يكتب هذا الكود

CODE• اقرأ درجة الطالب في المادة
• لو درجة الطالب أقل من 10 يكون التقدير ضعيف
• لو درجة الطالب 10- 13 يكون التقدير مقبول
• لو درجة الطالب 13 – 16 يكون التقدير جيد
• لو درجة الطالب 16- 18 يكون التقدير جيد جدا
• لو درجة الطالب 18 – 20 يكون التقدير امتياز

و لكن مهلا يا للمصيبة .. يوجد 1000 طالب، هل سنكتب هذه الأكواد ألف مرة لكل طالب؟
- لو كان الأمر كذلك لفضل المبرمجون العمل في مقهي
- فما الحل
- الحل كما قلت لك قبلا أن نضع كل الاكواد داخل تكرار بعدد الطلاب
- فكيف يمكن أن يكون الكود في هذه الحالة؟
- بالضبط كالاتي


CODE• كرر من 1 الي 1000
• لو درجة الطالب أقل من 10 يكون التقدير ضعيف
• لو درجة الطالب 10- 13 يكون التقدير مقبول
• لو درجة الطالب 13 – 16 يكون التقدير جيد
• لو درجة الطالب 16- 18 يكون التقدير جيد جدا
• لو درجة الطالب 18 – 20 يكون التقدير امتياز
ارجع لبداية التكرار مرة أخري



أي أنه سوف ينفذ كل هذه الأوامر أولا علي الطالب الأول حتي يفرغ منها، ثم يعود ادراجه الي بداية الأوامر مرة أخري لينفذ التكرار علي الطالب الثاني حتي يصل الي نهاية الأوامر و هكذا حتي الطالب رقم ألف
و بحسبة بسيطة تجد أن التكرار قد جعلك تكتب 7 أسطر من الأوامر بدلا من 5000 (خمسة الاف سطر)، وهذه من الأشياء التي تتضح فيها قوة الكمبيوتر، فالكمبيوتر له ثلاث صفات مميزة للغاية ( السرعة، الدقة و الغباء المحكم) و لكن لا تقلق فالمبرمج هو الذي يحدد ما اذا كان الكمبيوتر ذكي أم غبي و ذلك بكون برنامجه ذكيا أم ...
طبعا الان تدرك مدي أهمية منطق التكرار و كيف أنه رئيسي للغاية في أي لغة برمجة، و الجميل في الأمر أن منطق التكرار له أشكال متعددة و أنواع مختلفة مما يتيح لك مرونة تامة في استخدامه و لنري معا ما هي هذه الانواع و كيف يتم الاستفادة من كل نوع.



(1) الشكل الاول: التكرار باستخدام (Do While)
--------------------------------------------------------

لنفترض أننا نريد أن ننفذ مجموع من الأوامر في حلقة تكرارية و لكن بشرط معين فطالما أن هذا الشرط متحقق و هو ما نطلق عليه في البرمجة (True) تستمر الحلقة التكرارية و يستمر تكرار تنفيذ الأوامر أما اذا حدث أن هذا الشرط لم يعد متحقق ينتهي التكرار و تتوقف الحلقة التكرارية عن تنفيذ الأوامر.
- لا أفهم وضح أبن أفصح بكسر الباء
- حسنا انظر معي لهذا التركيب
While (تحقق شرط معين) Do A
حيث A عملية ما أو مجموعة أوامر
وتعني--------- بينما الشرط متحقق نفذ A
لو أننا في المثال السابق أردنا التطبيق علي درجات الالف طالب و حساب تقديرات كل منهم كيف نفعل ذلك باستخدام Do While ؟


سنفعل ذلك كالاتي:
___________

CODE• طالما أن عدد الطلاب أقل من أو يساوي ألف نفذ
• لو درجة الطالب أقل من 10 يكون التقدير ضعيف
• لو درجة الطالب 10- 13 يكون التقدير مقبول
• لو درجة الطالب 13 – 16 يكون التقدير جيد
• لو درجة الطالب 16- 18 يكون التقدير جيد جدا
• لو درجة الطالب 18 – 20 يكون التقدير امتياز
ارجع لبداية التكرار مرة أخرة

أو كالاتي

CODEDO While S <= 1000
الاوامر
Loop

حيث S هو العداد الذي يستخدمه التكرار لمعرفة موقعه الان، أي هل هو الان ينفذ الأوامر الخاصة بالطالب الثالث أم الرابع ... حتي تتساوي ال S مع الشرط و هو ال 1000 فينتهي التكرار و ينتهي عمل الحلقة التكرارية

و يمكن تمثيل ذلك بخريطة التدفق السهلة و البسيطة الاتية



2) الشكل الثاني: التكرار باستخدام (Do Until)
------------------------------------------------

و هو عكس النوع السابق، حيث أن التكرار يظل يعمل طالما أن الشرط غير متحقق، حتي until اذا تحقق الشرط ينتهي التكرار


مثال
----
طالما ان تانك السيارة غير مملوء while ------
املاْه بالبنزين، حتي until اذا امتليء، توقف عن تموين العربية و ... و روح حاسب علي البنزين حالا


و تركيبها يكون كالاتي:

CODEDo (A) Until
(تحقق الشرط)


لو أننا في المثال السابق أردنا التطبيق علي درجات الالف طالب و حساب تقديرات كل منهم كيف نفعل ذلك باستخدام Do Until ؟


سنفعل ذلك كالاتي:
___________


CODE• نفذ حتي يصبح عدد الطلاب 1000
• لو درجة الطالب أقل من 10 يكون التقدير ضعيف
• لو درجة الطالب 10- 13 يكون التقدير مقبول
• لو درجة الطالب 13 – 16 يكون التقدير جيد
• لو درجة الطالب 16- 18 يكون التقدير جيد جدا
• لو درجة الطالب 18 – 20 يكون التقدير امتياز
ارجع لبداية التكرار مرة أخرة

أو كالاتي


CODEDO Until S <=1000
الأوامر
Loop



حيث S هو العداد الذي يستخدمه التكرار لمعرفة موقعه الان، أي هل هو الان ينفذ الأوامر الخاصة بالطالب الثالث أم الرابع ... حتي تتساوي ال S مع الشرط و هو ال 1000 فينتهي التكرار و ينتهي عمل الحلقة التكرارية

و يمكن تمثيل هذا الشكل من خرائط التدفق كالاتي:



3) الشكل الثالث و الأخير: التكرار باستخدام (For … Next)
----------------------------------------------------------------



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

CODEFor I = Y to Z
أوامر
Next I


و لا تخف من تركيبها الذي قد تظن أنه صعب و سوف أشرحه لك بالتفصيل ان شاء الله
أولا FOR I تعني أن I هي العداد الذي سوف يعد مرات التكرار لمعرف موقع الحلقة التكرارية من التكرار، أي هل البرنامج الان ينفذ التكرار الأول أم الثاني أم الثالث أم ماذا.
Y هي نقطة البداية للتكرار قد تكون صفر أو واحد أو 100 حتي حسب المبرمج و حس البرنامج
Z هي نقطة نهاية التكرار و هي النقطة التي يتوقف عندها البرنامج عن تنفيذ التكرار
Next I جزء من التركيب و هي تستدعي التكرار مرة أخري طالما لم نصل الي نقطة النهاية.
فمثلا لو قلنا


CODEFor I = 1 To 10
Print "ahmed"
Next I


فهذا معناه أننا نريد من البرنامج أن يبدأ من النقطة 1 ويظل يطبع أحمد حتي يصل الي النقطة 10 ، أي أنه سوف يفعل ذلك 10 مرات.


مثال
----
بفرض أنك تريد طباعة 10 ورقات عليها اسمك ماذا سوف تفعل؟
سوف نقول للبرنامج


CODE• كرر الاتي 10 مرات فقط
• اطبع ورقة عليها اسمي
• ارجع لبداية التكرار مرة أخري


و في كل مرة عند بداية البرنامج يرجع مرة أخري للعداد I و يسأله هل قيمتك أصبحت مساوية لقيمة Z أي 10؟
فاذا كانت مساوية للعشرة يوقف التكرار ، و الا يعيد التكرار مرة أخري.

أتمني أن يكون الشكل الثالث من أشكال التكرار بسيط و للزيادة في السهولة نرسم خريطة التدفق الخاصة به.



__________________
MaestrO متواجد حالياً   رد مع اقتباس