Tutorial 9: Structure

السلام عليكم الجميع

اليوم راح اشرح لكم عن موضوع مهم الى هو structure

طبعآ هو عباره عن مجموعه من البيانات و تكون محفوظة تحت اسم كلاس

يعني مجموعه من البيانات هي المتغيرات تكون داخل اسم كلاس و نقدر نستخدم اسم كلاس اكثر من مره بأسم Obj.

ملاحظة مهمة: في نوعين الى هو struct و class يختلفان ولايشبهون بعض و راح نشرح عن كلاس المره القادمة.

طيب ايش مهمة هذي كلاسات؟ هي تحفظ القيمة داخل المتغيرات اثناء تشغيل البرنامج

بعطيكم مثال بالكود:

هذا Syntax تبع Structure :

struct name {
member_type
}

لما نجي نستعدي الكلاس مثل كذا

name nam1
name1.member_type

في حال نستدعي اسم الكلاس name لازم نسوي له متغير جديد من نوع obj عشان نقدر نستخدم اسم المتغيرات داخل الكلاس و نسميه nam1 طبعآ نقدر نسميه اكثر من اسم

مثلآ nam1, nam2, nam3 و كل اسم متغير راح يكون له كلاس خاص فيه

بعدها عشان نستدعي اسم المتغير من داخل كلاس نضع نقطة امام اسم المتغير هكذا name1.member_type

طيب راح اشرح لكم بشكل عملي عشان توصل لكم المعلومة تمام.

gpa1

تلاحظون معاي بعد ماحطينا Object الي هو student1

صار عندنا اكسس او مسموح لنا نستخدم المتغيرات التي داخل الكلاس student

لما عملت student1.name بعد النقطة تلاحظون ظهرت معاي خيارين او متغيرتين من اسم الكلاس هذا يعني استطيع استخدام المتغير

طيب خلونا نشوف الناتج كيف:

g1

تلاحظون لما عملنا نتيجة طبعت لنا الاسم الطالب والمعدل 🙂

لانه المتغير الاسم انحفظ فيه الاسم Aziz  والمعدل انحفظ فيه بالمتغير GPA

هذا يعني استطيع استخدام هذي البيانات في اي مكان بالبرنامج طلما اني استدعي اسم الكلاس

طيب هل نقدر نكتب اسم طالب ثاني ؟ يعني يكون اسم اول طالب عبدالعزيز وثاني طالب خالد؟

ايوه نقدر فقط نضيف obj ثاني يكون student2

شوفو معاي بالصوره:

g2

هنا عملنا obj جديد الى هو student2 تمام

كذا نقدر نستخدم المتغيرات الى داخل اسم كلاس كأنه جديد و مختلف عن student1

تخيلو معاي كذا:

student1 يكون بالغرفة خاصة فيه و له بيانات مثل Aziz و المعدل 3

student2 يكون له غرفه خاصة له ايضآ ومختلفه عن student1 و له بيانات مثل khalid و المعدل 3.6

وايضآ نقدر نستخدم اسم object بالمصفوفات

بحيث ماتتعب نفسك و كل شوي تسوي object

فرضآ يكون عندي 5 طلاب و ابي اكتب كل اسماءهم مع المعدل 🙂

ونحتاج نكتب الكود زي كذا نكتب الاسم والمعدل وظهر لنا اول بيانات وهكذا:

     student student1[5];

 for (int i = 0; i < 5; i++)
     {
         cout<<" number: "<<i<<endl;
         cout<<" Enter name: "<<endl;
         cin>>student1[i].name;
         cout<<" Enter GPA " <<endl;
         cin>>student1[i].GPA;
        cout<<endl;
         cout<<" Name "<<student1[i].name;
           cout<<" GPA "<<student1[i].GPA<<endl;
     }

array1

انا وقفت لانه بياخذ وقت لانه بالنهاية راح يطلعني من اللوب 🙂

مثل مالاحظنا صار كل مره يسوي obj جديد لانه صار عن طريق المصفوفات

ايضآ نقدر نستخدم الدوال او Functions

مثل ماذكرت احد الشروط في التحدي بالتويتر الى ماشافه هذا التحدي:

انه لازم تستخدم Functions و ايضآ نحتاج بوينتر او Pass by reference

الحين راح اشرح لكم كيف و الحين راح نسوي ثلاث دوال تمام

اول داله تكون الاسم

void name(student &student1);

تلاحظون معاي اني حطيت اسم الكلاس student و بعدها علامة reference & ثم اسم obj

لانه اي قيمة من داخل الدالة نقدر نستخدمها بالداله اخرى من غير اي مشاكل لاننا نعمل قيمة افتراضية

void name(student &student1);
void gpa(student &student1);
void display(student student1);

كذا عملنا ثلاث دوال ولكن تلاحظ الاخيره الى هي استعراض النتيجة او display ماله العلامة & referance ليه؟

لانه الدالة الاخيره ماتحتاج تنقل قيمة الافتراضية الى مكان اخر لانه خلاص اخر قيمة بيوصلها بيكون من gpa و name تمام.

و function call راح يكون هكذا

int main(){
     student student1;

    name(student1);
    gpa(student1);
    display(student1);

 }

لازم نحط اسم obj داخل function call بحيث نقدر نستدعي المتغيرات الى داخل اسم الكلاس تمام.

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

#include<iostream>
#include<string>
using namespace std;

struct student {
  string name;
  double GPA;
};

void name(student &student1);
void gpa(student &student1);
void display(student student1);
 
 int main(){
     student student1;

    name(student1);
    gpa(student1);
    display(student1);

 }
 
 void name(student &student1){
     cout<<"Enter Student name: "<<endl; 
     cin>>student1.name;

 }

 void gpa(student &student1){
cout<<"Enter GPA: "<<endl; 
cin>>student1.GPA;
 }

void display(student student1){
cout<<"Student is: "<<student1.name<<" GPA: "<<student1.GPA<<endl;
}

funwithstruct

تلاحظون هنا مثل ماكتبت بالتحدي شروط يكون ثلاث دوال

دالة الاوله حطيت فيه فقط الاسم

داله الثانيه حطيت فيه فقط المعدل

دالة الاخيره يكون اظهار النتيجة

لما عملنا طباعة طبعت لنا الاسم و المعدل بنجاح

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

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

و struct لها استخدامات كثيره مثل link list او الهاش او البوينتر

و تقدر تحط اكثر من struct واحد مو شرط يكون واحد فقط…

و النسبه تحدي الصرافه ATM

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

وايضآ تقدر تسويه Class مو شرط يكون Struct ولكن اخترته لانه هذا موضوعنا اليوم 🙂

الي يبي تحدي هذا هو:

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

الى اللقاء.