معهد دعم اتش فى اى بى اس لحلول الويب - Powered by vBulletin


 
 
النتائج 1 إلى 10 من 10

الموضوع: ثمانى دروس فى سي بلس بلس c++ حصرياً

  1. #1
    عضو جديد


    تاريخ التسجيل: Jun 2011
    رقم العضوية: 7
    المشاركات: 2,181
    HVIPS5 غير متواجد حالياً

    ثمانى دروس فى سي بلس بلس c++ حصرياً


    ثمانى دروس فى سي بلس بلس c++ حصرياً
    ثمانى دروس فى سي بلس بلس c++ حصرياً

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


    2- ارجو ان تغفر لي اي اخطاء املائيه فأنا اكتب بسرعة
    3- ارجو ألا تعتبر كتابتي لمصطلحات انجليزية بحروف عربية جهل او غباء مني ولكن فقط لاسباب خاصة بتحرير الصفحة فالسهل عندي كتابة كل شئ باللغة الانجليزيه ولكن لن تكون هذه الدروس مفيد – ألست معي في ذلك – ارجو ذلك
    متطلبات العمل
    1- كومبايلر للغة ودعني اقول لك ماهو الكومبايلر حتى وان كنت تعرفه انه البرنامج الذي يحول البرنامج الذي تكتبه الى برنامج تنفيذي قابل للتشغيل والتوزيع والبيع الى آخر ذلك وهناك انواع كثيرة مثل

    Borland C++
    Microsoft Visual C++
    Watcom C/386
    DJGPP.
    انا انصح بالكومبايلر الاول او الثاني أما الثالث والرابع فلم اجربهم ولست في حاجة اليهم ولست اقصد بذلك الا تستعملهم ولكن فقط لم اجربهم
    استعد انت الآن لبداية التعلم اما انا من ناحيتي فسوف اطفئ سيجارتي (ادعو لي بالاقلاع عن التدخين) لكي نبدء فورا
    عند تعلم لغة كومبيوتر جديده اصبحت عادة ان تقوم بطبع رسالة هالو ورلد
    Hello World
    بالطبع هم يخاطبون العالم ولهم الحق في ذلك ولكن انا سوف اطبع رسالة هالو آراب
    Hello Arab
    مع عدم وجود اي عنصرية مني فأنا لست كذلك ولن أكون ولكن اسمحو لي بتحية من اكتب لهم لا تنزعج معي دائما قد اكون رغاي بعض الوقت ولكن ليس كل الوقت

    // This is the 1st lesson
    #include <iostream.h>

    int main()
    {
    cout<<"HEY, Hello ِArabs";
    return 0;
    }

    دعونا نشرح ما كتبنا لقد بدأت بالعبارة الآتية

    // This is the 1st lesson
    عند كتابة // معناها انني اكتب ملاحظات وبالتالي كل ما يليها لايهم الكومبايلر عند الترجمة وفائدة الملاحظات عظيمة فكلما كتبت جزء من البرنامج وضحت هاتين العلامتين وبعدها ماتريد ان تقوله لنفسك او لمن يراجعون بعدك ماذا تفعل فاءذا عدت لتعديل البرنامج بعد فترة من الزمن سيكون ذلك رائع ان تتذكر افكارك في البرنامج موضع التعديل والآن الى التعليمة التالية لقد كتبنا
    #include <iostream.h>
    العلامة # يليها امر include هي من تعليمات المعالج المبدئي

    Preprocessor directive
    لاحظ ان اوامر اللغة تكتب بالحروف الانجليزية الصغيرة
    يلي ذلك مابين القوسين <> اسم ملف ينتهي بالامتداد h
    هذا النوع من الملفات يسمى header files
    وهي ملفات تأتي مع كومبايلر اللغة وان كنت ستتعلم في مرحلة متقدمة من هذه الدروس عملية انشاء ملفاتك الخاصة وهي عبارة عن ملفات يوجد بها تعريف لاوامر اللغة المستخدمة داخل برنامجك وبالتالي لكل مجموعة اوامر ملفاتها الخاصة لا تقلق سوف تعرف كل ذلك قريبا
    اذا الاوامر المستخدمة في مثالنا السابق يحتاج الملف iostream.h
    وهذا الملف هام جدا ورئيسي دائما ضم هذا الملف باستخدام الامر
    #include <iostream.h>

    ملخص
    #include
    من اوامر لغة سي ++ (المعالج المبدئي)
    iostream.h
    ملف او هدير فايل لتعريف الاوامر المستخدمة
    <>
    اقواس لوضع الملف المطلوب ضمه او تحميله بينهما
    ببساطة شديدة الامر cout الذي سيلي شرحة يحتاج الملف
    iostream.h
    ننتقل الآن لشرح التعليمة التالية
    int main()
    ومعناها الاعلان عن الدالة او جسم البرنامج الرئيسي الذي من خلاله نستدعي كل شئ ونعمل كل شئ وسوف نضع بداخله الاوامر كلها
    ولكن ما هو الامر int
    انه من اوامر الاعلان عن نوع المتغيرات ودعني اوضح ذلك
    امر اللغة الذي يعلن عن المتغير
    نوع المتغير
    int
    الاعلان عن اعداد صحيحة
    float
    الاعلان عن اعداد عشرية
    char
    الاعلان عن حروف
    void
    لاشئ
    وسوف نتعرض للانواع الاخرى فيما بعد وكمثال
    int x = 5;
    int y = 65;
    float z = 4.677777;
    float q = 77.5443;
    char *b = “Mohamad Hasan”;
    char *c = "My Home Page”;
    لقد اعلنا ان الدالة الرئيسية للبرنامج نوعها او ستعيد في نهاية عملياتها عدد صحيح فقد تحتاج مثلا لعمل دالة لضرب عددين في بعضهما والنتيجة تعيدها الدالة حسب نوع الاعلان
    ويحدد ذلك الامر return وكما ترى اعاد الامر القيمة صفر وهو بالطبع عدد صحيح نتيجة الاعلان عن دالة تعيد اعداد صحيحة
    فمثلا لو انشأنا دالة لاعادة اعداد عشرية يجب ان تعيد في نهايتها اعداد عشرية مثلا
    float NewFunc ()
    {
    float x , y , z;
    x = 10.5;
    y = 11.67887;
    z = x * y;
    return z;
    }
    لقد اعادت الدالة حاصل ضرب 10.5 * 11.67887 وحاصل الضرب هو عدد عشري لان نوع الدالة اعداد عشرية وهكذا دعنا نعود لبرنامجنا الاصلي
    int
    نوع الدالة تعيد اعداد صحيحة
    main
    اسم الدالة الرئيسية اساسي وهام
    ()
    قوسين مغلقين لايوجد داخلهم شئ في هذه المرحلة
    الى التعليمة التالية القوس {
    يجب ان يفتح به الدالة وتنتهي به ايضا لاحظ الاتجاه الى اليسار في بداية الدالة والى اليمين في نهايتها لتحديد بلوك الاوامر
    والآن الى التعليمة التالية
    cout<<"HEY, Hello ِArabs";
    الامر cout يليه القوسين << مفتوحين الى اليمين معناها اخراج ما بين علامتي الاقتباس
    Cout <<
    امر طباعة على الشاشة
    " "
    علامات اقتباس لطبع الرسالة التي بينهما كما هي
    الى الامر الاخير

    return 0;
    وقد شرحناه اثناء تناولنا لموضوع انواع البيانات اخيرا ينتهي البلوك الرئيسي للبرنامج باعادة قيمة صفر وهو العدد الصحيح حسب الاعلان مع الدالة الرئيسيه بالامر int
    وتتفق معى انه لايجب ان يكون صفر دائما ولكن كيفما تريد وحسب العمليات ولكن المهم ان يكون عدد صحيح 1 او 2 او غيرها لاننا اعلنا عن ذلك وعلينا الالتزام به والا سوف يعطي الكومبايلر رسالة خطأ
    والى الامر الاخير }
    انه قوس نهاية البلوك ولاحظ انه الى اليسار ليغلق البلوك الذي فتح بمثله ولكن الى اتجاه اليمين والآن انتهى برنامجنا الافتتاحي والى ملاحظاتنا
    تذكر أن
    1- اوامر اللغة تكتب بحروف صغيرة small letters
    2- البرنامج يبدء بأوامر المعالج المبدئي لضم الملفات # include
    3- الدالة الرئيسية main يجب ان تكون موجودة
    4- يفتتح البرنامج بالقوس} ويغلق بالقوس{
    5- الملف الذي انشأته سيقوم برنامج التحرير بحفظه باسم ينتهي بالامتداد cpp
    6- جميع سطور البرنامج وبعد نهاية الاوامر والاعلانات نضع الفاصلة المنقوطة ;
    بعد اقواس افتتاح البرنامج وبعد اوامر المعالج المبدئي وبعد اسم الدالة حاليا اقول لك نضعها فقط بعد الاوامر داخل بلوك الدالة ومعناها نهاية الامر اهتم بذلك
    ماذا لو اعلنا عن نوع الدالة الرئيسية بالامر void ومعناه غير مطلوب منها اعادة شئ سيكون الامر return بدون قيم بالطبع او كما يلي
    // This a modification no. 1
    #include <iostream.h>

    void main()
    {
    cout<<"HEY, Hello ِArabs";
    return ;
    }
    لاحظ الامر return لم يوضع بعده قيم
    وتذكر ان مايلي // هي عبارة عن ملاحظات لسطر واحد فقط وكلما وضعت سطر ملاحظات ضع هاتين العلامتين في بداية السطر
    // This is a remark no. 1
    // And this is the remark no. 2
    // It is no. 3

    وهناك اسلوب اخر لكتابة الملاحظات في عدة سطور بأن تبدء بالعلامة /*
    ثم تكتب ما شئت من ملاحظات في اي عدد من السطور ثم تنهيها بالعلامة */
    مع ملاحظة الاتجاهات وتكون الملاحظات السابقة بالاسلوب الذي شرحناه كما يلي
    /*
    This is a remark no. 1
    And this is the remark no. 2
    It is no. 3
    */
    لاحظ الفرق لكي يتضح لك الشرح استخدم ايهما او ما تراه اسهل لك منهم اقصد من الاسلوبين السابقين


    ثمانى دروس فى سي بلس بلس c++ حصرياً
    ثمانى دروس فى سي بلس بلس c++ حصرياً

  2. #2
    عضو جديد


    تاريخ التسجيل: Jun 2011
    رقم العضوية: 7
    المشاركات: 2,181
    HVIPS5 غير متواجد حالياً

    تعلم ++c الدرس الثاني أوامر الاشتراطات


    مساء الخير
    من انتقلوا معنا الى الدرس الثاني يبدو انهم سوف يكملون المسيرة الى اخرها واتمنى انا ان اكملها معهم .
    كما تحدثنا عن اللغات بصفة عامة وقلنا ان الاشتراطات من الامور الهامة في اي لغة والآن لانريد ان نعيد ما قلناه سابقا لندخل مباشرة في موضوع اليوم
    المعنى البسيط والقريب لموضوع اليوم انك تريد من برنامجك ان يفعل اشياء معينه عند تحقق شروط معينه ولكن كيف نصيغ هذه الاوامر هذا هو موضوع اليوم
    انك ترى الشروط دائما وربما بدون ان تدري فأول شئ فعلته اليوم عند اتصالك بالانترنت هو ادخال كلمة السر – أليس كذلك – نعم هو كذلك ولا شئ غيره – ان برنامج الاتصال قد وضع شرط صحة كلمة السر لكي يمكنك من الدخول وربما اشياء اخرى مثل عدم انتهاء مدة الاشتراك وصحة اسم المستخدم وهكذا كلها شروط انها ايضا موضوعنا هذا اليوم ومعظم الشروط المستخدمه لقيمتين هي هل هما متساويتان ام احدهما اكبر او اصغر بالاضافة الى المعاملات البولينية Boolean operators
    ومن درس منكم علم الجبر سوف يتذكرها بسرعة ام من نسى او لم يدرسها اصلا فالموضوع بسيط جدا لانك تمارسه في حياتك اليومية ربما دون ان تدري وهي
    AND , OR , NOT
    كمثال من الحياة اليومية
    Ask Mohamad AND Ali
    يجب ان تسأل محمد وعلى وليس واحد منهم فقط بل يجب ان يكون السؤال للاثنين
    Ask Mohamad OR ALI
    اي يجب ان تسأل محمد او على يكفي فقط واحد منهم
    Ask Mohamad NOT Ali
    اي يجب ان تسأل محمد وليس على فلو سألت على فان الشرط غير متحقق

    الجدول التالي يعبر عن طريقة صياغة المعاملات البولينية في لغة سي++
    التعبير أو الصيغة
    التفسير
    ||
    OR
    &&
    AND
    والجدول التالي يعبر عن العلاقات الشرطية وكيف تصاغ في لغة سي++
    التعبير أو الصيغة
    التفسير
    >
    اكبر من فتحة القوس في اتجاه الاكبر
    <
    اصغر من
    ==
    يساوي (تذكر انهم علامتين متجاورتين
    >=
    اكبر من او يساوي
    <=
    اصغر من او يساوي
    !=
    لا يساوي
    تذكر جيدا خطأ من السهل ان تقع فيه ان الشروط غير التخصيص بمعنى انك عندما تخصص قيمة لمتغير فاءنك لابد ان تستخدم علامة يساوي واحدة فقط مثل

    A=5;
    B=A;
    C=18;
    اما في صياغة شرط فاءنك لابد ان تضع علامتين اذا اشترطت التساوي مثل
    if (A==B)
    if (A==18)
    ارجو ان تنتبه لذلك
    ولنأخذ مثال اليوم فقد تأخرنا كثيرا

    // This is a remark do you remember ?
    // It has no effection , just for you , is it?
    #include <iostream.h>
    int main()
    {
    int Num;
    cout<<"Please input a Number : ";
    cin>>Num;
    if(Num < 50)
    {
    cout<<"The Number is less than 50";
    }
    if(Num == 50)
    {
    cout<<"The Number is equal to 50";
    }
    if(Num > 50)
    {
    cout<<"The Number is bigger than 50";
    }
    return 0;
    }

  3. #3
    عضو جديد


    تاريخ التسجيل: Jun 2011
    رقم العضوية: 7
    المشاركات: 2,181
    HVIPS5 غير متواجد حالياً

    رد: تعلم ++c الدرس الثاني أوامر الاشتراطات


    لقد بدأت السطور الحمراء بالامر
    cin<<Num;
    هذا الامر جديد علينا ان معناه ادخل قيمة المتغير Num والذي اعلن عنه في بداية البرنامج على انه عدد صحيح فسوف يتوقف البرنامج عند هذا الامر ليطلب منك ادخال قيمة يخزنها في المتغير Num ليجري عليها العمليات التي تلي السطر المذكور سابقا
    وألآن الى الاوامر التالية موضع شرحنا اليوم
    if(Num < 50)
    {
    cout<<"The Number is less than 50";
    }
    والقاعدة هي الامر if ويفتح قوسين عاديين بينهما شروط حسب القاعدة السابق شرحها في اول الموضوع ثم قوس لبداية بلوك تعليمات واحد لفتح بداية بلوك والاخر للتحديد نهاية بلوك ومابداخل القوسين عدة تعليمات ينفذها البرنامج اذا تحقق الشرط
    وهنا الشرط هو انك اذا ادخلت قيمة اصغر من 50 فمعنى ذلك تحقق الشرط وعليه سوف يطبع البرنامج الرسالة
    cout<<"The Number is less than 50";
    واذا لم يتحقق الشرط فلن يطبع الرسالة السابقه بل سيتحول الى السطور التالية
    if(Num == 50)
    {
    cout<<"The Number is equal to 50";
    }
    بنفس الاسلوب السابق يختبر الامر if ماذا كان الرقم الذي ادخله المستخدم يساوي 50 فاذا كان ذلك صحيحا فسوف يقوم بتنفيذ الامر او الاوامر التي بداخل بلوك الشروط وهي
    cout<<"The Number is equal to 50";
    فاءذا لم يتحقق الشرط فسوف لن ينفذ البرنامج مابداخل بلوك الشروط وينتقل الى السطور التالية
    if(Num > 50)
    {
    cout<<"The Number is bigger than 50";
    }
    فاذا تحقق الشرط هو ان العدد المدخل اكبر من خمسون فسوف ينفذ البرنامج الامر او الاوامر التي بداخل بلوك الشرط وهو الامر
    cout<<"The Number is bigger than 50";
    والا فسوف ينتقل البرنامج الى السطور التالية
    return 0;
    }
    حيث ينتهي البرنامج ويخرج وتذكر قوس اغلاق البلوك وهو البلوك الرئيسي للدالة main

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

    لنأخذ عدة اوامر شرطية في صورة فردية للشرح لدمج كل ماسبق شرحة في دالة واحدة
    if (A == 5 && B == 7)
    {
    نفذ هذه الاوامر عند تحقق الشرط
    }
    الشرط هو ان تكون قيمة المتغير A تساوي خمسة وقيمة المتغير B تساوي 7 لتنفيذ ما بداخل بلوك الشروط فاءذا كانت مدخلاتك كما يلي
    A
    B
    مدى تحقق الشرط
    3
    2
    لايتحقق الشرط
    5
    3
    لايتحقق الشرط
    3
    7
    لايتحقق الشرط
    5
    7
    يتحقق الشرط
    7
    5
    لايتحقق الشرط
    1
    2
    لايتحقق الشرط
    ولمثال آخر بلوك الشروط التالية
    if (A > 5 || B <= 7)
    {
    نفذ هذه الاوامر عند تحقق الشرط
    }
    وقد كان الشرط السابق ان تكون قيمة A اكبر من 5 أو قيمة B اصغر من او تساوي
    7 فلو كانت ادخالاتك كمايلي
    A
    B
    مدى تحقق الشرط
    3
    2
    لايتحقق الشرط
    5
    3
    لايتحقق الشرط
    3
    7
    لايتحقق الشرط
    7
    2
    يتحقق الشرط
    10
    8
    لايتحقق الشرط
    10
    7
    يتحقق الشرط
    دائما يكون امامك حالة من اثنين مهما كانت الشروط التي تضعها
    · الحالة الاولى تحقق الشرط او بمعنى آخر TRUE
    · الحالة البديلة عدم تحقق الشرط او بمعنى FALSE
    ان مابداخل اقواس الشروط ولا اقصد بلوك الشروط هو عملية حسابية – دائما كل شئ بالنسبة للكومبيوتر هي عمليات حسابية كل شي في الدنيا يمكن ان يعبر عنه بارقام من اسمك الى صورتك مرورا بخريطة بلدك او نوع الفاكهة التي تحبها – كل شئ نعم كل شئ هو عمليات حسابية – ربما نتطرق الى ذلك لااحقا – لاادري قد يجبرنا احد الامثلة على شرح ذلك – وناتج العملية الشرطية بالنسبة للكومبيوتر هو اما TRUE لينفذ مابداخل بلوك الشروط او FALSE لينفذ شروط اخرى داخل بلوك else اذا كان موجودا او يستكمل باقي سطور البرنامج كما حدث مع المثال السابق هذا يقودنا الى امر آخر من اوامر الشروط وهو في لغة c++ ودائما يكون تابع للامر if وهو الامر
    else
    انت لاتحتاج الآن لان اقول لك ان اوامر لغة سي في مجملها تكتب بحروف صغيرة ودعني اكمل شرح الامر السابق انه امر غير مستقل انه تابع بالطبع انت توافقني على ذلك انك لايمكن ان تسمع شخص يقول والا – الا اذا كان قد ذكر اشياء قبلها اذا هذا الامر تابع فاذا كنت تكره الاشخاص التابعين من ذوي الشخصيات الضعيفة فارجو الا يمتد بغضك هذا الى الامر else لانه امر هام ويسهل خطوات كثيرة وان كان يسهل الاستغناء عنه ودعنا نعبر عن ذلك بعدة سطور
    if(GiveMe >= 50)
    {
    cout<<"Thank you – I like to take more than or equal 50 Rayals";
    }
    else
    {
    cout<<"I am very angry – I don’t like to take less than 50 Rayals";
    }
    جزء البرنامج السابق يعبر عن رد فعل احد الشحاذين فاذا اعطيته مبلغ اكبر من او يساوي 50 ريالا سوف يتحقق الشرط والنتيجة تكون TRUE لينفذ مابداخل بلوك الشروط لينفذ الامر الخاص بطبع رسالة شكر ليخبرك بأنه (الشحاذ ولست انا بالطبع) يقول لك شكرا انا دائما احب ان تعطيني مبلغ خمسون ريالا او اكثر واذا لم يتحقق الشرط اي ان نتيجة العملية الحسابية FALSE كأن تكون قد اعطيته اقل من 50 ريالا فسوف ينتقل التنفيذ مباشرا الى البلوك التابع else لينفذ مابداخل بلوكه وهي هنا رسالة ضيق وتبرم بأنه لايحب ان يأخذ اقل من خمسون ريالا حتى لوكانت المبلغ يقل بهللة واحدة فقط عن الخمسون ريالا انها عمليات حسابية ياصديقي العزيز وانا انصح من يمتهنون هذه المهنه ببرمجة روبوت بجزء البرنامج السابق مع مزيد من الشكر والأدعية في حالة تحقق الشرط وتبرم وضيق ولامانع من سيل من الشتائم في حالة عدم تحقق الشرط . ياله من روبوت رائع وسوف يختزن بداخله مبالغ مالية كثيرة سواء لخفة دمه في حالة تحقق الشرط او لقلة ادبه في حالة عدم تحقق الشرط.
    سوف تختتم هذا الدرس بهذا الملخص الذي قد يقود الى قاعدة هامة
    if(FALSE)
    {
    Not executed if its false
    }
    else
    {
    do all of this
    }

  4. #4
    عضو جديد


    تاريخ التسجيل: Jun 2011
    رقم العضوية: 7
    المشاركات: 2,181
    HVIPS5 غير متواجد حالياً

    تعلم ++c الدرس الثالث الحلقات والتكرارات


    تعلم ++c الدرس الثالث الحلقات والتكرارات
    تعلم ++c الدرس الثالث الحلقات والتكرارات
    تعلم ++c الدرس الثالث الحلقات والتكرارات

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

    #include <iostream.h>
    int main()
    {
    int x;
    for(x=0;x<100;x++)
    {

    cout<<x<<endl;
    }
    return 0;
    }


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

    الصيغة
    التفسير
    for
    امر اللغة لعملية التكرار
    (
    قوس مفتوح يوضح بداخله بارامترات الامر
    x=0;
    المتغير = رقم بداية الحلقات
    x<100;
    شرط نهاية الحلقات
    x++
    المتغير يزيد بمقدار واحد مع بداية كل حلقة – لاتضع بعده فاصلة منقوطة
    )
    قوس نهاية بارامترات الامر – لاتضع بعده فاصلة منقوطة
    {
    قوس بداية بلوك الاوامر المطلوب تكرارها
    بداخل اقواس البلوك توضع الاوامر المطلوب تكرارها
    }
    قوس نهاية بلوك الاوامر المطلوب تكرارها

    بداخل بلوك الاوامر تم تنفيذ الامر

    cout<<x<<endl

    وهو امر يقوم بطبع قيمة x التي تتغير في كل مرة ابتداء من صفر حسب ماذكرت ان
    X=0 وتزيد في كل مرة بمقدار 1 حسبما ذكرت ان x++ وذلك حتى يصل الى 99 حسبما ذكرت ان x<100
    وendl تعني end of line اي انتقل الى سطر جديد كلما طبعت قيمة حتى لا يسرد طبع الارقام متجاورة بل يطبع على كل سطر قيمة المتغير وبالتالي ستكون مخراجات البرنامج كما يلي
    0
    1
    2
    3
    4
    .
    .
    .
    99

    لنستفيد اكثر من قوة الحلقات التكرارية وايضا نرى امكانات اخرى لها بوضع حلقة داخل حلقة كما يلى في البرنامج الذي يطبع جدول الضرب من جدول واحد حتى جدول 12
    #include <iostream.h>
    int main()
    {
    int x , y , z;
    for(x=1;x<13;x++)
    {
    for(y=1;y<13;y++)
    {
    z = x * y;
    cout<<x<<”*”<<y<<”=”<<z<<endl;
    }
    }

    return 0;

    }
    كما تعلم ان السطور الزرقاء سبق دراستها ولكن ننوه فقط اننا اعلنا عن ثلاث متغيرات لاعداد صحيحة الاول للحلقة الاولى والثاني للحلقة الثانية والثالث لاحتواء حاصل الضرب وهو الهدف من البرنامج.
    بنفس ماسبق شرحه وضعنا حلقة تكرارية تبدء من رقم واحد وتنتهي برقم 12 وتزيد بمقدار واحد واوامر هذه الحلقة مكتوبة للتوضيح بخلفية صفراء حيث بدأت الحلقة بالصيغة السابق شرحها ثم قوس بداية البلوك وقوس نهاية البلوك حيث يوضع مابين القوسين سلسلة اوامر لتنفيذها كما سبق واتفقنا عليه
    for(x=1;x<13;x++)
    {

    اوامر مطلوب تنفيذها

    }

    وبداخل اقواس البلوك للحلقة الاولى مطلوب وضع اوامر للتنفيذ فكانت اوامر التنفيذ داخل البلوك عبارة عن حلقة اخرى وما المانع فالحلقات وغيرها هي نفسها اوامر والحلقه الاخرى كانت عبارة عن عداد يعد من الرقم 1 الى الرقم 12 وهي ايضا تحتاج الى صيغة معينة واقواس بلوك للتنفيذ وهي موضوعة في البرنامج بخلفية خضراء كما يلي
    for(y=1;y<13;y++)
    {
    z = x * y;
    cout<<x<<"*"<<y<<"="<<z<<endl;
    }
    وبداخل بلوك الاوامر للحلقة الثانية وضعنا عدة اوامر لتفى بالغرض الذي من اجله تم عمل البرنامج وهو جدول الضرب – عبارة عن معادلة لحساب حاصل ضرب المتغيرين x و y
    ويوضع الناتج في المتغير z كما يلي

    z = x * y;
    بالطبع تلى ذلك صيغة لطبع مخرجات البرنامج والا ما الفائدة منه اذا لم ارى نتيجة عملى وهذه الصيغة سأشرح لك فيما بعد وفي هذا الدرس لماذا اخترت هذه الصيغة بالتحديد فهو ليس موضوعنا الآن ودعني اشرح لك الاهم من ذلك وهو ميكانيكية عمل الحلقتين

    ·يبدء البرنامج بالدخول الى الحلقه الاولى ويخصص للمتغير اكس القيمة واحد حيث انها قيمة عداد البداية ثم يدخل الى داخل اقواس بلوكه لتنفيذ ما بداخله فيجد حلقه اخرى فيبدء بتنفيذها وطلبت الحلقة ان يكون متغيرها واي يبدء بالقيمة واحد وينتهي بالقيمة 12 ثم تدخل الحلقة الثانية الى بلوك اوامرها فتجد معادلة يضرب فيها قيمة اكس التي هي واحد الآن وتتغير قيمة واي فيها ثم طبع النتائج وتظل الحلقة الداخلية تنفذ بتغير واي مع ثبات اكس بالطبع وتكون النتائج كما يلى

    1 * 1 = 1
    1 * 2 = 2
    1 * 3 = 3
    .
    .
    .
    1 * 12 = 12
    وعند وصول نهاية عداد الحلقة الداخلية الى 12 وهو نهاية الحلقة ينتهي تنفيذ الحلقة فيستمر البرنامج فيجد امامه قوس نهاية الحلقه الخارجية ذو الخلفية الصفراء فيعود الى الحلقة الخارجيه حيث تزيد قيمة اكس بمقدار واحد وتصبح قيمتها = 2 فيدخل الى بلوك اوامره كما سبق فيجد حلقة اخرى تبدء من واحد وتنتهي ب 12 وبداخلها معادلة وامر طبع فيكون التنفيذ كما يلي
    2 * 1 = 2
    2 * 2 = 4
    2 * 3 = 6
    .
    .
    .
    2 * 12 = 24

    وهكذا يستمر التنفيذ الى ان تصل الحلقة الخارجية الى نهايتها بالرقم 12 واثناء ذلك تنفذ الحلقة الداخلية من بدايتها الى نهايتها اي من 1 الى 12 وتطبق المعادلة وامر الطبع ليكون اخر تنفيذ كما يلي
    12 * 1 = 12
    12 * 2 = 24
    12 * 3 = 36
    .
    .
    .
    12 * 12 = 144

    شرح صياغة امر الطبع بالصورة التالية

    cout<<x<<"*"<<y<<"="<<z<<endl;

    مابداخل علامات الاقتباس دائما يطبع كما هو وهو مميز اعلاه بالخلفية الخضراء وكل مايوضع داخل علامة الاقتباس يطبع نصه كما هو اما ماهو خارج علامات الاقتباس بين ازواج الاقواس >>متغير>> فيطبع قيمة المتغير وليس اسم المتغير فمثلا x لاتطبع x ولكن تطبع قيمتها فمثلا 1 – 2 – 3 ----- 12 حيث انها متغيرات وتميز اعلاه بالخلفية الصفراء وذلك للحصول على شكل مقبول يوضح العملية المطلوبة لتظهر النتائج بالصورة
    12 * 12 = 144
    والآن الى النوع الثاني من الحلقات وهو ابسط من السابق ولكن السابق اكثر استخداما واكثر قوة

    While

    #include <iostream.h>

    int main()
    {
    int x=0;
    while(x<100)
    {
    cout<<x<<endl;
    x++;

    }
    return 0;
    }

    سوف اشرحها لك في سطور قليلة لبساطتها الاوامر باللون الازرق سبق شرحها اما الحلقة موضع النقاش فهي باللون الاحمر وصيغتها
    while(x<100)
    وبعد الاعلان عن المتغير اكس خلاصة شرح الامر السابق (أعد تنفيذ ما بداخل البلوك طالما اكس او المتغير اقل من 100 ثم اقواس بلوك تضع ماشئت بداخله من اوامر وقوس نهاية البلوك ويزيد معنا فقط عداد للمتغير ليزيده بالمقدار الذي تريده ويوضع في اي مكان داخل الحلقة او حسب افكارك عن البرنامج المهم لاتنساه والا سوف يدور البرنامج داخل الحلقة الى الابد حيث ان شرط نهايتها ان تزيد اكس عن 100 وطالما لم تضع عداد زياده للمتغير فلن يتحقق الشرط وبالتالى لن تنتهي الحلقه الى الابد ويظل يعمل الكومبيوتر بلا نهاية للبرنامج ويميز العداد بالخلفية الصفراء واليك جدول صياغة الامر الذي تعودنا عليه.
    الصيغة
    التفسير
    while
    امر اللغة لعملية التكرار
    (
    قوس مفتوح يوضح بداخله بارامترات الامر
    X<100
    المتغير مع شرط لنهاية الحلقة
    )
    قوس نهاية بارامترات الامر – لاتضع بعده فاصلة منقوطة
    {
    قوس بداية بلوك الاوامر المطلوب تكرارها
    بداخل اقواس البلوك توضع الاوامر المطلوب تكرارها
    x++;
    ولا تنسى عداد الزياده او النقصان ليتحقق الشرط لانهاء تنفيذ الحلقة
    }
    قوس نهاية بلوك الاوامر المطلوب تكرارها


    لقد ذكرت لك كلمة عداد الزيادة او النقصان نعم يمكن ان يتناقص العداد اذا كانت صيغة البرنامج كما يلي وذلك لطبع قيمة المتغير تناقصيا من 99 الى صفر بعد ان كان في البرنامج السابق تصاعديا من صفر الى 99 ويكون التعديل كما يلي

    #include <iostream.h>

    int main()
    {
    int x=99;
    while(x>0)
    {
    cout<<x<<endl;
    x--;

    }
    return 0;
    }
    بدء هنا تخصيص المتغير مع الاعلان بالقيمة 99 ثم شرط التكرار ان يكون متى كانت قيمة المتغير اكبر من الصفر ثم عداد تناقصي يظل يطرح واحد من القيمة الى ان يصل الى الصفر ثم يطرح من الصفر 1 فتصبح قيمته –1 وبالتالي لايتحقق الشرط حيث ان قيمة –1 ليست اكبر من الصفر وتنتهي الحلقه كما نريد لاحظ العداد التناقصي بالخلفية الصفراء









    تعلم ++c الدرس الثالث الحلقات والتكرارات
    تعلم ++c الدرس الثالث الحلقات والتكرارات
    تعلم ++c الدرس الثالث الحلقات والتكرارات

  5. #5
    عضو جديد


    تاريخ التسجيل: Jun 2011
    رقم العضوية: 7
    المشاركات: 2,181
    HVIPS5 غير متواجد حالياً

    تعلم ++c الدرس الرابع الدوال


    تعلم ++c الدرس الرابع الدوال
    تعلم ++c الدرس الرابع الدوال
    تعلم ++c الدرس الرابع الدوال

    مساء الخير
    موضوع اليوم عن الدوال او الروتينات الفرعية وهي اجزاء من البرنامج مثل الدالة الرئيسية تقوم بعمل مهمة معينة تتكرر في برنامجك او تستخدمها في برامج اخرى او حتى اذا كانت لا تتكرر من فوائدها
    · تقسيم البرنامج الى اجزاء صغيرة تستدعى وقت اللزوم
    · عدم ازدحام الدالة الرئيسية للبرنامج بأوامر كثيرة
    · تقسيم البرنامج الى اجزاء يمكن اختبارها منفصلة لسرعة تحديد الخلل بالبرنامج
    · توفير المجهود والوقت والتفكير بعمل مكتبة خاصة بك تعيد استخدام الدوال التي استخدمتها في برنامج وذلك في برنامج آخر عند اللزوم
    · تقسيم العمل بين المبرمجين عن العمل في مشروع جماعي لانتاج برنامج كبير
    · تبادل الخبرات بين مطوري البرامج بنشر اجزاء يستخدمها الآخرون في برامجهم
    لتطبيق ذلك دعنا نحضر البرنامج الذي تناولناه في الدرس الثالث لاعطائه مزيدا من القوة والتطوير باستخدام الدوال
    #include <iostream.h>
    int main()
    {
    int x , y , z;
    for(x=1;x<13;x++)
    {
    for(y=1;y<13;y++)
    {
    z = x * y;
    cout<<x<<”*”<<y<<”=”<<z<<endl;
    }
    }
    return 0;
    }
    لوكنت قد تذكرت الآن فان البرنامج كان يقوم بعمل جدول الضرب من جدول واحد الى جدول 12 واحتوى كامل التعليمات داخل الدالة الرئيسية دعنا نستخدم الدوال ولنسمي هذه الدالة DoiT
    #include <iostream.h>
    void DoiT (void);
    int main()
    {
    DoiT ();
    }
    // This is the new function
    void DoiT (void)
    {
    int x , y , z;
    for(x=1;x<13;x++)
    {
    for(y=1;y<13;y++)
    {
    z = x * y;
    cout<<x<<”*”<<y<<”=”<<z<<endl;
    }
    }
    return ;
    }
    مايخص الدالة الجديدة مكتوب باللون الاحمر فقبل الدالة الرئيسة main تم الاعلان عن نموذج الدالة او ما يسمى prototype بهذا الشكل
    void DoiT (void);
    وفيه نخبر الكومبايلر بشكل وما ستكون عليه الدالة كما يلي
    الصيغة
    التفسير
    void
    ماهي القيمة التي سوف تعيدها الدالة للدالة التي استدعيت منها وذلك بالامر return هنا استخدمنا void بمعنى لاشئ وبالتالي علينا استبدال return 0 التي استخدمناها في الدرس الثالث الى الامر return فقط حيث اننا اعلنا ان الدالة غير مطلوب منها اعادة شئ
    DoiT
    اسم تختاره لدالتك بحيث يكون معبرا قليلا عما ستفعل انا هنا لم اختر اسم معبر
    (
    قوس لاحتواء البارامترات التي ستمرر للدالة
    void
    البارامترات التي ستمرر للدالة وهنا اخترنا void بمعنى لن نمرر لها شئ
    );
    قوس اغلاق لمجموعة البارامترات يليها فاصلة منقوطة
    والآن الى باقي سطور البرنامج لاستكمال الشرح
    int main()
    {
    DoiT ();
    }
    كما سبق ولابد ان نعلن عن الدالة الرئيسية للبرنامج وهو الزام ثم داخل بلوك الدالة الرئيسية قمنا بالنداء على الدالة للتنفيذ وذلك بكتابة اسمها ثم قوسين لايوجد بينهما شئ هل تتذكر لماذا لان البارامترات المطلوب تمريرها للدالة لم تعطى اي void ولكن بالطبع لاتكتب void ولكن يكون ذلك في الاعلان عن الدالة فقط وهو على الصورة التالية
    DoiT();
    تلى ذلك قوس نهاية البلوك للدالة الرئيسة ثم جسم او هيكل الدالة نفسها ويبدء بنفس الاعلان عن اسم الدالة او البروتوتايب ولكن بدون فاصلة منقوطة في النهاية وكما تلاحظ وسبق ان قلنا ان الفاصلة المنقوطة لاتأتي بعد main() وبنفس الطريقة لاتأتي في مقدمة بلوك الدالة

    void DoiT (void)
    {
    ضع اوامر الدالة هنا
    }
    ثم قوس بداية بلوك الدالة ثم مابداخلها من اوامر وقوس النهاية ودعنا ننتهز فرصة الدوال لاعطاءمزيد من التحسينات على البرنامج حيث ان البرنامج ينتج فقط جدول الضرب من جدول 1 الى جدول 12 فلماذا لانجعلها دالة عامة تنتج مايحلو لنا من جداول ضرب من المؤكد انك تتفق معي في ذلك وبذلك نستفيد من قوة الدوال وتصبح دالة عامة غير موجهه لمهمة ثابته فنحن نريد ان نحدد نحن بداية الجداول ونهايتها فتارة تطبع من جدول 7 الى جدول 20 وتارة تطبع من جدول 17 الى 40 وهكذا اليس هذا افضل سوف نمرر للدالة قيمة البداية وقيمة النهاية مع اجراء التعديلات اللازمة لذلك.
    #include <iostream.h>
    void DoiT (int Start , int End);
    int main()
    {
    int Start , End;
    cout<<"Please input start value ?: ";
    cin>>Start;
    cout<<"Please input end value ?: ";
    cin>>End;
    DoiT (Start , End);
    }
    // This is the new function
    void DoiT (int Start , int End)
    {
    int x , y , z;
    for(x=Start;x<End+1;x++)
    {
    for(y=Start;y<End+1;y++)
    {
    z = x * y;
    cout<<x<<”*”<<y<<”=”<<z<<endl;
    }
    }
    return ;
    }
    لتسهيل الامر عليك وضعت لك لون اصفر على التعديلات التي اجريتها للوصول الى الهدف المنشود لقد وضعنا في اقواس البروتوتايب اعلان عن تمرير متغيرين صحيحين الى الدالة
    void DoiT (int Start , int End);
    ثم داخل الدالة الرئيسية اعلنا عن استخدام متغيرين جديدين من نوع الاعداد الصحيحة هما
    int Start , End;
    تلى ذلك امر بطبع رسالة تطلب منك ادخال قيمة بداية الجدول وبعده امر بعملية الادخال نفسها ليعرف البرنامج القيمة المبدئية لبداية الجدول
    cout<<"Please input start value ?: ";
    cin>>Start;
    مثلهما تماما للمتغير الثاني ليعرف البرنامج قيمة النهاية والتي كانت ثابتة سابقا على القيمة 12 ونحن نريد برنامج اكثر مرونة ومطوع لكل الحالات
    cout<<"Please input end value ?: ";
    cin>>End;
    بعد ان ادخلت قيمة البداية والنهاية فكما ذكرنا تم تعديل الدالة لتمرير متغيرين لها يتغيران مع كل ادخال والآن لننادي الدالة ممرين لها القيمتين الذين ادخلهما مستخدم البرنامج
    DoiT (Start , End);
    ثم اجرينا تعديل على اسم الدالة نفسها ليوافق البروتوتايب او اعلان الدالة الجديد في مقدمة البرنامج طبعا بدون فاصلة منقوطة
    // This is the new function
    void DoiT (int Start , int End)
    {
    ثم تلى ذلك وضع القيمة Start الممررة للدالة كبداية عداد للحلقتين بدلا من القيمة 1 وكذلك المتغير End الممرر الى الدالة كنهاية لعداد الحلقتين بدلا من القيمة 13 في مثال الدرس الماضي
    ويجب دائما ان تفكر في احتمالات خطأ مدخل البيانات فمثلا ماذا لو أخطأ وادخل قيمة البداية اكبر من قيمة النهاية بالطبع سيحدث خطأ بالبرنامج وسيحدث نفس الخطأ اذا ادخلهم كقيمتين متساويتين وعليه يجب وضع شرط لذلك كما سيلي توضيحه كتحسين للبرنامج
    #include <iostream.h>
    void DoiT (int Start , int End);
    int main()
    {
    int Start , End;
    A1:
    cout<<"Please input start value ?: ";
    cin>>Start;
    cout<<"Please input end value ?: ";
    cin>>End;
    if (Start >= End) goto A1;
    DoiT (Start , End);
    }
    لقد وضعت الاضافة الجديدة بخلفية حمراء للتوضيح وهي عبارة عن عنوان اختياري قبل عملية الادخال ثم بعد الادخال شرط انه اذا كانت قيمة البداية اكبر من اوتساوي قيمة النهاية فعليك بالذهاب الى العنوان المحدد A1 اي اعادة الادخال ولامانع من اضافة رسالة تحذير لتوضيح فيما اخطأ مدخل البيانات




    تعلم ++c الدرس الرابع الدوال
    تعلم ++c الدرس الرابع الدوال
    تعلم ++c الدرس الرابع الدوال

  6. #6
    عضو جديد


    تاريخ التسجيل: Jun 2011
    رقم العضوية: 7
    المشاركات: 2,181
    HVIPS5 غير متواجد حالياً

    رد: تعلم ++c الدرس الرابع الدوال


    الى مثالنا الاخير وهو دالة تعيد قيمة ويممر اليها بيانات
    #include <iostream.h>
    float Mul (float A , float B);
    int main()
    {
    float A , B , R;
    cout<<"Please input A ?: ";
    cin>>A;
    cout<<"Please input end B ?: ";
    cin>>B;
    R = Mul (A , B);
    cout<<R;
    }
    float Mul (float A , float B)
    {
    return A*B;
    }
    الدالة الجديدة اسميناها Mul وتعيد هذه الدالة قيمة عشرية وهي حاصل ضرب قيمتين عشريتين تم تمريرها اليها وكما ترى المثال بسيط ومعظم اجزائه سبق شرحها

  7. #7
    عضو جديد


    تاريخ التسجيل: Jun 2011
    رقم العضوية: 7
    المشاركات: 2,181
    HVIPS5 غير متواجد حالياً

    تعلم ++c الدرس الخامس هياكل البيانات


    تعلم ++c الدرس الخامس هياكل البيانات
    تعلم ++c الدرس الخامس هياكل البيانات
    تعلم ++c الدرس الخامس هياكل البيانات


    مساء الخير
    نتناول اليوم موضوع رائع وقوي جدا من الناحية البرمجية- لقد تعلمت فيما سبق كيف تعلن عن بيانات حسب نوعها وقد كنت تعلن عنها بصورة منفصلة الآن وبنفس الطريقه سوف نعلن عنها ولكن في صورة مجمعة لتكون هيكل للبيانات وهذا الموضوع مفيد جدا في برمجه قواعد البيانات وسترى فوائد ذلك ولو اننا لم ندرس تخزين البيانات في ملفات على الاقراص حيث سنتناول ذلك في درس قادم ولكن عند تجميع البيانات في هياكل اذا قمت بتخزين الهيكل نفسه سيتم تخزين جميع عناصره دفعة واحدة دون ان تنسى اي عنصر وبالتالي يعطيك ميزة اضافيه عما لو كنت تعلن عن البيانات في صورة منفصلة كما سترى
    ومثالنا اليوم عن قاعدة البيانات الافتراضية التالية سوف ندرسها بالطريقه العاديه وبطريقة هياكل البيانات لتعرف الفرق وتفهم الموضوع وفي نفس الوقت تدرك ميزات وفوائد هياكل البيانات
    لنفرض ان هناك مصنع يعمل على فترتين ولكل عامل فيه سجل بيانات بالطبع لعامل الفترة الاولى والآخر لعامل الفترة الثانية ونفترض للتبسيط ان بيانات كل عامل تحتوي على اسمه ورقمه الوظيفي وراتبه اليومي حتى انه لوتغيب احدى الفترات وضع راتب يومه بالقيمة صفر حتى يتم حساب راتبه الشهري بصورة صحيحة وسيكون الاعلان عن البيانات بالصورة التاليه لنتفق عليها وفيها فائدة تكرار اشياء سبق الاشارة اليها في دروس سابقه
    الصيغة
    المتغير او وعاء البيانات
    char [30]
    اسم الموظف افترضنا انه متغير حرفي سعته 30 حرف
    int
    الرقم الوظيفي للموظف وهو عدد صحيح
    float
    الراتب اليومي للموظف وهو عدد عشري لان الراتب من المؤكد انه سيحتوي على كسور
    دعنا الآن نعلن عن هذه البيانات بالصورة العادية لنعرف الفرق
    بيانات موظف الفترة الاولى
    char [30] Name1;
    int Code1;
    float Wage1;
    بيانات موظف الفترة الثانية
    char [30] Name2;
    int Code2;
    float Wage2;
    الصورة السابقه لتمثيل بيانات البرنامج مع اثنين من الموظفين يعملون لفترتين وكلما ادخلت بيانات اسم موظف الفترة الاولى سوف تستخدم المتغير Name1 وللفترة الثانية ستستخدم المتغير Name2 فماذا لو بدلت المتغيرين بالخطأ بالطبع سيحدث خلل كبير بالبرنامج دعنا نمثل ماسبق تماما بالطريقة الجديده عن طريق استخدام هياكل البيانات
    استخدام هياكل البيانات
    struct OurDataBase
    {
    char [30] Name;
    int Code;
    float Wage;
    }L1,L2;
    انظر الى الصورة السابقه كم هي مختصرة انها رائعة وانا ارى فيها اختصار مفيد ودعنا نرى كيف نصيغ ذلك بالجدول الذي تعودنا عليه للتوضيح
    الصيغة
    التفسير
    struct
    هو الامر الذي ندرسه الان ومعناه الاعلان عن هيكل بيانات
    OurDataBase
    اسم الهيكل سميه كما شئت
    {
    قوس بداية البلوك
    ضع ما يحلو لك من انواع بيانات داخل البلوك
    }
    قوس نهاية البلوك – لاتنساه من فضلك
    L1,L2;
    متغيرات اختياريه ترمز لمن سيشارك في استخدام البيانات المعلنه للهيكل
    كما رأيت بالمثال لم نستخدم متغير اسم للموظف الاول وآخر للموظف الثاني بل استخدمنا متغير واحد وسوف يتشارك اي عدد حسب تصميم الهيكل في استخدام بيانات الهيكل ولنوضح ذلك
    للتعبير عن اسم الموظف الاول او موظف الفترة الاولى
    L1.Name
    للتعبير عن اسم الموظف الثاني او موظف الفترة الثانية
    L2.Name
    للتعبير عن رقم الموظف الاول او موظف الفترة الاولى
    L1.Code
    للتعبير عن رقم الموظف الثاني او موظف الفترة الثانية
    L2.Code
    للتعبير عن الراتب اليومي للموظف الاول او موظف الفترة الاولى
    L1.Wage
    للتعبير عن الراتب اليومي للموظف الثاني او موظف الفترة الثانية
    L2.Wage
    هل رأيت كم هي بسيطة ربما احتوى هيكل البيانات على مائة متغير مثلا سوف تخزنهم وتسترجعهم بمنتهى السرعة كما سترى فيما بعد ويمكن ايصبح تدوال البيانات السابقة داخل البرنامج سواء بالادخال من مستخدم البرنامج او بالتخصيص كما يلي
    L1.Name = “Mohamad Hasan”;
    L1.Code = 120;
    L1.Wage = 13.50;
    L2.Name = “Ahamd Ali”;
    L2.Code = 270;
    L2.Wage = 0;
    بالطبع هذه فكرة برنامج ويمكن اضافة المزيد من التحسينات من خلال تحليل البيانات فمثلا جمع المتغير L1.Wage لمدة شهر سوف يعطيك راتبه الشهر وجمع القيم التي تساوي صفر للمتغير L1.Wage لمدة شهر سوف يعطيك عدد ايام غيابه خلال الشهر وهذا يبقى دور تحليل البيانات لاستخلاص نتائج ومخرجات – المثال السابق كان لتوضيح الفكرة فقط




    تعلم ++c الدرس الخامس هياكل البيانات
    تعلم ++c الدرس الخامس هياكل البيانات
    تعلم ++c الدرس الخامس هياكل البيانات

  8. #8
    عضو جديد


    تاريخ التسجيل: Jun 2011
    رقم العضوية: 7
    المشاركات: 2,181
    HVIPS5 غير متواجد حالياً

    تعلم ++c الدرس السادس المصفوفات


    تعلم ++c الدرس السادس المصفوفات
    تعلم ++c الدرس السادس المصفوفات
    تعلم ++c الدرس السادس المصفوفات


    لمصفوفات من الادوات الهامة في لغات البرمجة لتخزين قيم عددية او حرفية تحت نفس الاسم بمعنى آخر دعنا نرى المثال التالي لتخزين عدد
    int A;
    A=5;
    في هذا المثال لم نستطع ان نخزن في المتغير المعلن عنه وهو عدد صحيح سوى قيمة واحدة فقط ولو حاولت (بالطبع تتفق معي في هذا ) تخزين قيمة اخرى فسوف تلغي القيمة الاولى لتحل محلها القيمة الجديده تقوم المصفوفات بعلاج هذه المشكلة مثال لذلك.
    int A[50];
    اعلن عن مصفوفة اعداد صحيحة تستطيع تخزين خمسون عدد صحيح كما يلي
    A[0] = 5;
    A[1] = 10;
    .
    A[49] = 300;
    مع ملاحظة ان التعبير التالي سوف يعتبر خطأ جسيم مع لغة سي++
    A[50] = 200;
    رغم ان المصفوفة تتسع ل 50 رقم الا ان المصفوفة تبدء من العنصر A[0] وتنتهي بالعنصر A[49] وبذلك يكون مجموع العناصر 50 كما طلبت شاملا الرقم صفر وفي لغة سي++ دائما نبدء العد من صفر وليس من 1
    ويمكن ان تكون المصفوفة ذات اتجاهين مثل
    15 65 33 44
    1 0 11 22
    33 52 11 17
    18 25 14 41
    لتمثل بلغة سي ++ كما يلي
    int A[4][4];
    حيث يكون العدد 44 المظلل بالاحمر هو
    A[0][0] = 44;
    ويكون العدد 18 المظلل بالاخضر هو
    A[3][3] = 18;
    وافضل طريقة لتعبئة وتخصيص قيم لمصفوفة وللتعامل مع المصفوفات بصفة عامة هي عمل looping باستخدام for او غيرها كما سبق ووضحنا ذلك وكمثال لملئ المصفوفة التالية بالقيمة صفر
    int A[100];
    int I;
    for (I = 0 ; I < 100 ; I++)
    {
    A[I] = 0;
    }
    بالطبع الدوران السابق يغير قيمة العداد من صفر الى 99 ووضعنا داخل البلوك تخصيص لعناصر المصفوفة وبدلا من وضع قيمة عددية لتشير لعنصر بالمصفوفة وضعنا رمز العداد حيث انه سوف يتغير مع الدوران الذي يحدث وبالتالي تتخصص القيم حسب الترتيب
    ولتخصيص القيم صفر مثلا لمصفوفه ذات اتجاهين
    int A[10][10] , I , J;
    for (I = 0 ; I < 10 ; I++)
    {
    for (J = 0 ; J < 10 ; J++)
    {
    A[I][J] = 0;
    }
    }
    بوضع دورتين واحدة تدور على الصفوف حتى تنهيها وتعود لتغير الصف وهكذا كما سبق وتعلمت
    ولنا في المصفوفات مآرب أخرى
    لاتحتوي لغة سي ++ على تعريف ثابت وداخلي للمتغيرات الحرفية ولذلك يتم تلافي ذلك باستخدام المصفوفات ربما يعترض واحد من المتابعين لهذه الدروس بأن الامر char يقوم بذلك نعم هو كذلك ولكنه يعرف المتغير على انه حرف واحد فقط ونحن سنتحايل عليه بالمصفوفات كما يلي
    char Q;
    Q = ‘A’;
    عرفنا المتغير Q على انه حرف وبالتالي لانستطيع تخزين فيه سوى القيمة A فاءذا طلبت طباعة قيمة المتغير Q سيقوم البرنامج بطبع الحرف A فماذا لو اننا نريد تخزين عدة حروف تمثل اسم شخص اذا علينا بمصفوفة حروف كما يلي
    char Q[40];
    Q = “Mohamad Hasan”;
    هل رأيت كيف تغلبنا على ذلك اعتمد الصيغة السابقة مؤقتا حتى الوصول لدرس يعطيك مزايا اكثر وشرح اوضح للمتغيرات الحرفية اننا لن نتأخر كثيرا عليك فهو الدرس القادم




    علم ++c الدرس السادس المصفوفات
    تعلم ++c الدرس السادس المصفوفات
    تعلم ++c الدرس السادس المصفوفات

  9. #9
    عضو جديد


    تاريخ التسجيل: Jun 2011
    رقم العضوية: 7
    المشاركات: 2,181
    HVIPS5 غير متواجد حالياً

    تعلم ++c الدرس السابع المتغيرات الحرفية


    تعلم ++c الدرس السابع المتغيرات الحرفية
    تعلم ++c الدرس السابع المتغيرات الحرفية
    تعلم ++c الدرس السابع المتغيرات الحرفية

    لقد تحدثنا في الدرس السابق عن تخزين الحروف في مصفوفات وألان سوف نعيد ما قلناه بشئ من التفصيل لنأخذ مثال مشابه لما سبق تماما
    char A[50];
    سوف تتذكر الآن ماقلناه بأن المصفوفة السابقة تقوم بتخزين اسم او مجموعة حروف عددها 50 حرف شاملا المسافات التي بين الاسماء فعند ضغطك على قضيب المسافات يعتبر حرف ولكنه ليس له شكل لينتج المسافة بين الكلمات المهم ان المجموع 50 حرف تبدء المصفوفة من صفر الى 49 كما قلنا سابقا ان مصفوفات سي++ تبدء من صفر وليس من واحدد ولذلك الاعداد من صفر الى 49 هي 50 عدد وبالتالي عدد الحرف المخزنة هي 50 حرف كما سبق وطلبت وتم تلبية طلبك كل ذلك قلناه سابقا ولكن دعني اضيف بأن عدد الحروف التي سوف تدخلها سوف تكون 49 فقط وليس 50 لان سي++ تضيف في نهاية المتغير الحرف رقم 50 من عندها وهو الحرف \0 وهو يعني نهاية المتغير الحرفي ليعرف نظام التشغيل بأن هذه هي نهاية المتغير ولا يوجد شئ بعدها والرمز السابق يطلق عليه NULL character
    وخلاصة القول ان تعلن عن المصفوفة بعدد يزيد بواحد عن سعتها المدخلة
    لا تتضايق مما تفعلة سي++ من اضافة رمز على حسابك الخاص في نهاية المتغير انك تفعل ذلك وانا ايضا افعل ذلك فعند كتابة فقرة مكونة من حروف نضع نقطة في نهاية الكلام لنفيد القارئ بأن الكلام انتهى – أليس كذلك
    استخدام المؤشرات للاعلان عن متغيرات الحروف
    يمكنك ايضا ان تعلن عن المتغير الحرفي باستخدام المؤشرات وهو درس كان يجب ان اشرحة ضمن الدروس السابقة ولكني رأيت ان اتركه للنهاية مع انه من المفترض ان يكون في البداية ولكن لصعوبته قليلا تلافيت وضع امثلة تحتوى مؤاشرات ما أمكن في البداية انتظارا لشرحة – يمكنك ان تعلن عن متغير حرفي بهذه الطريقة
    char *A;
    وهذه طريقة اخرى للاعلان عن متغيرات حرفية تحتوي مميزات اكبر
    A = new char [50];
    ولنأخذ طريقة صياغة الامر السابق بجدولنا المعتاد
    الصيغة
    الشرح
    A
    اسم المصفوفة المفترض
    =
    لابد ان توضع لتون الصيغة صحيحة
    New
    من اوامر اللغة للاعلان عن متغير جديد
    char
    نوع المصفوفة (حروف)
    [50];
    قوسين بينهم سعة المصفوفة
    والجديد في الصيغة السابقة هو انك بعد ان تنتهي من جميع العمليات الخاصة بالمصفوفة السابقة يمكن ان تلغيها ولذلك لتفريغ المساحة الخاصة بها من الذاكرة وهذه هي سي++ القوية جدا وذلك بالصيغة التالية
    delete [A] ;
    ادخال المتغيرات الحرفية
    بالطبع ليس عندك مشكلة الآن في ادخال المتغيرات الحرفية باستخدام cin ولكن لزم هنا التنويه بأن هذا الامر بالفعل سوف يدخل الحروف ولكنه سوف يتوقف عن الادخال عند الضغط على قضيب المسافة فلو انك تريد ادخال الاسم Mohamad Hasan الى متغير حرفي سوف يستقبل الاسم Mohamad وعند ضغطك على قضيب المسافة لادخال بقية الاسم Hasan
    حينها سوف يتوقف ولا يقبل الا الجزء الاول من الاسم وعليه استخدام احد عناصر فئة cin والفئات سوف نشرحها في درس قادم وهو
    cin.getline (A,50,’\n’);
    وصيغتة كما يلي
    الصيغة
    الشرح
    cin.getline
    الامر المشتق من cin
    (
    قوس احتواء البارامترات
    A
    اسم المصفوفة السابق الاعلان عنها
    ,
    فاصلة بين بارامترين
    50
    طول او عدد الحروف المتوقع ادخالها
    ,
    فاصلة بين بارامترين
    ‘\n’
    معناه سطر جديد بعد المتغير ويمكنك اهمال هذا البارامتر
    );
    قوس نهاية احتواء البارامترات والفاصلة المنقوطة لانها ادخال الصيغة كلها

    مزيدا من الدوال التي تتعامل مع المتغيرات الحرفية

    انها عدد من الدوال للمقارنة بين الحروف والتعامل معها كما سيلي شرحه
    char Name1 [30] = “MOHAMAD HASAN”;
    char Name2 [30] = “mohamad hasan”;
    int L;
    L = strcmp (Name1 , Name2);
    الدالة strcmp تقارن بين متغيرين حرفيين مع الاخذ في الاعتبار حالة الحروف الصغيرة والكبيرة فالحرف A بالنسبة لها غير الحرف a وتعيد قيمة عدد صحيح يخزن في المتغير الصحيح L كما يلي
    القيمة المعادة
    الشرح
    اصغر من الصفر
    عندما يكون الاسم الاول اصغر من الثاني
    تساوي صفر
    عندما يتساوى الاسمان
    اكبر من الصفر
    عندما يكون الاسم الاول اكبر من الثاني
    ربما يسأل احدكم سؤال ما معنى ان يكون اسم اكبر من اسم حيث ان اسم يساوي اسم هو شئ مفهوم اي تطبق الحروف فما معنى ان يكون اكبر او اصغر – نعم ربما يهمك فقط عملية التساوى كأن تدخل كلمة سر يتم مقارنتها مع كلمة اخرى مخزنة داخل الحاسب للتعرف على الشخص اما حالة ان يكون الاسم اكبر او اصغر فهي نادرة الاستخدام وتستخدم فقط في ترتيب الاسماء ابجديا ومعنى اكبر ان يكون ترتيب الحروف في جدول اسكي للاسم الاكبر يلي ترتب الحروف للمتغير الاصغر .
    في المثال السابق لن تكون قيمة L تساوي صفر رغم ان الحروف واحدة للاسمين ولكن مرة حروف صغيرة ومرة حروف كبيرة ولكن هناك الدالة التالية التي لاتهتم بحالة الحروف
    char Name1 [30] = “MOHAMAD HASAN”;
    char Name2 [30] = “mohamad hasan”;
    int L;
    L = strcmpi (Name1 , Name2);
    هذه الدالة strcmpi سوف تعطي قيمة = صفر لان الاسمين متساويين وهي لاتهتم بحالة الحروف
    الحاق متغير حرفي بآخر strcat

    char Name1 [30] = “Mohamad”;
    char Name2 [30] = “Hasan”;
    int L;
    strcat (Name1 , Name2);
    تقوم الدالة بالحاق الاسم الثاني بالاول ليصبح الاسم الثاني عبارة عن الاسمين مدموجين وتكون النتيجة ان المتغير الثاني Name2 بعد العملية السابقة يصبح حاملا القيمة
    Mohamad Hasan
    تحويل الحروف الصغيرة الى كبيرة strupr
    char Name [30] = “mohamad hasan”;
    strupr (Name);
    بعد العملية السابقة يتحول المتغير Name الى MOHAMAD HASAN
    تحويل الحروف الكبيرة الى صغيرة strlwr
    char Name [30] = “MOHAMAD HASAN”;
    strlwr (Name);
    بعد العملية السابقة يتحول المتغير Name الى mohamad hasan
    قياس طول متغير حرفي strlen
    char Name [30] = “MOHAMAD HASAN”;
    int L;
    L = strlen (Name);
    بعد العملية السابقة سيتم قياس طول المتغير الحرفي او عدد حروفه ويوضع كعدد بالمتغير L حيث سبق الاعلان عنه كعدد صحيح
    واليك مثال يشمل كل ما سبق شرحه
    #include <iostream.h> //For cout
    #include <string.h> //For many of the string functions
    int main()
    {
    char name[50]; //Declare variables
    char lastname[50]; //This could have been declared on the last line
    cout<<"Please enter your name: "; //Tell the user what to do
    cin.getline(name, 50, '\n'); //Use gets to input strings with spaces
    // or just to get strings after the user presses enter

    if(!strcmpi("Mohamad", name)) //The ! means not,strcmpi returns 0 for
    { //equal strings
    cout<<"That's my name too."<<endl; //Tell the userif its my name

    }
    else //else is used to keep it from always
    { //outputting this line
    cout<<"That's not my name."
    }

    cout<<"What is your name in uppercase..."<<endl;
    strupr(name); //strupr converts the string to uppercase
    cout<<name<<endl;
    cout<<"And, your name in lowercase..."<<endl;
    strlwr(name); //strlwr converts the string to lowercase
    cout<<name<<endl;
    cout<<"Your name is "<<strlen(name)<<" letters long"<<endl; //strlen returns
    //the length of the string
    cout<<"Enter your last name:";
    gets(lastname); //lastname is also a string
    strcat(name, " "); //We want to space the two names apart
    strcat(name, lastname); //Now we put them together, we a space in
    //the middle
    cout<<"Your full name is "<<name; //Outputting it all...
    return 0;

    }








    تعلم ++c الدرس السابع المتغيرات الحرفية
    تعلم ++c الدرس السابع المتغيرات الحرفية
    تعلم ++c الدرس السابع المتغيرات الحرفية
    التعديل الأخير تم بواسطة HVIPS5 ; 07-05-2011 الساعة 03:53 PM

  10. #10
    عضو جديد


    تاريخ التسجيل: Jun 2011
    رقم العضوية: 7
    المشاركات: 2,181
    HVIPS5 غير متواجد حالياً

    الدرس الثامن الملفات


    الدرس الثامن الملفات
    الدرس الثامن الملفات
    الدرس الثامن الملفات



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

    الفئة الثانية ofstream
    ستتولى هذه الفئة الكتابة في الملفات اي عملية حفظ البيانات
    ولنأخذ مثال للتوضيح
    ifstream MyFile (“mydata.txt”);

    ولنرى طريقة صياغة الامر بالجدول المعتاد
    الصيغة
    الشرح
    ifstream
    اسم الفئة الخاصة بفتح الملفات
    MyFile
    بارامتر اختياري تختاره لاستدعاء دوال الفئة
    (“mydata.txt”);
    بين قوسين وعلامتي اقتباس تضح اسم الملف المراد فتحه ولايغيب عنك انه يجب ان يكون ملف موجود على القرص
    يستخدم البارامتر الاختياري لاستدعاء دوال الفئة سواء لفتح او اغلاق الملف وكل ملف يفتح سواء للكتابة او القراءة لابد ان يغلق بعد تمام العملية واذا نسيت ذلك فتأكد من ضياع بياناتك وهذا يحدث كثيرا عند اغلاق الكومبيوتر بغير الطريقه الصحيحة حينها تكون البرامج قد قامت بفتح ملفات ولم تغلقها لانك اغلقت الجهاز حينها تحدث اخطاء ويقوم نظام تشغيل الوندوز باستدعاء scandisk للتصحيح هذه المشكلة
    MyFile.close();
    البارامتر السابق تعريفه للفئة يقوم باستدعاء احد الدوال الهامه وهي دالة اغلاق الملف كما ذكرنا لك سابقا واليك مثال كامل لعمليات الحفظ والاسترجاع لتتضح الصورة امامك كاملة.
    #include <fstream.h>
    #include <iostream.h>


    int main()
    {
    char str[10];
    ofstream svfile("example.txt");
    svfile<<"I want to save this line of data as an example";
    svfile.close();

    ifstream rdfile("example.txt");
    rdfile>>str;
    cout<<str;
    rdfile.close();
    }
    تم الاعلان عن معاملين افتراضيين هما svfile ليعمل مع الفئة ofstream لتخزين البيانات والمتمثلة تخزين العبارة I want to save this line of data as an example
    بعد ذلك استخدم معامل الفئة لاغلاق الملف بالدالة close
    والمعامل الثاني rdfile ليعمل مع الفئة ifstream لقراءة البيانات من الملفات وبالتحديد الملف المذكور example.txt ثم تحميل البيانات الى متغير حرفي سبق الاعلان عنه واستخدام معامل الفئة لاغلاق الملف
    المشكلة الواجب التنبيه عليها انه مع الفئة ofstream واذكرك بأنها هي التي تحفظ الملفات ان الملف الذي اعطيتها اسمه اذا لم يكن موجود فسوف ينشأ اما اذا كان موجود فسوف يلغى مابداخله وهذه مشكله فربما انك تفتح ملف موجود وتريد اضافة بيانات له او تعديل بيانات فيه ولذلك يجب اعطاء وتمرير بارامترات للدالة المستخدمة كما يلي

    Flag
    Function
    ios::app
    Opens an output file for appending.
    ios::ate
    Opens an existing file (either input or output) and seeks the end.
    ios::in
    Opens an input file. Use ios::in as an open_mode for an ofstream file to prevent truncating an existing file.
    ios:نقره لتكبير أو تصغير الصورة ونقرتين لعرض الصورة في صفحة مستقلة بحجمها الطبيعيut
    Opens an output file. When you use ios:نقره لتكبير أو تصغير الصورة ونقرتين لعرض الصورة في صفحة مستقلة بحجمها الطبيعيut for an ofstream object without ios::app, ios::ate, or ios::in, ios::trunc is implied.
    ios::nocreate
    Opens a file only if it already exists; otherwise the operation fails.
    ios::noreplace
    Opens a file only if it does not exist; otherwise the operation fails.
    ios::trunc
    Opens a file and deletes the old file (if it already exists).
    ios::binary
    Opens a file in binary mode (default is text mode).


    ifstream svfile("mydata.txt", ios::nocreate);












    الدرس الثامن الملفات
    الدرس الثامن الملفات
    الدرس الثامن الملفات


 

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

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