• 0
  • مالي خلق
  • أتهاوش
  • متضايق
  • مريض
  • مستانس
  • مستغرب
  • مشتط
  • أسولف
  • مغرم
  • معصب
  • منحرج
  • آكل
  • ابكي
  • ارقص
  • اصلي
  • استهبل
  • اضحك
  • اضحك  2
  • تعجبني
  • بضبطلك
  • رايق
  • زعلان
  • عبقري
  • نايم
  • طبيعي
  • كشخة
  • صفحة 1 من 4 1234 الأخيرةالأخيرة
    النتائج 1 إلى 15 من 46

    الموضوع: :: مشروع لتعليم أساسيات ++C :: موضوع الدروس

    1. #1
      التسجيل
      11-04-2002
      الدولة
      سوريا
      المشاركات
      760
      المواضيع
      76
      شكر / اعجاب مشاركة

      :: مشروع لتعليم أساسيات ++C :: موضوع الدروس

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

      ملاحظة / أرجو عدم الرد لحين وضع الدرس كاملاً لأنه طويل .

      هذا الموضوع عبارة عن مشروع تعليمي يتضمن ما يلي :


      1 – تعليم أساسيات لغة ++C ضمن مواضيع الفهرس الموجود .
      2 – مشروع إنشاء كتاب إلكتروني و هو ملخص عن الدروس المعطاة ليكون مرجع للمتعلمين .
      3 – إنشاء مشروع تخرج للذين تعلموا هذه اللغة ( فقط من قام بالتسجيل ) .

      المشتركين في الدورة هم الأعضاء :

      1- son of Qatar .
      2 - habash1986 .
      3 - Son Of UAE .
      4 - SONIC4ANIME .
      5 - asf4ever .
      6 - ^عبدالعزيز..ع^ .
      7 - kokekemo .
      8 - UAE Naruto .
      9 - عنان 2005 .
      10- ستو كايبا .
      11 - Imaj .
      12 - banan 86 .

      و العدد قابل للزيادة .

      مزايا التسجيل :

      1 – باستطاعتك أن تسألني أي سؤال حول الدروس أو إن كنت تريدني أن أشرح لك بعض الفقرات بأسلوب مختلف أو لكي أحل لك بعض المسائل .. أما غير المسجلين فلن أجيب عن أسئلتهم ( فاعذروني ) و لكن أرحب بآرائهم و بردودهم .
      2 – ستـطالب بحـل بعض التمارين ( و ليس كلها بما تستطيعه ) و تقديمها في هذا الموضوع بعد كل درس .
      3 – ستقوم بعمل مشروع تخرج بعد انتهاء الدروس ( أريد واحد فقط على الأقل من بين الجميع أن يعمله ) .. و سأمنحك شهادة خاصة باسم المنتدى ( سنتحدث عن ذلك لاحقاً ) .
      4 – سأقوم مع المسجلين بعمل كتاب إلكتروني و مناقشته .. و سأقـوم أنا بكتابته و سـيكون بإسمهم جميعاً و باسم المنتدى .

      و من أجل من فاته التسجيل في الموضوع السابق الذي كان مقدمة لهذه الدورة و يريد معرفة التفاصيل فليدخل إلى هذا الموضوع و ليسجل فيه :

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

      :: فهرس المواضيع ::

      1_ بنية اللغة ( مكونات اللغة ) :
      - المتحولات .
      - الأنواع .
      - العمليات .
      إلخ ...

      2_ تعليمات التحكم :
      - الشرط .
      - التكرار .

      3_ البرامج الجزئية ( التوابع ) .

      4_ المصفوفات ( Arrays ) .

      5_ البنى ( Struct ) .

      6_ المؤشرات ( Pointers ) .

      7_ البرمجة غرضية التوجه :
      - مقدمة .
      - الصفوف ( Classes ) .
      - توابع الهدم و البناء .
      - الوراثة ( Inheritance ) .
      - التحميل الزائد .
      - التوابع الصديقة .

      :: قبل البدأ ::

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

      :: ملاحظات هامة ::

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

      2 – لا تيأس من أول محاولة فشل لحل أي مسألة و حاول تطبيق ما تعلمته و أعد المحاولة و إن لم تعرف فحينها اسألني و إن شاء الله سأجيبك .. فلا أريد أن يسألني أحد و هو لم يحاول إلا مرة واحدة . آمل أن تستجيبوا لهذا الأمر . و كل هذا من أجل مصلحتكم فإن كانت بدايتكم سيئة فلن تتعلموا شيئاً بعد ذلك لأن المواضيع ستتشابك قليلاً .

      3 – يجب عليك أن تطبق ( تكتب ) جميع ( أو معظم ) الأمثلة - التي سوف نحلها - عندك على الجهاز و إن لم تفعل ذلك فأنا أؤكد لك أنك لن تفهم شيئاً .. و أنا أقصد بذلك من يكتفي بالقراءة فقط .. فلن تكتسب المهارة التي نريدها إلا بكتابة أكبر عدد ممكن المسائل و البرامج .. و هذا الأمر يؤكده جميع مدرسي البرمجة .. و سيكون لدينا مثال عملي واحد على الأقل في كل درس .

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

      5 – إن جميع هذه تطبيقات التي سنكتبها هي عبارة عن تطبيقات وحدة التحكم ( Consol ) و هي شبيهة بتطبيقات الدوس .. و لتجربة الأمثلة عليك كتابة المثال في ملف مصدري Source File ( انظر فقرة الملفات المستخدمة ) و من ثم قم بترجمته و بنائه ( انظر فقرة الإختصارات ) .. حيث أن الأمثلة لن تعمل كتطبيق مستقل و لكن يجب تشغيلها من البرنامج Microsoft Visual C++ 6 أو Borland C++ Builder .. و سنستخدم نحن الأول .. و من أجل التوضيح عن كيفية واجهة الأمثلة فانظر إلى الصورة :


      6 – ملاحظة خاصة / أشهد الله تعالى بأني بريء من أي استعمال لهذه اللغة غير شرعي لا يرضي الله قام به أحد المتعلمين أو القارئين لهذا الموضوع .. فأنا لا أعلم ما في أنفسكم .. فلا تأتني يوم القيامة و تقول لله بأني قد أغويتك أو كنت السبب في ذنبك .. و الله يعلم نيتي و هدفي من هذا الموضوع كله و هو على ما أقوله شهيد .. و أتمنى أن لا يتم استخدام هذا العلم في ذلك .. لأنها أداة قد تستخدم في الجانب الإيجابي أو السلبي .

      7– أخيراً ... أشكر من قام بتعليمي هذه اللغة و ساهم في دعمي لتعلمها و لن أنسى موقفه معي ما حييت .

      :: مصطلحات ::

      يجب أن تعرف بعض الأمور قبل أن تبدأ :

      1 – Compiler : و هو المترجم الذي يقوم بقراءة برنامجك و يحوله إلى اللغة التي يفهمها و يجب أن تعرف أن هذه العملية تتم سطراً سطراً .. أي أن المترجم إذا وجد خطأ في برنامجك فسيتوقف عند السطر الذي يحتوي هذا الخطأ .. و بإمكانك طبعاً معرفة الخطأ ( في الفقرة التالية ) .

      2 – Linker : و هو الذي يقوم بوصل المكتبات أو الملفات .. إلخ ببرنامجك .. فأحياناً سوف تجد أن هناك خطأ في Linker فبذلك تعرف بسهولة أين الخطأ .

      :: إختصارات ( أزرار ) ::

      هذه بعض الإختصارات التي سنتعامل معها حين كتابة البرامج :

      1 – F7 : لكي تقوم بعملية بناء التطبيق ( Build ) و لمعرفة أخطاء برنامجك .. حيث أن الأخطاء ستظهر في نافذة ( Output ) في الأسفل .. error لعدد الأخطاء التي وجدت و warning من أجل التنبيه باحتمال وقوع خطأ في حالة معينة .. فإن لم يجد المترجم أخطاء فستجد برنامجك ضمن مجلد Debug في الملف الذي أنشأت به مشروعك .

      2 – F4 : لمعرفة الأخطاء التي ظهرت نتيجة عملية البناء ( Build ) .. و تستطيع الانتقال بين الأخطاء بالضغط أيضاً على F4 .

      3 – Ctrl + F5 : لتشغيل التطبيق و تجربته و الوقوف عند آخر سطر بكتابة جملة ( Press Any Key to Continue ) .. و فائدتها أن ترى النتائج و ما ظهر على الشاشة .

      4 – F5 : نفس الوظيفة السابقة لكن لن يتم الوقوف في النهاية و سوف يغلق التطبيق بعد الإنتهاء من ترجمته ( تنفيذه ) .

      5 – F10 و F11 : من أجل عملية التنقيح و التتبع ( Debug ) .. فعند استخدامهما تستطيع تتبع قراءة برنامجك مع المترجم سطرا سطراً .. و عندها ترى كيفية الدخول إلى التوابع و معرفة قيم المتغيرات خطوة خطوة و لهذه العديد من النوافذ سنأخذ بعضاً منها فيما بعد .. و هذه الطريقة مفيدة جداً لمعرفة مكان الخطأ و متى أخذت المتغيرات قيماً خاطئة .. و ماهي القيم التي أخذتها هذه المتغيرات .

      :: الملفات المستخدمة للكتابة ::

      سنأخذ نوعين من الملفات و ستسطيع إنشاءهم من File >> New ثم اختر قائمة Files :

      1 – Source File : و هي الملفات المصدرية ( الرئيسية ) الخاصة بكتابة برنامجك و سوف نكتب جميع الأوامر هنا ( مبدئياً ) ثم نتعلم كيفية استخدام Header File .

      2 – Header File : هي ملفات رأسية لكتابة رؤوس التوابع و الكائنات و غير ذلك و يمكن أن نطلق عليها اسم المكتبات .. فهي تحتوي على أوامر و أجزاء معينة تستدعى من قبل Source File .. ستتوضح الفكرة أكثر عن كيفية إنشاء هذه الملفات مع الأمثلة و لكن مبدئياً عليك معرفة أنها عبارة عن مكتبات جاهزة سواءً أنت أنشأتها أم شركة Microsoft .

      :: النوافذ ::

      1 – WorkSpace : و هي موجودة على يسار الشاشة .. هذه النافذة تظهر لك قائمتين الأولى File View و الثانية Class View .. الأولى من أجل عرض جميع ملفات برنامجك من ملفات مصدرية ( cpp. ) أو رأسية ( h. ) أو أي ملفات أخرى كالمصادر أو الموارد ( Resource File ) .
      أما القائمة الثانية فهي من أجل عرض جميع أجزاء برنامج من توابع .. و كائنات .. و أعضاء هذه الكائنات من توابع و بيانات ( متغيرات ) و غير ذلك .. و باستطاعتك الإنتقال فوراً لمكان التابع أو أي جزء من برنامجك بالضغط عليه فقط .

      2 – Output : موجودة في الأسفل .. لمعرفة أخطاء برنامجك ( شرحنا فكرتها ) .

      3 – Debug Windows : هذه النوافذ من أجل عملية التنقيح و التتبع .. سنأخذها لاحقاً .

      ----------------------------------------
      لا إله إلا الله
      مشروع لتعليم أساسيات لغة الـ ++C :
      -
      موضوع لتعليم الفيجوال بيسك 6 :

    2. #2
      التسجيل
      11-04-2002
      الدولة
      سوريا
      المشاركات
      760
      المواضيع
      76
      شكر / اعجاب مشاركة

      مشاركة: :: مشروع لتعليم أساسيات C++ :: موضوع الدروس

      الأن مرحباً بك في عالم البرمجة خذ نفساً عميقاً و استعن بالله ثم اقرأ بتركيز .

      ---------- ---------- ---------- الدرس الأول ---------- ---------- ----------
      اليوم : السبت ... التاريخ : 29 / 1 / 2005

      :: بنية و مكونات اللغة ::

      1 – المعرّفات ( Identifier ) :

      هي عبارة عن أسماء تعرفها و تضعها في برنامجك و قد تكون :
      - متغيرات ( Variable ) .
      - ثوابت ( Constant ) .
      - أسماء لتوابع .
      - أسماء كائنات ( Calsses ) .

      و لكن هناك شروط لتسمية هذه الأشياء و هي كالتالي :
      أ – أن يبدأ الاسم بحرف أبجدي أو ( _ ) و أن لا يبدأ برقم .
      ب – أن لا توجد فراغات بين الاسم .
      ج – أن يكون طوله كحد أقصى 64 حرف .
      د – أن لا يحتوي على رموز أو كلمات خاصة باللغة مثل ( const , float ) و أعتقد أن عدد هذه الكلمات 26 .
      هـ - يفضل استخدام أسماء تدل على وظيفة هذا الاسم .

      2 – المتغيرات ( Variable ) :

      هي أسماء تحجز لمواقع في الذاكرة .. تحمل قيمة يمكن أن تتغير أثناء عمل البرنامج . مثلاً / إذا عرفنا متغير A و أعطيناه قيمة في بداية البرنامج و لتكن 5 .. فإننا نستطيع تغيير هذه القيمة إلى 10 مثلاً في أي مكان من البرنامج .

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

      أمثلة على المتغيرات /
      كود:
      int a;
      float b5;
      bool fine;
      قاعدة 2 / لتعريف متغير .. نضع نوع المتغير أولاً ثم اسمه ثم الفاصلة المنقوطة ( انظر الفقرة رقم 4 لمعرفة الأنواع ) و من الممكن إعطاء قيمة ابتدائية أيضاً .. مثال :
      كود:
      int a = 5;
      قاعدة 3 / يمكن تعريف عدة متغيرات معاً من نفس النوع بحيث تفصل بين كل متغير و أخر فاصلة .. مثال :
      كود:
      int a,b,c;
      3 – الثوابت ( Constant ) :

      نفس المتغيرات و لكن قيمتها لا تتغير طوال فترة عمل برنامجك .. و نضع كلمة const لتعريفها قبل نوع هذا الثابت .. و يجب أن تضع قيمة عند تعريف الثابت عن طريق علامة يساوي ( = ) .
      أمثلة على الثوابت /
      كود:
      const int a = 5;
      const float b = 5.5;
      حيث أن a و b ثوابت .

      4 – الأنواع ( Types ) :

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

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

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

      أنواع رقمية ( صحيحة ) :
      - int : لتخزين قيم عددية يصل أقصى عدد يمكن أن تحمله إلى 2.148.000.000 .
      - long int : نفس int و لكن يأخذ قيم أكبر .
      - unsigned int : نفس int و لكنه لا يأخذ قيم سالبة و لكن يأخذ قيم موجبة أكبر تصل إلى 4.300.000.000 .
      و ممكن أن نضع أيضاً الكلمة unsigned قبل النوع long int ليصبح عدد صحيح طويل موجب .


      أنواع رقمية ( حقيقية ) :
      - float : لتخزين أعداد حقيقية ذات فواصل عشرية .
      أمثلة على أعداد حقيقة / 2.5 .. 6.3 .. 9.0 .. و إذا لم يكن هناك عدد عشري فنضع صفر ليدل على أن العدد هو عدد حقيقي .

      - double : نفس float و لكن يأخذ قيم أكبر .

      أنواع منطقية :
      - bool : و هو النوع الوحيد من أجل هذه القيم و يحمل قيمتين هما : true أو false .. و هذا النوع يفيدنا كثيراً في أوامر الشرط و من أجل عمليات الإختبار ( سنرى أمثلة توضح ذلك ) .

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

      5 – العمليات و المعاملات ( Operators ) :

      - عمليات حسابية : ( * الضرب ) و ( - الطرح ) و ( / القسمة ) و (% باقي القسمة ) .

      أمثلة /
      كود:
      n = a * b;
      m = 9 – b;
      h = 2.0 / f;
      t = k % a;
      ملاحظة / دائماً حاول استخدام هذه العمليات لأنواع متشابهة من المتغيرات تجنباً للأخطاء و انتبه إلى حجم الناتج و حدد نوعه على حسب هذا الناتج الذي تتوقعه .. و إذا كنت تريد تريد استخدام عملية باقي القسمة مثلاً لنوعين مختلفين فاستخدم التالي :
      بفرض أن a عدد صحيح و b عدد حقيقي و c عدد حقيقي أيضاً .
      كود:
      c = (float)a % b;
      لقد وضعنا النوع float بين قوسين قبل المتغير a .. و بذلك سيتعامل المترجم ( Compilor ) مع هذا المتحول على أنه من النوع float و لكن بشكل قسري و مؤقت و لن يتغير نوع هذا المتغير إلى float و لكن كما قلت سينظر إليه في هذا السطر فقط على أنه float .

      الأن سنأخذ بعض المعاملات المهمة فقط و هي كالتالي :
      كود:
      pow(x, y)
      sin(x)
      cos(x)
      abs(x)
      sqrt(x)
      حبث أن الأول للأس .. و الثاني لجيب الزاوية .. و الثالث لجيب تمام الزاوية .. و الرابع للقيمة المطلقة و الخامس للجذر التربيعي .. بحيث أن x هي القيمة التي نريد حساب عملية عليها .. و بالنسبة إلى المعامل pow فإن x تمثل الأساس و y تمثل الأس .

      أمثلة /
      كود:
      y = pow( 5 , 3 ); // 125
      z = sqrt( b ); // b = 9 z = 3
      h = abs(-6); // h = 6
      ملاحظة 1 / هذه المعاملات تحتاج إلى ضم المكتبة الخاصة بها و هي المكتبة math.h سنتعلم في نهاية هذا الدرس كيفية إضافة المكتبات إلى مشروعك .
      ملاحظة 2 / من أجل ( // ) و ما بعدها .. تستخدم هذه العلامة من أجل التعليقات التي تحب أن تضيفها .. و فائدتها تكمن فيما إذا صممت برنامج و بعد مدة حاولت الرجوع إلى هذا البرنامج و قراءته فستفيدك هذه التعليقات التي أضفتها في فهم البرنامج أو حتى ممكن أن تستفيد منها في فهم برامج غيرك بحيث يوضح المبرمج بواسطتها هدف معين يريد الوصول إليه من تعليمة أو أمر معين .. و بالطبع وضعها اختياري ( انظر فقرة القواعد العامة ) .
      ملاحظة 3 / يجب إسناد هذه المعاملات إلى متغيرات ففي الأمثلة السابقة سيخزن الناتج في هذه المتغيرات .. حيث أن كتابتها على سطر لوحدها سيسبب خطأ .. و سنعرف لماذا يجب إسناد هذه المعاملات إلى متغيرات عند دراستنا للتوابع التي تعيد قيمة .

      اختصارات على العمليات :
      1 – ( ++C ) : تعني أضف واحد على المتغير C .. ( هل عرفت من أين أتت تسمية اللغة .. حيث قاموا باستخدام هذا الرمز ليوضحوا أن هذه اللغة هي لغة مطورة عن لغة C ) .. فمثلاً إذا كانت قيمة C تساوي 10 فتصبح 11 .. و هذا الرمز يقابل العملية التالية :
      كود:
      c = c + 1;
      2 – ( --D ) : تعني اطرح واحد من المتغير d .. و تقابل العملية التالية :
      كود:
      d = d – 1;
      3 – إضافة أي عملية قبل رمز ( = ) :
      أمثلة /
      كود:
      y += 2; // y = y + 2
      y -= 5; // y = y – 5
      y *= 6; // y = y * 6
      y /= 9; // y = y / 9
      y %= 8; // y = y % 8
      و المثال الأخير يعني : قسّم قيمة y على 8 و ضع باقي القسمة في نفس المتغير y .. و هذا يعني أن قيمة y القديمة ستمسح و تخزن بدلاً منها قيمة باقي القسمة .
      ملاحظات /
      1- من الممكن أن تستخدم ما يلي : i++ أو ++i .. و الفرق سوف نأخذه في المثال العملي في نهاية هذا الدرس .
      2- من الممكن أن تستخدم العملية c++ أو c-- في المتغيرات الحرفية char .. مثال :
      كود:
      char a = 'm';
      a++;
      عندها تصبح a تحمل الحرف n و هكذا .. و هذا يعني الانتقال إلى الحرف التالي .

      - عمليات منطقية : و تستخدم في الشرط و هي كالتالي :
      ( ! ) للنفي و ( == ) للمساواة و ( =! ) لعدم المساواة و ( > و < ) لأكبر من و لأصغر من .. و ( >= و <= ) لأكبر من أو يساوي و لأصغر من أو يساوي .. و ( && ) تعني ( و ) .. ( || ) تعني ( أو ) .
      أمثلة /
      كود:
      If ( x==5 )
      If ( y!= 10 )
      If( x==5 && y >= 6 )
      If( x < 60 || y==20 )
      If( !(x=10) ) // equal of : if( x!=10 )
      قاعدة / الشرط لا ينتهي بفاصلة منقوطة .. و سنأخذ الشرط و التكرار في الدرس القادم إن شاء الله .
      لا إله إلا الله
      مشروع لتعليم أساسيات لغة الـ ++C :
      -
      موضوع لتعليم الفيجوال بيسك 6 :

    3. #3
      التسجيل
      11-04-2002
      الدولة
      سوريا
      المشاركات
      760
      المواضيع
      76
      شكر / اعجاب مشاركة

      مشاركة: :: مشروع لتعليم أساسيات ++C :: موضوع الدروس

      6 – الإسناد :

      هو إعطاء قيمة لمتحول و بمعنى آخر هو تخزين قيمة معينة في موقع المتحول في الذاكرة .

      أمثلة /
      كود:
      x = 10;
      x = y; // x takes a value
      x = (y+1) / b;
      قاعدة / دائماً المتحول الذي على اليسار هو الذي يأخذ القيمة من الأخر .

      أخطاء برمجية /
      كود:
      a = b+2 = c;
      و لكن ممكن أن نضع :
      كود:
      int a,b;
      int c = a = b = 4;
      حيث سيأخذ كل من a و b و c القيمة 4 .

      7 – القراءة و الكتابة ( cout , cin ) :

      هذه الأوامر تحتاج لإضافة مكتبتها الخاصة و هي iostream.h .. و تلفظ i لوحدها و تعني Inbut و O لوحدها و تعني Output و من ثم Stream .. بالمختصر تعني قنوات الدخل و الخرج .. انظر المثال التطبيقي لمعرفة كيفية استخدام هذه المكتبة و كيفية ضمها إلى مشروعك .

      - cout : من أجل الإظهار على الشاشة و تلفظ c ثم out .. و تستخدم لكتابة قيم المتغيرات على الشاشة أو أي قيم معينة أخرى .. و هي كالتالي :
      1 – قيم حرفية أو رقمية .. مثال :
      كود:
      cout << 7;
      cout << "Hello";
      2 – قيم المتغيرات و المتحولات .. مثال :
      كود:
      cout << a;
      cout << b;
      3 – عبارة حسابية .. مثال :
      كود:
      cout << (a+b) / 2;
      cout << a-b;
      و لـ cout عدة قواعد :
      1 – يجب استخدام التوجيه ( >> ) بعد كل عملية إخراج .. مثال :
      كود:
      cout << a << b << c;
      2 – ممكن أن نستخدم الأمر endl و يعني ( End Line ) من أجل نزول سطر على الشاشة .. مثال :
      كود:
      cout << 5 << endl;
      3 – ممكن أن نستخدم الأوامر التالية : "n\" و "t\" .. حيث أن الرمز الأول يؤدي نفس عمل endl أما الثاني فيعمل على الإزاحة إلى اليمين بمقدار 7 أحرف ( على الشاشة ) .
      4- من أجل الفهم .. انظر إلى اتجاه هذا التوجيه .. إذا كان اتجاهه يساراً ( إلى الخارج ) فهذا يعني أن القيم التي على اليمين سوف تخرج على الشاشة .. أما في cin فسنستخدم التوجيه ( << ) و اتجاهه إلى اليمين ( إلى الداخل ) و هذا يعني أننا سوف ندخل قيم على المتحولات الموجودة على اليمين .. إن شاء الله تكون الفكرة وضحت .

      - cin : من أجل إعطاء المستخدم ( و ليس المبرمج ) قيم لمتحولات معينة عن طريق شاشة الإظهار .. و تستخدم للمتحولات المعرفة فقط .. و تلفظ c لوحدها ثم in .. مثال :
      كود:
      cin >> a;
      cin >> b >> c;
      لنشرح المثال الثاني : سوف يتوقف البرنامج و يظهر وميض من أجل أن يدخل المستخدم قيمة .. و بفرض أن b و c متحولات عددية .. فإذا أدخلنا 4 ثم مسافة ثم 5 فستأخذ b القيمة 4 و c القيمة 5 .

      ملاحظة / لا يمكن استخدام cin مع الثوابت .. لأنه كما قلنا أن الثوابت لا تتغير قيمتها أبداً طوال فترة عمل البرنامج .

      :: قواعد عامة ::

      قاعدة عامة 1 / أي سطر من الأوامر ( Code ) يجب أن ينتهي بفاصلة منقوطة ( ; حرف الكاف ) .. ما عدا بعض الأماكن ستعرفها في هذه الدروس ( أخذنا الشرط في هذا الدرس ) .. و هي تعني انتهاء سطر الأوامر .
      قاعدة عامة 2 / نستخدم أقواس المجموعات ( } و { ) في عدة أماكن و هي كالتالي :
      لتحديد بداية و نهاية كتلة معينة مثل التوابع و الكائنات و المرقمات ( enum ) .. و في if الشرطية إذا كنت تريد تنفيذ مجموعة من الأوامر عند تحقيق شرط معين .. و في إعطاء قيم ابتدائية للمصفوفات .. سنأخذ كل تلك الأمور .

      قاعدة عامة 3 / الحاصرات الفردية ( ' حرف الطاء ) و المزدوجة ( " حرف الطاء أيضاً و لكن مع زر Shift ) .. هذه الحاصرات من أجل المتغيرات النصية ( الحرفية ) و ليست الرقمية فهناك فرق لذلك استخدم هذه الحاصرات دائماً و أبداً مع القيم الحرفية .. فإذا كنت تريد تخزين قيم حرفية (اسم مثلاً ) في مصفوفة ( سنأخذ هذا الموضوع لاحقاً ) و كان الاسم يحتوي على أكثر من حرف فاستخدم الحاصرات المزدوجة أما إذا كانت القيمة عبارة عن حرف واحد فاستخدم الحاصرات الفردية .. و بشكل عام يمكننا القول بأن هذه الحاصرات تستخدم في :
      1 – إعطاء قيم حرفية ابتدائية أو عند إسناد هذه القيمة للمتغيرات الحرفية .. مثال :
      كود:
      char a = 'G';
      char b;
      b = 'H';
      حيث أننا أعطينا المتغير a قيمة ابتدائية ( أي عند التعريف ) و هو الحرف G .. و قمنا بإسناد القيمة H للمتغير b .
      2 – لكتابة جمل على الشاشة باستخدام قنوات الدخل و الخرج iostream.h .. مثال :
      كود:
      cout << "Hello";
      أما لطباعة أرقام على الشاشة فنكتب الرقم بدون حاصرات :
      كود:
      cout << 4;
      قاعدة عامة4 / ( // ) من أجل التعليقات .. فأي جملة تضعها قبل هذه العلامة فلن يتم قراءتها من قبل المترجم بل سيتجاهلها .. و هناك علامة أخرى و هي ( */ ) للبداية و ( /* ) للنهاية ..مثال:
      كود:
      /* int a;
      a =5;*/ 
      
      // int a;
      قاعدة عامة 5 / لغة ++C تفرق بين الحرف الصغير و الكبير .. لذلك فالمتغير a يختلف عن المتغير A .. مع أنهما نفس الحرف و لكن الأول صغير و الثاني كبير .. و بالتالي هما متغيران مختلفان .. و على العموم حاول مبدئياً كتابة متغيراتك بالأحرف الصغيرة .

      قاعدة عامة 6 / إن الكلمات الخاصة باللغة و عددها حوالي 26 كلمة و التي تظهر باللون الأزرق .. يجب أن تكون بالأحرف الصغيرة .. مثل / const , if , struct , class , #include , for , while , int , float , double و غيرها .

      قاعدة عامة 7 / إذا كان سطر الأوامر الذي تكتبه طويلاً تستطيع أن تضعه على السطر التالي دون أية مشاكل أو أن تضع مسافات بين الأوامر و التوجيهات .. مثال :
      كود:
      cout <<b/a << "Hello"
      << z << 'h' << 45;
      و لكن بشرط أن لا تفصل بين كلمات الأوامر و أسماء المتغيرات فمثلاً لو كان عندنا متغير student فلا يجوز أن تضع التالي :
      كود:
      int student;
      stud ent = 5;
      قاعدة عامة 8 / تستطيع أن تجمع بين أكثر من سطر و تضعهم في سطر واحد .. بحيث يفصل بين كل سطر فاصلة منقوطة .. مثال :
      كود:
      cout << "Enter number 1 : "; cin >> a;
      قاعدة عامة 9 / هناك مسائل سوف تجد أكثر من طريقة لحلها .. لذلك استخدم الطريقة التي توفر أقل كمية من حجز المتغيرات في الذاكرة و أسرعها .
      لا إله إلا الله
      مشروع لتعليم أساسيات لغة الـ ++C :
      -
      موضوع لتعليم الفيجوال بيسك 6 :

    4. #4
      التسجيل
      11-04-2002
      الدولة
      سوريا
      المشاركات
      760
      المواضيع
      76
      شكر / اعجاب مشاركة

      مشاركة: :: مشروع لتعليم أساسيات ++C :: موضوع الدروس

      :: أمثلة تطبيقية ::

      أخيراً دخلنا إلى القسم العملي .. سأضع هنا ثلاثة أمثلة حول ما أخذناه في القسم النظري .

      ملاحظة / لتشغيل الأمثلة أنشىء ملف مصدري cpp. ثم اكتب المثال .. و بعد ذلك قم ببناء التطبيق بواسطة F7 و بعد الإنتهاء من عملية البناء و التأكد من عدم وجود أخطاء اضغط على Ctrl + F5 .. و إذا وجدت أية أخطاء فاضغط على F4 لمعرفتها و أخبرني بالأخطاء التي ظهرت عندك إن وجدت .. لأن الأمثلة صحيحة و قد جربتها .

      المثال 1 /

      سنقوم بجعل المستخدم يدخل عددين صحيحين و من ثم نقوم بطباعة مجموعهما .. لذلك دعونا نناقش متطلبات البرنامج ( يجب أن تفعل ذلك عند حل كل مثال أو أي مسألة طبعاً مع الوقت ستصبح هذه الأمور بديهيات ) :
      1 - كم متغير نحتاج ؟ ثلاثة .. الأول من أجل تخزين العدد الأول و الثاني من أجل تخزين العدد الثاني و الثالث من أجل المجموع .
      2 – ما هي الأوامر التي نحتاجها ؟ أوامر الدخل و الخرج فقط .
      3 – ما هي المكتبات التي نحتاجها ؟ iostream.h لأننا نريد استخدام cout و cin .
      كود:
      #include <iostream.h>
      void main()
      {
          int a, b, sum;
          cout << "Enter Number 1 : ";
          cin >> a;
          cout << "Enter Number 2 : ";
          cin >> b;
          sum = a + b;
          cout << sum << endl;
      }
      شرح المثال :

      1 – في السطر الأول قمنا بإضافة المكتبة iostream.h إلى مشروعنا .. و ذلك بواسطة الأمر #include .. و العلامة # عبارة عن توجيه خاص بالمترجم و هو بذلك يفهم الأمر include .. و بشكل عام إذا كنت تريد إضافة أي مكتبة لمشروعك فاستخدم الأمر #include ( سنستخدم هذا الأمر كثيراً ) و بعد ذلك ضع اسم المكتبة بين علامتي ( < > ) .
      قاعدة 1 / إذا كانت المكتبة من المكتبات الجاهزة فاستخدم الأقواس السابقة ( < > ) .. أما إذا كانت المكتبة أنت من قمت بكتابتها فهناك طريقتين لضمها سنأخذ واحدة و هي أن تضع المكتبة ( h. ) في نفس مجلد مشروعك يعني في نفس المكان الموجود فيه التطبيق ( exe. ) و من ثم ضع بدلاً من الأقواس ( < > ) ضع الحاصرات المزدوجة ( " " ) .. مثال :
      كود:
      #include "MyLib.h"
      قاعدة 2 / لا توجد فاصلة منقوطة في نهاية سطر إضافة المكتبات .

      2 – في السطر الثاني عرفنا تابع اسمه main ( سنأخذ التوابع فيما بعد ) و هو التابع الأساسي الذي سيبدأ تنفيذ البرنامج به .. و يحب أن يحتوي كل تطبيق على هذا التابع .. و لكن ما معنى الكلمة التي تسبق اسم التابع ؟ سنأخذها عند دراسة التوابع لذلك احفظها هكذا مبدئياً .
      قاعدة 1 / يجب أن يحتوي كل مشروع على تابع main واحد فقط بحيث سيبدأ تنفيذ برنامجك من أول سطر فيه .
      قاعدة 2 / يمكن أن يحتوي مشروعك على العديد من التوابع .
      قاعدة 3 / لتعريف تابع نضع نوعه ( احفظ الأن void ) ثم اسم التابع ثم قوسين ( سنعرف ما فائدة هذين القوسين في درس التوابع ) .. و من ثم نضع أقواس المجموعات ( { } ) لتحدد جسم هذا التابع و لتحديد بدايته و نهايته .
      قاعدة 4 / لا توجد فاصلة منقوطة في نهاية سطر تعريف التابع أو في نهاية أسطر أقواسه .

      3 – في السطر الثالث عرفنا ثلاثة متغيرات صحيحة a لتخزين العدد الأول و b لتخزين العدد الثاني و sum للعدد الثالث .. و طبعاً تستطيع افتراض ما تريد من الأسماء و تخزين الأعداد بأي متغيرات تريد .. فمثلاً تستطيع جعل العدد الأول يخزن في المتغير b و العدد الثاني يخزن في المتغير a عن طريق التبديل بين a و b في أوامر الإدخال cin .

      4 – بعد ذلك قمنا بكتابة جملة على الشاشة تخبر المستخدم بأننا نريد منه إدخال العدد الأول .. فعند إدخاله قيمة ستحفظ في المتغير a و ذلك بعد الضغط على زر Enter .. و من ثم سنطلب منه إدخال العدد الثاني و سنعطي هذه القيمة لـ b .

      5 – فيما بعد أسندنا مجموع المتغيرين a و b إلى المتغير sum ( أي خزنا ناتج عملية الجمع في المتغير sum ) .

      6 – بعد ذلك طبعنا ناتج عملية الجمع على الشاشة مع النزول سطر واحد في النهاية لكي تظهر جملة Press any Key to Continue على سطر لوحدها ( لأن هذه الجملة تظهر عند في نهاية تنفيذ التطبيق دائماً ) لذلك جرب عدم وضع endl في نهاية أمر الإخراج و انظر إلى النتيجة .

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

      المثال 2 /

      سنتعرف على أهمية استخدام الثوابت في المصفوفات و الحلقات في الدروس القادمة ..و الأن سنأخذ مثالاً على بعض المعاملات و الإختصارات .
      في هذا المثال نريد من المستخدم أن يدخل عدد صحيح فنحسب له جذره و مربعه و قيمته المطلقة و كل جواب نريده على سطر .. فيكون مناقشة الحل كالتالي :
      1 – كم متغير نحتاج ؟ واحد .. لماذا ؟ لأنه لا فائدة من تخزين كل عملية في متغير انظر الشرح لتعرف لمـاذا .
      2 – ما هي الأوامر التي نحتاجها ؟ أوامر الدخل و الخرج بالإضافة إلى المعاملات الجاهزة للجذر التربيعي و التربيع و القيمة المطلقة .

      ملاحظة مهمة / انظر إلى العملية التي تريدها ( الجذر التربيع مثلاً ) .. هل هي موجودة ضمن مكتبة جاهزة أم لا ؟ إذا كانت موجود فالحمدلله .. أما إذا لم تكن موجودة فيجب عليك كتابتها بنفسك عن طريق التوابع .. و نصيحتي لك أن لا تحاول أن تعيد كتابة معاملات أو عمليات جاهزة ضمن مكتبات اللغة لأنك ستضيع وقتك و ستكون النتيجة بمستوى أقل فعالية من العمليات و المكتبات الجاهزة .. إلا إذا كنت تريد كسب خبرة من كتابة هذه المعاملات و العمليات .. و سنتعلم كيفية كتابة بعض هذه المعاملات في موضوع التوابع إن شاء الله .
      3 – ما هي المكتبات التي نحتاجها ؟ iostram.h لقنوات الدخل و الخرج .. math.h من أجل العمليات و المعاملات .
      كود:
      #include <iostream.h>
      #include <math.h>
      void main()
      {
          int a;
          cout << "Enter One Number : ";
          cin >> a;
          cout << "Sqrt = " << sqrt(a) << endl
          << "Pow = " << pow(a, 2) << endl
          << "Abs = " << abs(a) << endl;
      }
      شرح المثال :

      لماذا وضعنا متغير واحد و لم نضع أربعة ؟ ما دمنا قادرين على بناء هذا المثال بواسطة متغير واحد فما هو الأفضل حجز مكان في الذاكرة لأربع متغيرات أم لمتغير واحد ؟ ( انظر القاعدة العامة 9 ) .. لذلك تجنب دائماً ( إن استطعت ) الإكثار من تعريف المتغيرات التي لا فائدة منها .. لأنه إذا كان برنامجك كبيراً فسيصبح سيئاً و بطيئاً .. و نحن نهدف إلى سرعة التطبيق لا إلى تبطيئه .. و لكن بما أنكم ما زلتم في البداية فلا خوف في ذلك مبدئياً لأن أمثلتنا صغيرة الحجم .. نعود للشرح :
      1 – قمنا أولاً بإضافة المكتبتين iostram.h و math.h إلى برنامجنا من أجل استخدام الأوامر التالية :
      كود:
      pow(x, y)
      sqrt()
      abs()
      cin
      cout
      2 – وضعت بعد ذلك التابع الأساسي main .
      3 – عرّفنا متغير من النوع الصحيح و هو الذي سيخزن الرقم الذي سيدخله المستخدم .
      4 – طلبنا من المستخدم إدخال هذا العدد .. و من ثم وضعناه في المتغير a .
      5 – قمنا بطباعة عبارة على الشاشة لكل عملية لكي توضح معنى الرقم الذي سوف يأتي بعدها .. و من ثم وضعنا العملية ( راجع فقرة قنوات الدخل و الخرج cout ) ثم نزلنا سطراً و هكذا .
      ملاحظة 1 / انتبه إلى مكان الفاصلة المنقوطة في آخر عملية طباعة على الشاشة .. فقط في النهاية و هي تعني نهاية أمر الإخراج cout .. و لاحظ أننا نستطيع الكتابة على سطر آخر طالما أننا لم نضع الفاصلة المنقوطة أو نستطيع حتى المتابعة على نفس السطر و لكن سيصبح السطر طويلاً بذلك .
      ملاحظة 2 / استخدمنا أمر cout واحد فقط .. فليس هناك فائدة من كتابتها أكثر من مرة من أجل كل عملية .
      ملاحظة 3 / استخدمنا endl من أجل عملية تنظيم الإجابات بوضع كل جواب على سطر .

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

      المثال 3 /

      نريد من المستخدم إدخال حرف فنطبع له الحرف الذي يليه .. فتكون مناقشة الحل كالتالي :
      1 – ماهي المتغيرات التي نحتاجها ؟ واحد فقط .. و هو متغير حرفي من النوع char .
      2 – ما هي الأوامر التي نحتاجها ؟ قنوات الدخل و الخرج بالإضافة إلى بعض العمليات .
      3 – ما هي المكتبات التي نحتاجها ؟ iostream.h فقط .

      كود:
      #include <iostream.h>
      void main()
      {
          char a;
          cout << "Enter a Letter : ";
          cin >> a;
          cout << ++a << endl;
      }
      شرح المثال :

      سأشرح فقط ( a++ ) لأن بقية مشروحة في الأمثلة السابقة .
      1 – قلنا بأن هذه العملية تعني أضف واحد إلى المتغير a إذا كان متغير عددي .. أما إذا كان متغير حرفي فستعطينا هذه العملية الحرف الذي يلي الحرف الذي يحتويه a .. و لكننا وضعنا علامتي ++ قبل المتغير و ليس بعده .. و عمل آخر سطر هو كالتالي :
      أوجد الحرف الذي يلي حرف a و خزنه في a ثم اطبعه على الشاشة .. حيث أننا نقرأ من اليسار إلى اليمين .
      2 - أما لوكانت العملية ++ بعد المتغير a فشرح آخر سطر هو كالتالي :
      اطبع قيمة a ثم أوجد الحرف الذي يلي حرف a و خزنه أيضاً في a .

      فلو فرضنا أن المستخدم أدخل الحرف L مثلاً .. ففي الحالة الأولى سيظهر على الشاشة الحرف M .. أما في الحالة الثانية فسيظهر الحرف L نفسه .. جرب العملية الثانية بنفسك و شاهد النتائج .

      ---------- ---------- ---------- نهاية الدرس الأول ---------- ---------- ----------

      ملاحظة أخيرة / من أجل عملية تنظيم و ترتيب برنامجك .. قم ضمن أي كتلة ( جسم ) تابع أو ضمن جمل if الشرطية و غيرها .. بعمل إزاحة عن طريق الزر Tab قبل بداية أي أمر .. انظر الأمثلة .

      في هذا الدرس لا يوجد واجب .. فقط قم بحل الأمثلة العملية التي كتبناها و حاول قراءة الدرس أكثر من مرة و بتركيز .. آمل أن يكون الدرس سهل و مفهوم .. و لمن عنده أي استفسار فأنا جاهز .. أريد تعليقاتكم على الدرس و رأيكم به و بصعوبته أو سهولته .. بالتوفيق .
      التعديل الأخير تم بواسطة Wolf Sniper ; 29-01-2005 الساعة 10:14 PM
      لا إله إلا الله
      مشروع لتعليم أساسيات لغة الـ ++C :
      -
      موضوع لتعليم الفيجوال بيسك 6 :

    5. #5
      التسجيل
      25-01-2005
      المشاركات
      0
      المواضيع
      0
      شكر / اعجاب مشاركة

      مشاركة: :: مشروع لتعليم أساسيات ++C :: موضوع الدروس

      بسم الله الرحمان الرحيم

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

      اخي العزيز

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

      خصوصا ان اغلب المشاركات تقتصر على التعريف السطحي للغة البرمجة ++C

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

      وانا رايحة اديك مثال على الحكي هيدا من خلال الدرس تبعك هيدا


      كود:
      #include <iostream.h>
      void main()
      {
          int a, b, sum;
          cout << "Enter Number 1 : ";
          cin >> a;
          cout << "Enter Number 2 : ";
          cin >> b;
          sum = a + b;
          cout << sum << endl;
      اخي الكريم انا بقدرلك الجهد الي انت تبذلو واتمنى ان ربنا يوفيك كل الجزاء عليه

      وانا من خلال مدخلتي مش بحاول انقص من قيمة ما قمت به بالعكس لكن بحاول اثمن الي انت بتعلمو لاخوتي بالمنتدى

      وعلى هذا الاساس انا احب اكون بجنبك وبجنب كل واحد يحاول يعمل عمل كريم مثل ما عملت انت

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

      انا الان بحاول اترجم كتاب مبدع البرمجة بلغة ++C بجارن ستروي ستروب من الفرنسي للعربي

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

      وبعدها بيتدرج بادخال على مراح من خلال الامثلة اساسيات هذه اللغة

      وكمان لحظت ان الدروس بتعتمد على بعضها البعض وان الفهم بيتم بشكل هايل من خلال هذه المراحل والامثلة

      ومن بين المراحل الي بيها يتم تشكيل برنامج بلغة ++ C هناك نمط البرمجة المرحلية ونمط البرمجة المحورية اي

      Programmation procédurale et la Programmation moduler
      نمط البرمجة المرحلية بيحاول يفهم المبتدى الاساسيات المعمول بيها من خلال البرنامج بتعريفات وبديهيات وشروح وامثلة عبر مراحل لهيدا السبب سميت نمط البرمجة المرحلية

      اولا بيعرف الاصناف القاعدية Typ مثل
      int
      char
      flaot
      bool
      وبيعرف كمان معاملات البرمجة Operateur مثل
      ==
      =!
      >
      <
      =>
      =<
      =
      وبيحاول من خلال هذه التعريفات والعمليات المسموح بيها من خلال الدرس اعطاء مفهوم مبسط لمتعلم البرمجة
      هذا المفهوم بيكون اولي وشبه سطحي لكن مفيدا جدا لان كل عنصر من الي سبق ذكره سيتم التطرق اليه بالتفصيل عبر مختلف مراحل الدروس والامثلة القادمة
      وبهذا سيكون الرابط واضح لمفهوم ان البرمجة بلغة ++ C تمر عبر مراحل وكل مرحلة جديدة تضيف وتوسع مجال التحصيل للمرحلة التي جاءت قبلها
      انا بوعدكم المرة القادمة اني بنزل بالمنتدى الفصل الاول من الترجمة الي عملتها لهذا الكتاب
      واتمنى من كل قلبي انها رايحة تزيد في تبسيط تعلم هذه اللغة
      كما اني بطلب من الاخ الكريم ادراج مساحة مخصصة لمناقشة الدروس واثرائها بالامثلة التطبيقية والحلول
      قبل طرحها ونشرها بامنتدى هيك بيكون شكل تقديم الدروس احترافي اكثر منو عرض دروس مش راح يفهم المبتدى اشي
      والله شاهد اني بحاول اساهم مع اخوتي بهيدا المنتدى تطوعا لوجهه وليس استعراض

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

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

    6. #6
      التسجيل
      03-09-2003
      الدولة
      d=(n_n)=b دار بو خليفة d=(n_n)=b
      المشاركات
      1,096
      المواضيع
      62
      شكر / اعجاب مشاركة

      مشاركة: :: مشروع لتعليم أساسيات ++C :: موضوع الدروس

      ::

      ::

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

      ممنوع الرد فب هذا الموضوع و لو شو كان الرد!!!!!!

      سيتم ابلاغ المشرف...و بسرعة هاي المرة

      لأخوي SOU (لول عالسريع أكتب ) أرجوك امسح ردي هذا و الرد إلي قبلي بسرعة

      و سلامتكم.....

      ::

      ::
      ::

      ::



      "التوقيع فوق التعديل لوووووول "

      3/12/2005...."and UAE Naruto...is back again"

      من مواضيعي

      "مؤقتاً ماشي مواضيع حلوة "

      ::

      ::

    7. #7
      التسجيل
      11-04-2002
      الدولة
      سوريا
      المشاركات
      760
      المواضيع
      76
      شكر / اعجاب مشاركة

      مشاركة: :: مشروع لتعليم أساسيات ++C :: موضوع الدروس

      بسم الله الرحمن الرحيم


      :: مقدمة ::

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

      ---------- ---------- ---------- الدرس الثاني ---------- ---------- ----------
      اليوم : السبت ... التاريخ : 5 / 2 / 2005

      :: تعليمات التحكم ::

      هناك خمسة أنواع لتعليمات التحكم .. و سنأخذها كلها و هي كالتالي :
      1 – العبارة ( if ) .
      2 – العبارة ( if/else ) .
      3 – العبارة ( switch ) .
      4 – العبارة ( for ) .
      5 – العبارة ( while ) .
      6 – العبارة ( do/while ) .

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

      1 – العبارة ( if ) :

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

      قاعدة /
      كود:
      if ( condition )
          statement;
      حيث أن condition هو الشـرط و يكون النـاتج من سطر if إمـا true فينفـذ التعليمـات أو false فيتجاهلها و ينتقل للسطر التالي .. و statement هي التعليمة أو التعليمات التي ستنفذ إذا ما تحقق الشرط فقط .

      مثال 1 / لشرط ينفذ تعليمة واحدة :
      كود:
      if ( x==0 )
          cout << "Error\n";
      ملاحظة 1 / من أجل ( == ) راجع العمليات المنطقية في الدرس الأول .. لأنها تختلف عن عملية الإسناد التي تسند قيمة لمتغير .. فهنا لا يتم إسناد الصفر إلى x بل يتم إختبار قيمته هل هي الصفر أم لا .
      ملاحظة 2 / إذا كانت قيمة x تساوي الصفر أصبح الناتج true و بالتالي ينفذ تعليمة cout .. أما لو كانت x لا تساوي الصفر أصبح ناتج الإختبار false و بالتالي لن يتم تنفيذ تعليمة الإخراج .
      ملاحظة 3 / سطر if لا يحتوي على فاصلة منقوطة .

      مثال 2 / لشرط ينفذ عدة تعليمات :
      بفرض أن a هو البسط .. و b المقام
      كود:
      if ( b!=0 )
      {
          cout << "We can devide …\n";
          cout << a/b << endl;
      }
      ملاحظة 1 / إذا أردنا تنفيذ أكثر من تعليمة إذا ما تحقق الشرط فيجب وضع أقواس الكتل ( { } ) .. و هذه الأقواس سنستخدمها كثيراً في مواضيع أخرى .. مثل المصفوفات و التوابع و السجلات و الكائنات .. إلخ .
      ملاحظة 2 / في حالة القسمة على صفر .. تعرفون في الرياضيات أن القسمة على الصفر لا تجوز .. و بالتالي يجب معالجة هذا الأمر بواسطة عملية إختبار .. و إلا إن حدث و قسمت على صفر فسيحدث خطأ في برنامج و سيقفل .. حاول أن تقسم على الصفر و لاحظ النتيجة .

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

      2 – العبارة ( if/else ) :

      يتم إختبار شرط فإذا تحقق ( أي كان ناتج الإختبار true ) يتم تنفيذ مجموعة من التعليمات .. أما إذا لم يتحقق ( أي إذا كان ناتج الإختبار false ) فيتم تنفيذ مجموعة أخرى من التعليمات .

      قاعدة /
      كود:
      if ( condition )
      {
         Statement;
      }
      else
      {
          Statement;
      }
      ملاحظة 1 / وضعنا الأقواس ( { } ) لأنه سيتم تنفيذ أكثر من تعليمة في كل من if و else .. أما لو كنا نريد تنفيذ تعليمة واحدة فقط فلا نستخدم الأقواس ( { } ) .
      ملاحظة 2 / condition هو الشرط .. و statement التعليمات .
      ملاحظة 3 / لا حظ أنه لا توجد أيضاً فاصلة منقوطة بعد else .

      مثال /
      كود:
      if ( x==0 && b>=0 )
          cout << "We can divide\n";
      else
          cout << "We can not divide\n";
      ملاحظة 1 /إذا كان ناتج الإختبار true فيتم تنفيذ تعليمات if .. أما إذا كان ناتج الإختبار false فيتم تنفيذ تعليمات else .
      ملاحظة 2 / من أجل ( && ) راجع العمليات المنطقية في الدرس الأول .. و من أجل ناتج عملية الإختبار تعامل هذه العلامة و العلامة ( || ) تماماً كما في الرياضيات ( التقاطع و الإتحاد ) :
      1 – ( && ) وتعني and : إذا كان الطرف الأول و الثاني true فناتج الإختبار true فيتم تنفيذ التعليمات التي تحت if .. أما لو كان أحد طريفيها false أو كلاهما فسيكون ناتج الإختبار false و بالتالي سينتقل إلى تعليمات else .
      2 – ( || ) و تعني or : إذا كان أحد الطرفين true فناتج الإختبار true فيتم تنفيذ تعليمات if .. أما لو كان كلا الطرفين false فناتج الإختبار false و بالتالي سيتم تنفيذ تعليمات else .

      ملاحظة 3 / إذا كنت تريد استخدام شرط يحتوي على أكثر من عملية منطقية ( && أو || ) فحاول استخدام الأقواس من أجل التمييز و لأجل معرفة ناتج الإختبار ( هناك طريقة أخرى و هي أولوية العمليات ) .

      مثال /
      بفرض أن x تساوي 5 و b تساوي 10
      كود:
      if ( ( x>=0 && x<=10 ) || b<0 )
      عندها يكون ناتج الإختبار true لأن :
      1 – x تقع ضمن المجال 0 و 10 .. و بالتالي ناتج الطرف الأيسر لـ ( || ) يساوي true .
      2 – b أكبر من الصفر و بالتالي الطرف الأيمن لـ ( || ) يساوي false .
      3 – أحد الطرفين يساوي true و بالتالي ناتج الإختبار true .

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

      مثال /
      بفرض أن x تساوي 5 و y تساوي 10 و z تساوي 100
      كود:
      if ( x>=0 && x<=10 || y<0 && z>100 )
      عندها يكون ناتج الإختبار true لأن :
      1 – x تقع ضمن المجال 0 و 10 .. و بالتالي ناتج الطرف الأيسر لـ ( || ) يساوي true .
      2 – y أكبر من الصفر و z ليست أكبر من 100 بل تساوي 100 لأن هناك فرق .. و بالتالي ناتج الطرف الأيمن لـ ( || ) يساوي false .
      3 – أحد الطرفين يساوي true و بالتالي ناتج الإختبار true .

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

      قاعدة / من الممكن أن نضع أكثر من عبارة if داخل عبارة واحدة لـ if .. مثال :
      كود:
      if ( x==0 )
          cout << "X = 0 \n";
      else if ( x==1 )
          cout << "X = 1 \n";
      else if ( x>1 )
          cout << "X > 1 \n";
      و بصفة عامة نستطيع وضع عدة عبارات مداخلة مع بعضها البعض .. فمثلاً نستطيع وضع عبارة if ضمن عبارة for و هكذا ..
      التعديل الأخير تم بواسطة Wolf Sniper ; 05-02-2005 الساعة 01:58 PM
      لا إله إلا الله
      مشروع لتعليم أساسيات لغة الـ ++C :
      -
      موضوع لتعليم الفيجوال بيسك 6 :

    8. #8
      التسجيل
      11-04-2002
      الدولة
      سوريا
      المشاركات
      760
      المواضيع
      76
      شكر / اعجاب مشاركة

      مشاركة: :: مشروع لتعليم أساسيات ++C :: موضوع الدروس

      3 – العبارة ( switch ) :

      يتم فيها التحقق من القيم التي يحتويها متغير ( متحول ) ما .. فإذا كانت إحدى القيم التي يحتويها ذلك المتحول موجودة ضمن القيم التي افترضناها يتم تنفيذ تعليمات معينة .. أما إذا لم توجد قيمة ذلك المتحول ضمن تلك القيم فيتم الإنتقال إلى العبارة default و ستنفذ تعليماتها .. أما إذا وجدت قيمته ضمن أحد القيم فلن يتم تنفيذ العبارة default .

      قاعدة /
      كود:
      switch( Variable )
      {
          case Value1 : Statements;
          case Value2 : Statements;
          case Value3 : Statements;
          default : statements;
      }
      1 – Variable : متحول ما مهما كان نوعه ( صحيح أو حقيقي أو منطقي ... ) و يوضع بين قوسين بعد العبارة switch .
      2 – Value : قيمة ما نريد معرفة إذا كان المتغير يحتويها .. و توضع بعد العبارة case ( انتبه للقيم الحرفية بحيث يجب أن تضع الحاصرات إما المزدوجة أو الفردية .. راجع الدرس الأول ) .
      3 – Statements : ممكن أن تكون تعليمة واحدة أو عدة تعليمات .
      4 – default : يتم تنفيذها فقط عند عدم وجود أي قيمة من تلك القيم في المتحول .
      5 – يجب وضع : الأقواس ( { } ) إذا أردنا التحقق من أكثر من قيمة .. أما لو كنا نريد التحقق من قيمة واحدة فممكن أن لا نضع تلك الأقواس ( مثل العبارة if ) .. و لكن إن تحققنا من قيمة واحدة و وضعنا أيضاً العبارة default فعندها أصبحت switch تحتوي على أكثر من تعليمة و بالتالي يجب وضع الأقواس ( { } ) .

      ملاحظة هامة / إذا تحققت إحدى القيم فسيتم تنفيذ جميع التعليمات الموجودة ضمن تلك القيمة و القيم التي تلي تلك القيمة بالترتيب .. و إذا أردنا إلغاء تلك العملية فيجب علينا إضافة الأمر break .

      مثال هام /
      بفرض أننا جعلنا المستخدم يدخل قيمة لعدد صحيح ضمن المتحول n لتحديد أيام الأسبوع بحيث أن العدد 1 ليوم السبت و 2 للأحد ... إلخ :
      كود:
      switch( n )
      {
          case 1 : cout << "Sat\n"; break;
          case 2 : cout << "Sun\n"; break;
          case 3 : cout << "Mon\n"; break;
          case 4 : cout << "Tue\n"; break;
          case 5 : cout << "Wed\n"; break;
          case 6 : cout << "Thu\n"; break;
          case 7 : cout << "Fri\n"; break;
      
          default : cout << "Error…\n";
      }
      ملاحظة / من أجل توضيح عمل break .. بفرض أن المستخدم أدخل الرقم 4 و بفرض أننا لم نكتب الأمر break عندها سيتم كتابة أيام Tue و Wed و Thu و Fri على الشاشة كما قلنا .. هنا تكمن أهمية هذا الأمر فهو يجعل المترجم يتجاهل باقي القيم التي تلي القيمة التي نريدها و يخرج إلى خارج كتلة ( عبارة ) switch و سيتم تنفيذ التعليمة التي تلي تلك البنية أو الكتلة.. وبالتالي ستظهر Tue فقط على الشاشة .

      قاعدة / يستخدم الأمر break للخروج من الكتلة التي يوجد فيها فقط .. و يمكن أن يستخدم في أي من الأوامر و العبارات التي هي موضوع درسنا ما عدا البنية if .

      هناك أمر آخر يقوم بعكس وظيفة break .. و هو الأمر continue :
      يقوم هذا الأمر بالإنتقال إلى بداية الكتلة التي يوجد بها متجاهلاً باقي التعليمات التي توجد بعد هذا الأمر في تلك الكتلة ( البنية ) .. و يستخدم في العبارات : for و while و do/while فقط ( يعني في التكرار فقط ) .. سنأخذها في حلقة for في هذا الدرس .

      4 – العبارة ( for ) :

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

      قاعدة /
      كود:
      for( i=1; i<=10; i++)
      {
          Statements;
      }
      1 – يتم تقسيم ما بين القوسين التابعين لـ for إلى ثلاثة أقسام :

      أ ) القسم الأول : يمثل القيمة الإبتدائية لبداية التكرار بحيث تمثل i أي متحول صحيح .. و ممكن أن تكون أي قيمة و يفضل أن نبدأ بالقيمة واحد .. بشرط أن يكون شكل هذا القسم كالتالي :
      كود:
      Variable = Value
      Variable : متحول التكرار .. وممكن أن نعرفه في بداية البرنامج .. أو من الأفضل أن نقوم بالتالي :
      كود:
      for( int i=1; i<10; i++)
      وبهذا الشكل كأنك عرفته في بداية برنامجك .

      Value : القيمة الإبتدائية التي سيبدأ التكرار بالعد منها .. و ممكن أن تكون قيمة عددية أو متغير يحمل قيمة عددية .. حيث أن ( = ) هي عملية إسناد سيتم فيها إعطاء المتغير ( Variable ) قيمة ابتدائية .

      مثال /
      بفرض أن h متغير صحيح معرف من قبل و يحمل القيمة واحد
      كود:
      for( int i=h; i<10; i++ )
      لاحظ أن بين كل قسم هناك فاصلة منقوطة .

      ب ) القسم الثاني : يمثل شرط متابعة التكرار ( انتبه المتابعة و ليس التوقف ) .. بحيث فإذا تحقق يستمر التكرار مرة أخرى أما إذا لم يتحقق فيتوقف التكرار و يتم الخروج من حلقة for .. و يتم تنفيذ السطر الذي يلي تلك البنية .. و بالنسبة لكيفية كتابة هذا القسم فهو يشابه تماماً طريقة كتابة الشرط في عبارة if .

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

      2 - Statements و هي التعليمات التي سيتم تكرارها عدد من المرات .

      شرح آخر مثال :

      سيتم هنا تكرار مجموعة من التعليمات 9 مرات لأن القيمة الإبتدائية 1 و شرط الاستمرار ( أو القيمة النهائية ) 9 لأن i<10 و ليس i<=10 .. و أيضاً لأننا سنزيد هذا التكرار في كل مرة بمقدار واحد .. عند الإنتهاء من تنفيذ تعليمات for في المرة الأولى يتم زيادة المتغير i واحد و من ثم يختبر الشرط هل هو محقق أم لا ؟ فإذا تحقق يعود المترجم لتنفيذ أول تعليمة ضمن هذه الحلقة .. فتنفذ التعليمات مرة ثانية و عند الانتهاء من آخر تعليمة ضمن حلقة for يتم زيادة المتغير i واحد و يختبر الشرط مرة أخرى .. فإذا تحقق يعود المترجم إلى تنفيذ أول تعليمة ضمن هذه الحلقة ... و هكذا .. إلى أن ينتفي الشرط و تصبح قيمته false .
      و من الممكن أن نطلق على كل عملية تكرار اسم دورة .. فهنا سيتم تنفيذ 9 دورات في حلقة for .

      ملاحظة 1 / إذا كنت تريد تكرار تعليمة واحدة فلا تضع أقواس الكتل ( { } ) .. كما ذكرنا في في العبارات السابقة تماماً
      ملاحظة 2 / ممكن أن تضع أكثر من متغير للتكرار و أكثر من شرط و أكثر من عملية على متغيرات التكرار.. بحيث تضيف فاصلة فقط ( , ) في كل قسم لكي تضيف متحول آخر أو عملية أخرى .. بينما في القسم الثاني تضيف ( && أو || ) .

      مثال /
      كود:
      for( int i=1, j=5; i!=j || j >=0; i++, j-- )
      هنا سيتم زيادة المتغير I واحد و سيتم إنقاص المتغير j واحد في كل دورة .. بالإضافة إلى أن لدينا متغيرين بقيمتين ابتدائيتين مختلفتين .
      ملاحظة 1 / انظر إلى القسم الأول في آخر مثال .. فهو يشابه تماماً طريقة تعريف المتغيرات بقيم ابتدائية ( راجع الدرس الأول ) .. بحيث لا نضيف int قبل المتغير j فالأولى تكفي .
      ملاحظة 2 / تسمى حلقة for بالتكرار المعدود .. أي التكرار الذي ينتهي بعد عدد محدد من المرات .. على عكس حلقات التكرار while و do/while و تسمى هذه الحلقات بالتكرار المشروط .. بحيث تنتهي تلك الحلقات بانتفاء الشرط و لا نعرف عدد المرات التي تم فيها التكرار .. و لكننا نستطيع معرفة عدد مرات التكرار بطريقة معينة سنأخذها في الدرس القادم إن شاء الله حين ندرس التكرار المشروط .

      الأمر continue :قلنا بأن الأمر break يقوم بكسر الكتلة ( البنية ) الموجود فيها و الخروج منها .. أما الأمر continue ( الذي يستخدم في التكرار فقط ) يقوم بتجاهل التعليمات الموجودة الباقية و الإنتقال إلى التكرار ( الدورة ) التالية .. سأشرح طريقة عمله بواسطة هذا المثال :
      كود:
      for( int i=1; i<=5; i++ )
      {
          if( i==3 ) continue;
          cout << "Montada\n";
      }
      هنا سيتم كتابة الكلمة Montada أربع مرات فقط بدلاً من خمسة .. لأننا وضعنا شرط يقول بأنه إذا وصل قيمة التكرار إلى 3 فانتقل إلى الدورة ( التكرار ) التالي أي التكرار رقم 4 .. و لن يتم كتابة تلك الكلمة في المرة الثالثة بسبب الأمر continue الذي تجاهل باقي أوامر الكتلة for في المرة الثالثة فقط .

      ملاحظة / انظر إلى المثال السابق كيف وضعنا عبارة if داخل حلقة for .. فهذا ممكن كما قلنا و يمكنك أيضاً وضع عدة حلقات for داخل بعضها البعض .
      التعديل الأخير تم بواسطة Wolf Sniper ; 05-02-2005 الساعة 02:47 PM
      لا إله إلا الله
      مشروع لتعليم أساسيات لغة الـ ++C :
      -
      موضوع لتعليم الفيجوال بيسك 6 :

    9. #9
      التسجيل
      11-04-2002
      الدولة
      سوريا
      المشاركات
      760
      المواضيع
      76
      شكر / اعجاب مشاركة

      مشاركة: :: مشروع لتعليم أساسيات ++C :: موضوع الدروس

      :: أمثلة تطبيقية ::

      سنأخذ في هذا الدرس أربع أمثلة .. الأول و الثاني و الثالث لعبارة if و الرابع للحلقة for .

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

      مناقشة الحل :
      1 – ما هي المتغيرات التي نحتاجها ؟ متغيرين صحيحين هما a للعدد للبسط و b للمقام .. و لا نحتاج إلى تعريف متغير للناتج ( انظر المثال ) .
      2 – ما هي الأوامر التي نحتاجها ؟ أوامر الدخل و الخرج بالإضافة إلى عبارات الشرط if .
      3 – ما هي المكتبات التي نحتاجها ؟ iostram.h فقط .

      كود:
      #include <iostream.h>
      void main()
      {
          int a,b;
          cout << "Enter Number 1 : "; cin >> a;
          cout << "Enter Number 2 : "; cin >> b;
          if( b!=0 )
              cout << "Div = " << (float)a / (float)b << endl;
          else
              cout << "Error... Can not divide by 0\n";
      }
      شرح المثال :
      1 – قمنا بتعريف متغيرين صحيحين للبسط و المقام .
      2 – طلبنا من المستخدم إدخال العددين .
      3 – قمنا بالتحقق من القيمة التي يحملها المتغير b هل تساوي الصفر أم لا .. فإذا لم تساوي الصفر قمنا بعملية القسمة .. أما إذا ساوت الصفر فنكتب على الشاشة أنه يوجد خطأ و لا يجوز القسمة على الصفر .
      4 – بالنسبة لـ
      كود:
      (float)a / (float)b
      المتغيرين a و b هما متغيرين صحيحين و ناتج قسمة عدد صحيح على عدد صحيح ( في ++C ) يجب أن تكون عدد صحيح لأن العددين صحيحين .. فمثلاً إذا قسمن العدد واحد على اثنان فالناتج سيكون 0.5 و لكن سوف يكتب المترجم صفر !!! لماذا ؟ لأن قسمة واحد على اثنان تساوي صفر و الباقي واحد .. و يمكن معالجة هذا الأمر بطريقتين :

      أ ) أن نجعل المتغيرين من النوع الحقيقي float .
      ب ) كما فعلنا في المثال : أن نضع قبل كل متغير في جملة الإخراج ( أو في عملية القسمة ) العبارة (float) .. بحيث سيتعامل المترجم مع هذين المتغيرين و كأنها حقيقيين ( في هذا السطر فقط ) بينما هم من النوع الصحيح int .

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

      المثال 2 /
      نريد الأن قراءة عددين من المستخدم و نكتب له العدد الأكبر .

      مناقشة الحل :
      1 – ما هي المتغيرات التي نحتاجها ؟ متغيرين صحيحين هما a للعدد الأول و b للعدد الثاني .
      2 – ما هي الأوامر التي نحتاجها ؟ أوامر الدخل و الخرج بالإضافة إلى عبارات الشرط if .
      3 – ما هي المكتبات التي نحتاجها ؟ iostram.h فقط .

      كود:
      #include <iostream.h>
      void main()
      {
          int a,b;
          cout << "Enter a , b : "; cin >> a >> b;
          if( a>b )
              cout << "Max = " << a << endl;
          else if ( b>a )
              cout << "Max = " << b << endl;
          else
              cout << "a = b = " << a << endl;
      }
      شرح المثال :
      1 – عرفنا متغيرين صحيحين و طلبنا من المستخدم إدخالهما معاً و يستطيع ذلك بوضع الرقم الأول ثم يضغط إما على مسافة أو Enter و من ثم يدخل العدد الثاني .
      2 – هناك ثلاثة حالات لهذه المسألة :
      أ ) a أكبر من b : اختبرنا ذلك في عبارة if الأولى .. فإذا كان ذلك صحيحاً نكتب على الشاشة قيمة a .. أما لو كان ذلك خاطئاً فننتقل إلى الإختبار الثاني .
      ب ) a أصغر من b : اختبرنا ذلك في عبارة else if الثانية .. و لكن لن يتم قراءة هذه العبارة إلى إذا كان نتيجة الإختبار الأول false .
      ج ) a تساوي b : اختبرنا ذلك في عبارة else الأخيرة .. و لن يتم قراءة هذه العبارة إلا إذا كانت نتيجة الإختبار الأول و الثاني false .

      ملاحظة هامة / كان باستطاعتنا بدلاً من استخدام else أن نكتب جميع عبارات الشرط على الشكل التالي :
      كود:
      #include <iostream.h>
      void main()
      {
          int a,b;
          cout << "Enter a , b : "; cin >> a >> b;
          if( a>b )
              cout << "Max = " << a << endl;
          if ( b>a )
              cout << "Max = " << b << endl;
          if ( a==b )
              cout << "a = b = " << a << endl;
      }
      و لكن بهذا الشكل سنقوم بعملية الإختبار ثلاث مرات دائماً عند تشغيل هذا التطبيق مهما كانت النتيجة .. بينما في الطريقة الأولى سنقوم بعملية الإختبار أول مرة فإذا تحقق لن نقوم بعد ذلك بالإختبار مرة ثانية أو ثالثة بسبب وجود else بحيث لن ينتقل المترجم إلى هذا الجزء إلا إذا كانت نتيجة الإختبار الأول false .
      الطريقة الأولى أفضل من الثانية !!! تخيل أن برنامجك كبير جداً و تريد قدر الإمكان أن تلغي العمليات الزائدة التي لا ضرورة لها و ذلك بعد تحقيق الهدف المراد من التعليمات .. و هذه الطريقة تحقق ذلك .

      ----------------------------------------
      لا إله إلا الله
      مشروع لتعليم أساسيات لغة الـ ++C :
      -
      موضوع لتعليم الفيجوال بيسك 6 :

    10. #10
      التسجيل
      11-04-2002
      الدولة
      سوريا
      المشاركات
      760
      المواضيع
      76
      شكر / اعجاب مشاركة

      مشاركة: :: مشروع لتعليم أساسيات ++C :: موضوع الدروس

      المثال 3 /
      هذه المرة نريد حل مثال أكبر و هو كالتالي .. نريد حل معادلة من الدرجة الثانية التي تأخذ الشكل :
      كود:
      Ax2 + bx + c = 0
      مناقشة الحل :
      1 – ما هي المتغيرات التي نحتاجها ؟ 5 متغيرات من النوع float لأن هذه المتغيرات من الممكن أن تحنوي على كسور و أرقام عشرية .. و هي كالتالي :
      - a : من أجل معامل x مربع .
      - b : من أجل معامل x .
      - c : من أجل المعامل الثابت .
      - delta : من أجل عملية حساب جذور الحل و هي تساوي : b*b -4*a*c .
      - x1 : الجذر الأول ( الحل الأول ) و يمكن إيجاده من القانون :
      كود:
      ( -b –sqrt(delta) ) / ( 2 * a )
      - x2 : الجذر الثاني ( الحل الثاني ) و يمكن إيجاده من القانون :
      كود:
      ( -b +sqrt(delta) ) / ( 2 * a )
      2 – ما هي الأوامر التي نحتاجها ؟ أوامر الدخل و الخرج بالإضافة إلى عبارات الشرط if .. بالإضافة إلى معاملات المكتبة math.h من أجل الجذر التربيعي .
      3 – ما هي المكتبات التي نحتاجها ؟ iostram.h و math.h .

      كود:
      #include <iostream.h>
      #include <math.h>
      void main()
      {
          float a,b,c,delta,x1,x2;
      
          cout << "Enter a : "; cin >> a;
          cout << "Enter b : "; cin >> b;
          cout << "Enter c : "; cin >> c;
      
          delta = b*b – 4*a*c;
      
          if( delta < 0 )
              cout << "No Solution\n";
          else if( delta == 0 )
          {
              cout << "Double Solution\n";
              x1 = -b / ( 2 * a );
              cout << "X1 = X2 = " << x1 << endl;
          }
          else
          {
              cout << "2 Solution\n";
              x1 = ( -b –sqrt(delta) ) / ( 2 * a );
              x2 = ( -b +sqrt(delta) ) / ( 2 * a );
              cout << "X1 = " << x1 << endl
                       << "x2 = " << x2 << endl;
          }
      }
      شرح المثال :

      1 – قمنا أولاً بإضافة المكتبات اللازمة و من ثم عرفنا المتغيرات التي نريدها و طلبنا بعد ذلك من المستخدم إدخال القيم لكل من المعاملات a و b و c .

      2 – قمنا بعد ذلك بحساب قيمة delta لأن الحل يبدأ من عندها فالحل له 3 حالات :

      أ ) أن تكون delta أصغر من الصفر و بالتالي لا يوجد حل .
      ب ) أن تكون delta تساوي الصفر و بالتالي يوجد حل مشترك .
      ج ) أن تكون delta أكبر الصفر و بالتالي يوجد حلين .
      و قد عالجنا هذه الحالات في المسألة عن طريق إختبار قيمة delta و اتعبنا نفس أسلوب الشرط في المثال السابق باستخدام else .

      3 – بقية الشرح أصبح معروفاً لديكم .

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

      المثال 4 /
      هذا المثال لحلقة التكرار for .. نريد أن نكتب على الشاشة الأعداد الفردية الموجودة بين 1 و 100 مع مربعاتها بوضعها عن طريق وضع كل عدد مع مربعه على سطر .

      مناقشة الحل :
      1 – ما هي المتغيرات التي نحتاجها ؟ فقط متغير التكرار i ( انظر الحل ) .
      2 – ما هي الأوامر التي نحتاجها ؟ أوامر الدخل و الخرج .. و حلقة التكرار for .. و استخدمنا حلقة for في هذا المثال لأننا نريد تكرار عملية الكتابة حوالي 50 مرة و ليس من المعقول أن نكتب 50 أمر كتابة على الشاشة ! .
      3 – ما هي المكتبات التي نحتاجها ؟ iostram.h فقط .

      كود:
      #include <iostream.h>
      void main()
      {
          for( int i=1; i<=100; i+=2)
              cout << i << " " << i*i << endl;
      }
      شرح المثال :

      1 – في الحلقة for .. قمنا بوضع المتغير i و هو المتغير الذي سيأخذ قيم الأعداد الفردية .. بحيث وضعنا له قيمة ابتدائية و هي الواحد لأن الأعداد الفردية بين 1 و 100 تبدأ من الواحد .. و قمنا بوضع شرط متابعة التكرار i<100 لأننا نريد الوصول إلى آخر عدد فردي و هو 99 .. و قمنا بإضافة 2 إلى المتغير i في كل تكرار لأننا لا نريد الأعداد الزوجية .. أما لو كنا نريد جميع الأعداد بين 1 و 100 فنضع العملية في القسم الثالث كالتالي ++i .
      2 – في كل حلقة ( عملية تكرار ) سنكتب قيمة i .. و من ثم فراغ و من ثم مربع i .. و من ثم نقوم بالنزول إلى سطر جديد .

      ---------- ---------- ---------- نهاية الدرس الثاني ---------- ---------- ----------

      حان وقت الجد ... الأن سأعطيكم 5 تمارين ( واجبات ) لتحلوها .. و سأعطي علامة على كل من يحل أكبر مجموعة من الأسئلة بحيث يمكنك اختيار السؤال الذي يعجبك لحله .. و التقسيم كالتالي :

      1 – من يحل 5 أسئلة : فهو ممتاز و له مستقبل إن شاء الله في البرمجة .. و بالتالي أكون قد عرفت أنه فهم جميع النواحي التي ذكرناها .
      2 – من يحل 4 أسئلة : فمستواه في البرمجة جيد جداً .. و لكنها خطوة ممتازة .. إلى الأمام .
      3 – من يحل 3 أسئلة : فمستواه جيد .. و عليه بذل جهد أكبر قليلاً للوصول إلى المستوى المطلوب .
      4 – من يحل سؤالين : فمستواه مقبول .. و يجب أن يحاول أن يبسط فكرة التمرين لكي يستطيع حله و عليه التفكير بمنطق حل المسائل أيضاً .
      5 – من يحل سؤال واحد : لن أقول ضعيف و لكنها خطوة جيدة و يحتاج إلى تطبيق أكبر عدد ممكن من الأمثلة لكي يكتسب خبرة في فهم المسائل .

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

      :: التمارين ::

      1 – اكتب برنامجاً يطلب من المستخدم إدخال 3 أعداد صحيحة و من ثم يكتب له العدد الأكبر .
      2 – اكتب برنامجاً يطلب من المستخدم إدخال عددين صحيحين و من ثم يكتب له فيما إذا كان الثاني قاسماً للأول .. ( بحيث أن القاسم هو العدد الذي يمكن القسمة عليه و يكون باقي القسمة عليه تساوي الصفر ) .
      3 – اكتب برنامجاً يطلب من المستخدم إدخال عدد صحيح و من ثم يكتب له جميع قواسمه . ( استخدم حلقة التكرار for و عبارة الشرط if ) .
      4 - اكتب برنامجاً يطلب من المستخدم إدخال n عدد صحيح و من ثم يكتب له قيمة n! ( العاملي ) .. استخدم حلقة التكرار for .

      ملاحظة / قانون العاملي :
      كود:
      n! = n * (n-1) * (n-2) …
      5 - اكتب برنامجاً يطلب من المستخدم إدخال عدد صحيح و من ثم نخبره بإن كان هذا العدد أولي أم لا . ( استخدم حلقة التكرار for و عبارة الشرط if ) .

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

      أروني إبداعاتكم في البرمجة .. بالتوفيق .
      لا إله إلا الله
      مشروع لتعليم أساسيات لغة الـ ++C :
      -
      موضوع لتعليم الفيجوال بيسك 6 :

    11. #11
      التسجيل
      22-05-2004
      المشاركات
      63
      المواضيع
      11
      شكر / اعجاب مشاركة

      مشاركة: :: مشروع لتعليم أساسيات ++C :: موضوع الدروس

      السلام عليكم

      اولا وقبل كل شيء شكرا لك اخي على هذا الجهد

      الان ممكن تشرح سؤال 4 .... اكتب برنامجاً يطلب من المستخدم إدخال n عدد صحيح و من ثم يكتب له قيمة n! ( العاملي )
      وما هو هذا العاملي

      2- اخي انت في بعض الاسئله وضعت لنا استخدام if and for فهل نستطيع ان نستخد واحده فقط اما if او for

    12. #12
      التسجيل
      03-09-2003
      الدولة
      d=(n_n)=b دار بو خليفة d=(n_n)=b
      المشاركات
      1,096
      المواضيع
      62
      شكر / اعجاب مشاركة

      مشاركة: :: مشروع لتعليم أساسيات ++C :: موضوع الدروس

      اقتباس المشاركة الأصلية كتبت بواسطة IWANTYOURHELP
      السلام عليكم

      اولا وقبل كل شيء شكرا لك اخي على هذا الجهد

      الان ممكن تشرح سؤال 4 .... اكتب برنامجاً يطلب من المستخدم إدخال n عدد صحيح و من ثم يكتب له قيمة n! ( العاملي )
      وما هو هذا العاملي

      2- اخي انت في بعض الاسئله وضعت لنا استخدام if and for فهل نستطيع ان نستخد واحده فقط اما if او for
      ::

      ::

      ممنوع الرد في هذا الموضوع!!!!!!!!

      سيتم ابلاغ المشرف

      ::

      ::
      ::

      ::



      "التوقيع فوق التعديل لوووووول "

      3/12/2005...."and UAE Naruto...is back again"

      من مواضيعي

      "مؤقتاً ماشي مواضيع حلوة "

      ::

      ::

    13. #13
      التسجيل
      11-04-2002
      الدولة
      سوريا
      المشاركات
      760
      المواضيع
      76
      شكر / اعجاب مشاركة

      مشاركة: :: مشروع لتعليم أساسيات ++C :: موضوع الدروس

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

      :: مقدمة ::

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

      5 – العبارة ( while ) .
      6 – العبارة ( do/while ) .

      و لكن قبل ذلك سنأخذ بعض الملاحظات .. و سنحل التمارين التي أعطينكم إياها في الدرس الماضي .. و أيضاً سنأخذ النافذة Watch التابعة لنوافذ تصحيح الأخطاء Debug Window .. حيث أن هذه النافذة نستفيد منها في معرفة القيم التي تأخذها المتغيرات مهما كان نوعها .

      ---------- ---------- ---------- الدرس الثالث ---------- ---------- ----------
      اليوم : السبت ... التاريخ : 12 / 2 / 2005

      :: تابع تعليمات التحكم ::

      قبل إكمال الموضوع .. هناك فكرتين يجب أن أذكرهما :

      الأولى :

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


      مثال /
      بفرض أن x متغير منطقي من النوع bool
      كود:
      bool x = true;
      if( x )
          cout << "X = True " << endl;
      لاحظوا كيف و ضعنا الشرط .. في الشرط نستطيع وضع المتغيرات من النوع bool بهذا الشكل و سيفهم المترجم أنك تريد إختبار في ما إذا كانت x تساوي true .
      و لكن الشرح الصحيح هو أن المترجم سيرى أن قيمة المتغير x تساوي true و بالتالي نتيجة الإختبار أصبحت true و بالتالي سينفذ التعليمات التي بداخل الشرط .. و بالتالي هذه طريقة مباشرة بدلاً من كتابة :
      كود:
      if( x==true )
      و أيضاً هناك طريقة مشابهة لإختبار القيمة false .. انظر المثال :
      كود:
      if( !x )
          cout << "X = False " << endl;
      لاحظ كيف وضعنا معامل النفي ( ! ) قبل المتحول x .. و هي مشابهة تماماً للعبارة التالية :
      كود:
      if( x==false )
      الثانية :

      تتعلق بالحلقة for .. بأننا نستطيع عدم كتابة أحد الأقسام الثلاثة المتعلقة بالقيمة الإبتدائية و النهائية و العملية على متغير التكرار .. و ممكن أيضاً أن نضع الحلقة فارغة هكذا :
      كود:
      for( ; ; )
      و بالتالي ستصبح الحلقة مفتوحة و لن يتم الخروج منها .. و لكننا نستطيع ذلك عن طريق الأمر break كما تعلمنا .

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

      :: حل التمارين ::

      السؤال الأول :
      اكتب برنامجاً يطلب من المستخدم إدخال 3 أعداد صحيحة و من ثم يكتب له العدد الأكبر .

      الحل /
      كود:
      #include <iostream.h>
      void main()
      {
          int a,b,c,max;
          cout << "Enter a , b , c : "; 
          cin >> a >> b >> c;
      
          max = a;
      
          if( b > max )
              max = b;
          if( c > max )
              max = c ;
          
          cout << "Max = " << max << endl;
      }
      شرح الحل :

      1 – قمنا بتعريف أربع متغيرات من النوع int : ثلاثة من أجل الأعداد و الرابع الذي سيحمل قيمة العدد الأكبر .
      2 – قمنا بطلب تلك الأعداد من المستخدم .
      3 – يجب أن نفترض أن عدد ما هو العدد الأكبر .. ثم نقوم بتعديل تلك القيمة إذا وجدنا أن الأعداد الأخرى هي الأكبر .
      حيث افترضنا أن a هو العدد الأكبر .. ثم اختبرنا فيما إذا كان b هو الأكبر فإذا كان كذلك قمنا بتغيير max .. و بعد ذلك اختبرنا فيما إذا كان c هو الأكبر .. و بعد ذلك كتبنا الناتج .


      ملاحظة / هناك حلول كثيرة لهذا السؤال .. و حلول الأعضاء صحيحة و لكن أرى أن هذا الحل بسيط و سهل الفهم ..

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

      السؤال الثاني :
      اكتب برنامجاً يطلب من المستخدم إدخال عددين صحيحين و من ثم يكتب له فيما إذا كان الثاني قاسماً للأول .

      الحل /
      كود:
      #include <iostream.h>
      void main()
      {
          int a,b;
          
          cout << "Enter a , b : ";
          cin >> a >> b;
      
          if( a % b == 0 )
              cout << "b is dividable " << endl;
          else
              cout << "b is not dividable " << endl;
      }
      شرح الحل :

      1 – قمنا بتعريف متغيرين صحيحين من أجل العددين الذين سنختبرهما .
      2 – طلبنا القيم من المستخدم .
      3 – نريد أن نعرف متى يكون العدد الثاني قاسماً للأول ؟ يكون كذلك إذا كان باقي قسمة الأول على الثاني تساوي الصفر .. مثال : العدد 6 و 2 حيث أن 2 هو قاسم للعدد 6 لأن باقي قسمة 6 على 2 تساوي الصفر .. و هكذا .
      لذلك قمنا بإختبار تلك العملية بواسطة عبارة الشرط if .. و من ثم كتبنا الإجابة .


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

      السؤال الثالث :
      اكتب برنامجاً يطلب من المستخدم إدخال عدد صحيح و من ثم يكتب له جميع قواسمه .

      الحل /
      كود:
      #include <iostream.h>
      void main()
      {
          int n;
      
          cout << "Enter a Number : ";
          cin >> n;
      
          for( int i=1; i<=n; i++ )
              if( n % i == 0 )
                  cout << i << endl;
      }
      شرح الحل :

      1 – قمنا بتعريف المتغير n الذي سنوجد له قواسمه كلها .
      2 – طلبنا القيمة من المستخدم .
      3 – هذا السؤال هو نفس السؤال السابق .. و لكننا هنا نريد إيجاد جميع الأعداد التي تعد قاسماً للعدد n .. إذاً نحتاج إلى حلقة for بحيث نضع القيمة الإبتدائية واحد و النهائية هي العدد نفسه n .. حيث أن i ستأخذ في كل دورة أحد الأعداد التي بين 1 و n و بعد ذلك سنختبر نفس الإختبار في السؤال السابق .. و بذلك نكون قد اختبرنا جميع الأعداد التي نريدها .. بحيث نكتب قيمة i إذا كان باقي قسمة n على i تساوي الصفر .


      ملاحظة مهمة / انظر إلى حلقة for كيف أنها لم تحتوي على الأقواس ( { } ) .. و ذلك لأنها تحتوي على تعليمة واحدة فقط و هي if .. و العبارة if أيضاً لم تحتوي على أقواس الكتل .. لأنها أيضاً احتوت على تعليمة واحدة فقط .

      ----------------------------------------
      لا إله إلا الله
      مشروع لتعليم أساسيات لغة الـ ++C :
      -
      موضوع لتعليم الفيجوال بيسك 6 :

    14. #14
      التسجيل
      11-04-2002
      الدولة
      سوريا
      المشاركات
      760
      المواضيع
      76
      شكر / اعجاب مشاركة

      مشاركة: :: مشروع لتعليم أساسيات ++C :: موضوع الدروس

      السؤال الرابع :
      اكتب برنامجاً يطلب من المستخدم إدخال n عدد صحيح و من ثم يكتب له قيمة n! ( العاملي ) .

      ملاحظة / قانون العاملي :
      كود:
      n! = n * (n-1) * (n-2) * (n-(n-1))
      أمثلة على العاملي /
      6! = 6 × 5 × 4 × 3 × 2 × 1 = 720
      4! = 4 × 3 × 2 × 1 = 24
      2! = 2 × 1 = 2
      1! = 1
      0! = 1
      الحل :
      كود:
      #include <iostream.h>
      void main()
      {
          int n,y;
      
          cout << "Enter a Number : ";
          cin >> n;
      
          y = n;
      
          for( int i = n-1; i>1; i-- )
              y = y * i;
      
          cout << "Y! = " << y << endl;
      }
      شرح الحل :

      1 – عرفنا متغيرين صحيحين : n للعدد الذي الذي سيدخله المستخدم .. و y من أجل حساب العاملي .
      2 – طلبنا قيمة العدد الذي سنحسب له العاملي .
      3 – انسى التعليمة : y=n .. و انظر إلى الحلقة for و ذلك بفرض أن المستخدم أدخل العدد 5 :
      في العاملي يوجد تسلسل في الأعداد لذلك احتجنا إلى الحلقة for .. بحيث وضعنا القيمة الإبتدائية هي العدد n-1 و ستكون في هذا الإفتراض 4 .. و النهائية 2 دائماً لأننا لا نحتاج إلى الواحد لأنه عنصر محايد و الضرب به لا يغير النتيجة .
      و من ثم وضعنا القانون الذي سيحسب لنا القيمة .. لذلك وضعنا قبل الحلقة for التعليمة y=n .. حيث أن y ستأخذ أولاً قيمة العدد الذي سيدخله المستخدم و من ثم ستتغير قيمتها في داخل الحلقة .


      بحيث ستأخذ y في أول دورة القيمة 5 × 4 .
      في الدورة الثانية 20 × 3 .
      في الدورة الثالثة 60 × 2 = 120 .. و هكذا .
      و هذا ما يحقق : 5 × 4 × 3 × 2 × 1 = 120 .

      ملاحظة هامة / إذا لم نضع للمتغير y قيمة ابتدائية .. فستكون نتيجة التعليمة y = y * i قيم لا معنى لها !!! لأن المترجم سيعطي قيمة عشوائية لا معنى لها لأي متغير تم تعريفه و لم يعطى له قيمة ابتدائية .. و بالتالي ستظهر أخطاء في النتائج .

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

      السؤال الخامس :
      اكتب برنامجاً يطلب من المستخدم إدخال عدد صحيح و من ثم نخبره بإن كان هذا العدد أولي أم لا .
      ملاحظة / العدد يكون أولي إذا كان عدد قواسمه اثنان فقط هما العدد نفسه و الواحد .. لذلك سنحسب عدد القواسم .

      الحل /
      كود:
      #include <iostream.h>
      void main()
      {
          int n;
          int y=0;
      
          cout << "Enter a Number : ";
          cin >> n;
      
          for( int i=2; i<=n-1; i++ )
              if( n % i == 0 )
                  y++;
      
          if( y > 0 )
              cout << "not Prime" << endl;
          else
              cout << "Prime" << endl;
      }
      شرح الحل :

      1 – عرفنا متغيرين صحيحين : n من أجل العدد الذي سيدخله المستخدم .. y من أجل حساب عدد القواسم .
      2 – طلبنا قيمة العدد لاختبار فيما إذا كان أولي أم لا .
      3 – اتبعنا نفس أسلوب السؤال الثالث .. و لكننا هنا لا نريد كتابة القواسم .. فقط نريد عدها .. و غيرنا أيضاً القيمة الإبتدائية و النهائية للتكرار لأننا لا نريد اختبار العدد نفسه و العدد واحد لأننا نعرف بأنهما قواسم للعدد بشكل مسبق .
      فإذا كان باقي قسمة العدد على i تساوي الصفر فهذا يعني أنه قاسم له لذلك نزيد y بمقدار واحد .. و هكذا حتى نختبر جميع القيم .
      4 – بعد ذلك نختبر فيما إذا كانت y أكبر من الصفر فهذا يعني أننا وجدنا قواسم للعدد و بالتالي نكتب أن العدد ليس أولي .. أم إذا كانت y تساوي الصفر و هذا يعني أننا لم نجد قواسم للعدد و بالتالي نكتب أن العدد أولي .


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

      :: تابع تعليمات التحكم ::
      الأن لنعود إلى إلى درسنا .. سنأخذ باقي العبارات و التي تسمى ( بالتكرار المشروط ) و هي كالتالي :

      5 – العبارة ( while ) :

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

      قاعدة /
      كود:
      while( Condition )
          Statements;
      حيث أن :
      Condition : هو الشرط .. يكتب تماماً مثل العبارة if .
      Statements : التعليمات المراد تكرارها طالما أن الشرط محقق ( نتيجته true ) .

      مثال /
      كود:
      while( y<0 )
          x++;
      6 – العبارة ( do/while ) :

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

      قاعدة /
      كود:
      do
          Statements;
      while( Condition );
      مثال /
      كود:
      do
          x++;
      while( y<0 );
      ملاحظة 1 / لاحظ وجود الفاصلة المنقوطة في نهاية هذه العبارة .. أما في العبارة السابقة لم نضع فاصلة منقوطة بعد while و ذلك من أجل التمييز بين النوعين ( while ) و ( do/while ) .

      ملاحظة 2 / يمكننا أيضاً في هاتين العبارتين استخدام أقواس الكتل ( { } ) إذا كنا نريد تكرار عدد من التعليمات و ليس فقط تعليمة واحدة .. كما تعلمنا سابقاً .

      ----------------------------------------
      لا إله إلا الله
      مشروع لتعليم أساسيات لغة الـ ++C :
      -
      موضوع لتعليم الفيجوال بيسك 6 :

    15. #15
      التسجيل
      11-04-2002
      الدولة
      سوريا
      المشاركات
      760
      المواضيع
      76
      شكر / اعجاب مشاركة

      مشاركة: :: مشروع لتعليم أساسيات ++C :: موضوع الدروس

      :: أمثلة تطبيقية ::

      في هذا الدرس أريد أن أحل أكبر عدد ممكن من الأسئلة .. و بالتالي سنأخذ بعض الأمثلة على العبارتين ( while ) و ( do/while ) .. و من ثم سنأخذ أمثلة عامة عما تعلمناه سابقاً .

      المثال 1 /

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


      لاحظ أننا لا نعرف مسبقاً عدد الحروف التي سيدخلها المستخدم لذلك سنستخدم الحلقة while .. و لكننا نستطيع ذلك بواسطة الحلقة for بحيث نضع الحلقة مفتوحة ( انظر إلى أول هذا الدرس ) .. لذلك سأضع الحلين .

      الطريقة الأولى / استخدام while و do/while :

      مناقشة الحل :
      1 – نريد متحول من النوع char و الذي سيحتوي على الحروف التي سيدخلها المستخدم .. و لكن انتبه هذا النوع سيحتوي على حرف واحد فقط في كل مرة .. و إذا كنا نريد أن نجعل هذا المتحول يحتوي على جملة كاملة فيجب أن نستخدم المصفوفات ( سنأخذها إن شاء الله ) .
      2 – نريد متحول من النوع int ليحسب لنا عدد الحروف التي أدخلها المستخدم .. و سنزيد هذا المتحول عند كل عملية إدخال للحروف .. حيث سنضع cin داخل حلقة تكرار .
      3 – ما هو شرط المتابعة في عملية التكرار ؟ تنتهي الجملة ( من السؤال ) بالنقطة لذلك طالما أن الحرف لا يساوي النقطة فسنجعل المستخدم يدخل حرف آخر .


      الحل 1 / استخدام do/while :
      كود:
      #include <iostream.h>
      void main()
      {
          char c;
          int i=0;
      
          cout << "Enter a Sentence : ";
      
          do
          {
              cin >> c;
              i++;
          }
          while( c != '.' );
      
          cout << --i << endl;
      }
      شرح الحل :

      1 – عرفنا متغيرين : الأول حرفي من النوع char من أجل حروف الجملة التي سيدخلها المستخدم .. و الثاني من أجل حساب عدد هذه الحروف .

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

      2 – كتبنا على الشاشة طلب إدخال الجملة .

      3 – لاحظ أين وضعنا cin بداخل التكرار .. لأننا نريد أن نحسب عدد الحروف المدخلة لذلك يجب وضع الأمر cin داخل التكرار .. بحيث عند إدخال الحرف الأول سنزيد i بمقدار واحد .. و لكن لاحظ أيضاً أن عمل cin ينتهي في كل تكرار بإدخال حرف واحد لأن المتغير الحرفي c هو لحرف واحد .. بينما إذا المتغير c يستطيع أن يحمل أكثر من حرف ( جملة ) فهذا الحل سيكون خطأ .. لأن في كل تكرار لن يكون عدد الحروف المدخلة هي حرف واحد فقط بل من الممكن أن يكون في تكرار عبارة عن جملة .. و بالتالي حلنا هكذا يكون قاصر .. دعونا الأن نعود لهذا السؤال .

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

      5 – بعد ذلك قمنا بكتابة عدد الحروف المدخلة .. و لكن سنكتب عدد الحروف ناقصاً واحد ! لأننا قمنا بعد النقطة كحرف .

      ملاحظة / سيتم تنفيذ تعليمات الكتلة do مرة واحدة أولاً ثم سيتم التحقق من الشرط .. على عكس العبارة while التي ستختبر الشرط أولاً ثم تقوم بالتكرار .

      الحل 2 / استخدام while :
      كود:
      #include <iostream.h>
      void main()
      {
          char c = 'a';
          int i = 0;
      
          cout << "Enter a Sentence : ";
      
          while( c != '.' )
          {
              cin >> c;
              i++;
          }
          
          cout << --i << endl;
      }
      شرح الحل :

      الحل هو تماماً مثل الحل السابق .. و لكن أضفنا شيئاً صغيراً .. قبل شرحه انظر إلى العبارة while .. ستقوم هذه العبارة باختبار المتغير الحرفي c أولاً و من ثم نطلب من المستخدم إدخال حرف .. و بالتالي فإن المتغير c لم يحتوي على أي قيمة فمن الخطأ أن يتم الإختبار على متغير لم يحتوي على قيمة .. لذلك وضعنا قيمة ابتدائية افتراضية للمتغير c و هي الحرف a على سبيل المثال .

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

      في المثال السابق لم نضع قيمة ابتدائية للمتغير c لأنه سيأخذ قيمة ابتدائية قبل الإختبار و هي الحرف الأول من الجملة لأننا كما قلنا أن do/while ستنفذ التعليمات مرة واحدة قبل الإختبار .. لذلك عليك معرفة متى تستخدم الطريقتين .

      الطريقة الثانية / استخدام for :

      قلنا أن في هذا السؤال لا نعرف مسبقاً عدد الحروف المدخلة لذلك من الصعب استخدام for و لكننا نستطيع ذلك .

      الحل /
      كود:
      #include <iostream.h>
      void main()
      {
          char c;
          int i = 0;
      
          cout << "Enter a Sentence : ";
          
          for( ; ; )
          {
              cin >> c;
              i++;
      
              if( c == '.' )
                  break;
          }
      
          cout << --i << endl;
      }
      شرح الحل :

      لاحظ كيف استخدمنا break داخل الشرط if .. فإذا تحقق الشرط فسيتم الخروج من الحلقة .. و باقي الشرح هو نفسه .

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

      المثال 2 /

      نريد من المستخدم إدخال 10 أعداد صحيحة ( int ) و من ثم نحسب له مجموع تلك الأعداد و المتوسط ( Average ) .


      مناقشة الحل :

      1 – نريد متحول واحد فقط من أجل الأعداد العشرة و هو a .. و نوعه ( int ) .

      2 – و نريد أيضاً متغير صحيح لحساب مجموع الأعداد sum .. و آخر للمتوسط avr .. بحيث سيكون المتوسط من النوع الحقيقي ( float ) .. لأن المتوسط قد يحتوي على أعداد عشرية بسبب عملية القسمة .


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

      3 – سنستخدم حلقة for من أجل إدخال 10 أعداد لأنه ليس من العقول أن نكتب 10 مرات cin ! .. و أيضاً استخدمنا for و لم نستخدم while لأننا عرفنا مسبقاً عدد مرات التكرار و هي 10 .

      الحل /
      كود:
      #include <iostream.h>
      void main()
      {
          int a, sum=0; 
          float avr;
      
          for( int i=1; i<=10; i++ )
          {
              cout << "Enter a Number " << i << " : ";
              cin >> a;
      
              sum = sum + a;
          }
          
          cout << "Sum = " << sum << endl;
      
          avr = (float)sum / 10;
          cout << "Avr = " << avr << endl;
      }
      شرح الحل :

      1 – عرفنا المتغيرات المطلوبة .. و أعطينا المتغير sum قيمة ابتدائية و هي الصفر لأنه سيحسب المجموع .. انظر كيفية استخدام هذا المتغير داخل الحلقة :
      كود:
      sum = sum + a;
      هنا سنجمع في كل تكرار القيمة الجديدة للمتغير a و سنضيفها على sum و لكن ماذا بالنسبة لأول عملية تكرار ؟ ستكون sum تحمل قيمة لا معنى لها و بالتالي وضعنا لها قيمة ابتدائية و هي الصفر .

      2 – قمنا بوضع حلقة ستقوم بتكرار مجموعة من التعليمات 10 مرات من أجل إدخال 10 أعداد .. و طلبنا من المستخدم إدخال عدد في كل مرة .. بحيث في كل دورة ستأخذ a قيمة جديدة ..
      لاحظ أين قمنا بعملية حساب مجموع الأعداد :
      كود:
      sum = sum + a;
      وضعناها داخل التكرار و ليس خارجه مثل المتوسط avr .. لأننا نريد حساب في كل دورة المجموع الجديد للأعداد .. بينما المتوسط يتم حسابه مرة واحدة و ذلك بعد حساب المجموع .

      ملاحظة / المتوسط يساوي مجموع الأعداد على عدد تلك الأعداد .

      3 – كتبنا المجموع .

      4 – حسبنا المتوسط .. و لاحظ كيف وضعنا ( float ) قبل المتغير sum قسمة عدد صحيح ( int ) على عدد صحيح ( int ) ستعطي عدد صحيح لا يحتوي على كسور .. و نحن نريد العكس لذلك قمنا بإخبار المترجم بأن يتعامل مع المتغير sum بشكل مؤقت على أنه عدد حقيقي من النوع float .. و من ثم كتبنا ذلك المتوسط على الشاشة .

      ----------------------------------------
      التعديل الأخير تم بواسطة Wolf Sniper ; 14-02-2005 الساعة 12:06 AM
      لا إله إلا الله
      مشروع لتعليم أساسيات لغة الـ ++C :
      -
      موضوع لتعليم الفيجوال بيسك 6 :

    صفحة 1 من 4 1234 الأخيرةالأخيرة

    ضوابط المشاركة

    • لا تستطيع إضافة مواضيع جديدة
    • لا تستطيع الرد على المواضيع
    • لا تستطيع إرفاق ملفات
    • لا تستطيع تعديل مشاركاتك
    •