يمحرلا نحمرلا الله مسبmohammadalmashreqe.freeasphost.net/courses/object new/oop...

15
ن الرح الر بسمCourse : object oriented programming Lecture : struct Lecturer : ENG. Mohammad Al-mashreqe بسم يضر مع اسمه شيئ . الذي علىعمل من الن شاءل انتقابتر سيتم الشا في هذا اdata type بسيطة الى جاهزةdata type مركبة . نحلصفات .. ولكنحتوي على مجموعة من ا يكون الشيئ المراد برمجته يلتوجه عندمائنية البرمجة كاج ا تالصفات ؟ هي ا مالصفات اattribute ا تسميته بالكائن بوصف الشيئ والشيئ يمكنن تقومغيرات : هي عبارة عن متobject . لووم والتكنولوجيعلمعة الطلبة جاجة نظام لردنا برم ا طالبكل ان ل ا ,, وفرضنا3 والعمرسمغيرات ا متمعدل . وال ولنفرضب ان عدد الط20 حن بحاجة ل .. بالتالي نلف طالب ا20 نوعسماء من الف متغير لstring و20 نوعلعمر من الف اخرين لint و20 نوع الف اخرين منfloat معدل ..ل ل ويصبحلبرنامج كالتالي . شكل ا#include <iostream> #include <string> using namespace std; int main() { string students_names[20000]; int students_ages[20000]; float students_GPAs[20000]; } نناوفة اي اول من كل مصفندكس اول فستكون الب الطات ا معلومادخال اردنا لو امشكلة هنا ال اس تخدمنا3 كون معلومات يجب ان ت بشكل منطقيلب واحد ولكنخزين معلومات طافة لتماكن مختل ا

Upload: lamnga

Post on 29-Aug-2019

219 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: يمحرلا نحمرلا الله مسبmohammadalmashreqe.freeasphost.net/courses/object new/oop struct 2018-2019.pdf · object oriented ϭجϰتϢا ة϶نϰن϶كϢا ةجمربϢا

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

Course : object oriented programming

Lecture : struct

Lecturer : ENG. Mohammad Al-mashreqe

هللا الذي ال يضر مع اسمه شيئ . بسم

data typeجاهزة بسيطة الى data typeفي هذا الشابتر سيتم االنتقال ان شاءهللا من العمل على

مركبة .

تاج البرمجة كائنية التوجه عندما يكون الشيئ المراد برمجته يحتوي على مجموعة من الصفات .. ولكن نح

ما هي الصفات ؟

: هي عبارة عن متغيرات تقوم بوصف الشيئ والشيئ يمكننا تسميته بالكائن attributeالصفات

object .

متغيرات االسم والعمر 3ا ,, وفرضنا ان لكل طالب اردنا برمجة نظام لطلبة جامعة العلوم والتكنولوجيلو

والمعدل .

الف متغير لالسماء من نوع 20الف طالب .. بالتالي نحن بحاجة ل 20ان عدد الطالب ولنفرض

string الف اخرين للعمر من نوع 20وint الف اخرين من نوع 20وfloat .. للمعدل

شكل البرنامج كالتالي . ويصبح

#include <iostream> #include <string> using namespace std; int main() { string students_names[20000]; int students_ages[20000]; float students_GPAs[20000]; }

المشكلة هنا لو اردنا ادخال معلومات الطالب االول فستكون االندكس االول من كل مصفوفة اي اننا

اماكن مختلفة لتخزين معلومات طالب واحد ولكن بشكل منطقي يجب ان تكون معلومات 3تخدمنا اس

Page 2: يمحرلا نحمرلا الله مسبmohammadalmashreqe.freeasphost.net/courses/object new/oop struct 2018-2019.pdf · object oriented ϭجϰتϢا ة϶نϰن϶كϢا ةجمربϢا

object orientedالطالب الواحد كـ وحدة واحدة ومن هنا تأتي اهمية البرمجة الكينونية التوجه

programming .,

او ال structم ال يمكننا استخدا object oriented programmingباستخدام طريقة ال للبرمجة

class والفرق بينهما يدرس الحقاً وفي هذا الشابتر ان شاءهللا سندرس الstruct .

واحد object. هو تجميع جميع الخصائص من انواع بيانات مختلفة داخل كيان structالفكرة من ال

على عكس المصفوفة التي تتيح لنا انشاء مجموعة من المتغيرات من نفس النوع .

struct: collection of a fixed number of components (members), accessed by name.

. structطريقة تعريف ال

struct struct_name { Data_type member1; Data_type member2; . . . Data_type membern; };

حيث أن :

Struct_name بذات الطريقة التي نسمي فيها المتغيرات في :c++ ولكن يفضل ان يكون اسم ال

struct . ذو معنى

Data_type member ال :data type هو نوع البيانات وmember هو العضو ويطلق عليه

الستركت له نوع واسم وتسمى ايضاً هذه االعضاء بال . حيث ان لكل عضو داخل fieldاسم

attribute .

. semicolonيجب ان ينتهي تعريف الستركت بفاصلة منقوطة •

Page 3: يمحرلا نحمرلا الله مسبmohammadalmashreqe.freeasphost.net/courses/object new/oop struct 2018-2019.pdf · object oriented ϭجϰتϢا ة϶نϰن϶كϢا ةجمربϢا

.. structال حل المثال السابق باستخدام

struct Student { string name; int age; double GPA; };

ال يعني structعند تعريفها داخل ال attributes او membersاو ال fieldsال •

االعالن عن متغير "تعريف متغير" وال تصبح محجوزة بالذاكرة بل هو وصف للتركيب الذي الذي

سيستخدم عند تنفيذ البرنامج .

قة تعريف المتغير من نوع ستركت . طري

Struct_name variable_name;

#include <iostream> #include <string> struct Student { string name; int age; double GPA; }; using namespace std; int main() { Student s1; }

Page 4: يمحرلا نحمرلا الله مسبmohammadalmashreqe.freeasphost.net/courses/object new/oop struct 2018-2019.pdf · object oriented ϭجϰتϢا ة϶نϰن϶كϢا ةجمربϢا

بالميموري بالشكل التالي : s1يتم حجز

Accessing struct Members

الخاصة بالمتغير الذي تم تعريفه يتم استخدام ال attributeاو fieldاو memberللوصول الى ال

dot operator التعامل مع المتغيرات لمتغير من نوع ستركت بكيفية لتعامل مع ا.. علماً انه ال يمكن ا

نوع الستركت نفسه . باستناء عملية المساواة ما بين متغيرين من مثالً ... intالبسيطة ك

Page 5: يمحرلا نحمرلا الله مسبmohammadalmashreqe.freeasphost.net/courses/object new/oop struct 2018-2019.pdf · object oriented ϭجϰتϢا ة϶نϰن϶كϢا ةجمربϢا

Example [ ]

#include <iostream> #include <string> struct Student { string name; int age; double GPA; }; using namespace std; int main() { Student s1; cin >> s1; //error cout << s1; //error Student s2; s2 = s1++;//error Student s3; s3 = s1 + s2; //error }

جميع العمليات الرياضية وعمليات المقارنة المنطقية واالدخال واالخراج على متغير من نوع ستركت

. errorستعطينا

عدا عملية واحدة وهي المساوة ما بين متغيرن من نفس نوع الستركت كما في المثال .ما

Example [ ]

#include <iostream> #include <string> struct Student { string name; int age; double GPA; }; using namespace std; int main() { Student s1,s2; s1 = s2; // true }

Page 6: يمحرلا نحمرلا الله مسبmohammadalmashreqe.freeasphost.net/courses/object new/oop struct 2018-2019.pdf · object oriented ϭجϰتϢا ة϶نϰن϶كϢا ةجمربϢا

. attributesاو membersاو fieldsللوصول الى dot operatorنستخدم ال

Example [ ]

struct Student { string name; int age; double GPA; }; using namespace std; int main() { Student s1 ,s2; //using assignment operator s1.name = "mohammad"; s1.age = 22; s1.GPA = 3.3; //get input from user cout << "please enter student name " << endl; cin >> s2.name; cout << "please enter studetn age " << endl; cin >> s2.age; cout << "please enter student GPA " << endl; cin >> s2.GPA; //print result cout << "name : " << s1.name << endl; cout << "age : " << s1.age << endl; cout << "GPA : " << s1.GPA << endl; }

Page 7: يمحرلا نحمرلا الله مسبmohammadalmashreqe.freeasphost.net/courses/object new/oop struct 2018-2019.pdf · object oriented ϭجϰتϢا ة϶نϰن϶كϢا ةجمربϢا

Array with struct

طالب مرة واحدة يتم بهذه الصورة : 3يمكن تعريف مصفوفة من نوع ستركت فمثال ً لو اردت تعريف

#include <iostream> #include <string> struct Student { string name; int age; double GPA; }; using namespace std; int main() { Student s[3]; }

ويكون شكل الميموري كالتالي : fieldsان كل مكان يتم حجزه يحتوي على جميع حيث

S

Name

Age

GPA

S[0]

Name

Age

GPA

S[1]

Name

Age

GPA

S[2]

Page 8: يمحرلا نحمرلا الله مسبmohammadalmashreqe.freeasphost.net/courses/object new/oop struct 2018-2019.pdf · object oriented ϭجϰتϢا ة϶نϰن϶كϢا ةجمربϢا

عند تنفيذ الجمل التالية يصبح شكل الميموري . s[0].name = "mohammad"; s[1].age = 22; s[2].GPA = 3.3;

تصبح القيم بالميموري كالتالي :

Name Mohammad

Age

GPA

S[0]

Name

22 Age

GPA

S[1]

Name

Age

3.3 GPA

S[2]

. كما في "الترتيب مهم initiatorيمكن اعطاء قيمة ابتدائية للعناصر داخل الستركت من خالل استخدام

المثال :

struct Student { string name; int age; double GPA; }; using namespace std; int main() { Student s = { "mohammad",22,3.3 }; }

Page 9: يمحرلا نحمرلا الله مسبmohammadalmashreqe.freeasphost.net/courses/object new/oop struct 2018-2019.pdf · object oriented ϭجϰتϢا ة϶نϰن϶كϢا ةجمربϢا

وهذه الجملة مكافئة لهذه الجمل :

s.name = "mohammad"; s.age = 22; s.GPA = 3.3;

فارغ يتم اعطاء القيم االفتراضية لالعضاء حسب النوع initiatorفي حال استخدام ال

Student s = {};

structs within a struct

يمكن تعريف متغير من نوع ستكرت اخر داخل الستركت كما في المثال .

struct Date { int day; int month; int year; }; struct Student { string name; int age; double GPA; Date birth_date; };

كالتالي : studentيصبح شكل الميموري عند تعريف متغير من نوع

Student s ;

s

Name

Age

GPA

Birth_date

Day

Month

Year

Page 10: يمحرلا نحمرلا الله مسبmohammadalmashreqe.freeasphost.net/courses/object new/oop struct 2018-2019.pdf · object oriented ϭجϰتϢا ة϶نϰن϶كϢا ةجمربϢا

مرتين : dot operatorيتم استخدام ال مثال dayللوصول للعنصر

s.birth_date.day = 10;

" P:" في تحت صفحات كمان انزلوا انزلوا ��"هاي المالحظة لحتى ما تفكروا انه الشابتر خلص

Page 11: يمحرلا نحمرلا الله مسبmohammadalmashreqe.freeasphost.net/courses/object new/oop struct 2018-2019.pdf · object oriented ϭجϰتϢا ة϶نϰن϶كϢا ةجمربϢا

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

الميموري وفيما يلي رسم توضيحي لبعض االمثلة لنتعلم من خاللها الية رسم الستركت بالميموري .

#include<iostream>

usingnamespace std;

struct A{

int x,y[2];

};

struct B{

int h,n;

A a1;

}

void main()

{

B d;

}

struct A{

int x,y;

};

void main()

{

A d[2];

}

h

n

x

d

a1

Y[1]

Y[0]

x d[0]

y

d[1] x

y

Page 12: يمحرلا نحمرلا الله مسبmohammadalmashreqe.freeasphost.net/courses/object new/oop struct 2018-2019.pdf · object oriented ϭجϰتϢا ة϶نϰن϶كϢا ةجمربϢا

what the output :-

#include<iostream>

usingnamespace std;

struct A{

int x,y;

};

void main()

{

A d,k;

d.x = 5;

d.y = 10;

cout<<d.x<<" "<<d.y<<endl;

d.x+=2;

d.y+=2;

k =d;

cout<<k.x<<" "<<k.y<<endl;

}

Output:

5 10

7 12

Page 13: يمحرلا نحمرلا الله مسبmohammadalmashreqe.freeasphost.net/courses/object new/oop struct 2018-2019.pdf · object oriented ϭجϰتϢا ة϶نϰن϶كϢا ةجمربϢا

1 struct A

{

int x;

double y;

};

struct B

{

int x;

A Arr[2];

};

void main()

{

A varA;

B varB;

varA.x=10; varA.y=20;

varB.x=30;

varB.Arr[1].x=100;

varB.Arr[1].y= varB.x+3;

varB.Arr[0]=varA;

cout<< varB.Arr[1].y<<" ";

cout<<varB.Arr[0].y<<endl;

cout<<varB.x<<" "<<varA.x<<endl;

}

Page 14: يمحرلا نحمرلا الله مسبmohammadalmashreqe.freeasphost.net/courses/object new/oop struct 2018-2019.pdf · object oriented ϭجϰتϢا ة϶نϰن϶كϢا ةجمربϢا

2 struct A

{

int var1;

int Arr[3];

};

struct B

{

int var1;

A varSt;

};

void main()

{

A objA;

B objB;

objA.var1=10;

for(int i=0; i<3; i++)

objA.Arr[i]=i+2;

objB.var1=100;

objB.varSt=objA;

objB.varSt.var1++;

cout<<objB.var1<<" "<<objB.varSt.var1<<endl;

for(int i=0; i<3; i++)

cout<<objB.varSt.Arr[i]<<" "<<endl;}

Page 15: يمحرلا نحمرلا الله مسبmohammadalmashreqe.freeasphost.net/courses/object new/oop struct 2018-2019.pdf · object oriented ϭجϰتϢا ة϶نϰن϶كϢا ةجمربϢا

Write code :

write a program to help a local book store automates its billing system (فواتير نظام (

the program should have the following :

1- a struct BookLabel with the following member :-

a-name: string variable for the name of the book .

b- price : float variable for the price of the book .

c-quantity : integer variable for the number of copies sold of the book النسخ

)المباعة . (عدد

2- a struct Bill with the following members :

a- customerName: string variable for the customer name . b- Book[5] : an array of type BookLabel with size 5 . c- number_sold_books: integer variable for the number of type of sold book

3- in main function :-

a-create object called b1 of type Bill

b- fill this object b1 reads the name of customer and the book's names ,book's

price, book's quantity and number_sold_books using cin (from user)

c-display the bill b1 by printing the name of customer and all information (the

book's name ,book's prices ,book's quantity about the sold book and the finally

the total money . if the total money exceeds the 50JD then the book store gives

10% discount.

الحمدهلل الذي بحمده تتم الصالحات ما اصبت به فمن اهلل وما أخطأت به فمني ومن الشيطان ال تنسونا من صالح دعائكم

"محمد المشرقي" أخوكم