البارودي

دورة السي بلس بلس , من البداية الي الاحتراف

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

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

مرحبا بكم اخواني

عودة مرة اخري مع دورة السي بلس بلس من البداية الاحتراف

بعد انتهاء المستوي الاول والثاني بحمد الله تعالي

احب ان اوضح اليكم شئ ان المستويين السابق شرحهم هم يعتبروا نظرة تفصيلية عن بدائيات السي و هم مهمين جدا لان ما سياتي من بعدهم مبني علي اساس فهم المستويين ( الاول و الثاني )

في هذا المستوي الجديد سنتحدث باذن الله تعالي عن شقين اساسيين : Structures و Enumerations .

وحتي لا اطيل عليكم هيا بنا نبدأ متمنيا لكم التوفيق باذن الله

بسم الله نبدأ .......... :rolleyes:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

• المستوي الثالث : التراكيب ( Structures )

نحن رأينا متغيرات لأنواع بسيطة من البيانات , مثل Float و Char و Int .

تمثل أنواع مثل هذه المتغيرات وحدة واحدة من المعلومات :

الارتفاع , و الكمية و الإحصاء و هكذا .

لكن فقط مثل دكاكين البقالة منظمة في مجموعات , المستهلكون في أقسام , و الكلمات في جمل .

من السهل في اغلب الأحيان تنظيم المتغيرات البسيطة في كيانات أكثر تركيبا .

التركيبات في إل C++ تسمي التركيبة هي الطريق الوحيد لفعل ذلك .

الجزء الأول من هذا المستوي سنركز فيه علي التركيبات أو Structures.

الجزء الثاني سنتكلم فيه عن جزئية تتعلق بالحسابات أو Enumerations .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

• التراكيب Structures

التركيبات هي مجموعة من المتغيرات البسيطة.

المتغيرات في التركيبات يمكن أن تكون من أنواع مختلفة :

البعض يمكن أن يكون Int , و البعض يمكن أن يكون Float , وهكذا .

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

في برمجة إل C , التركيبات تعتبر من المميزات المتقدمة في اغلب الأحيان .

علي أية حال , بالنسبة لمبرمجي لغة إل C++ , التركيبات تعد احد كتل البناء المهمة في فهم الكائنات (Objects) و الفصائل (Classes) .

في الحقيقة , تركيبة جملة التركيبات مماثل تقريبا إلي الفصائل Class .

التركيبات ( بالضبط تستخدم ) مجموعة من البيانات Data , بينما الفصائل Class هي مجموعة من كل من البيانات Data و الدوال Functions .

لذلك بتعلم التركيبات سنمهد الطريق لفهم الفصائل Classes و الدوال Functions .

التركيبات في إل C++ و إل C تلائم الغرض المماثل للسجلات في بعض اللغات الاخري مثل الباسكال Pascal .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

• التراكيب البسيطة

هيا بنا نبدأ مع تركيبة تحتوي علي ثلاث متغيرات :

عددان صحيحان ( من النوع Integer )

و رقم عشري ( من النوع Floating Point ).

تمثل هذه التركيبة بند في عملية جرد جزء من قطعة شركة.

( نفترض بان القطعة متكونة من عدة أجزاء .) التراكيب هو نوع من أنواع المخططات يحدد ما هي المعلومات الضرورية لأحد الأجزاء.

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

رقم الجزء نفسه سيكون هو الرقم الثاني في التركيبة .

و الرقم الأخير هو تكلفة الجزء .

( هؤلاء منك و الذي يعتبر أرقام الأجزاء تعد الحاجة الغير مثيرة لفتح عيونك إلي رومانسية التجارة ).

برنامج PARTS يعلن عن أجزاء التركيبة , يعرف متغيرات التركيبة و التي تكون من النوع الذي يسمي part1 , و التي تخصص القيم إلي أعضائها , وبعد ذلك تعرض هذه القيم.

#include<iostream.h>

/////////////////////////////////////////////////
struct part
{
int modelnumber;
int partnumber;
float cost;
};
/////////////////////////////////////////////////
int main()
{
part part1;
part1.modelnumber=6244;
part1.partnumber =373;
part1.cost=217.55f;

cout<<"Model "<<part1.modelnumber;
cout<<", part "<<part1.partnumber;
cout<<",costs $"<<part1.cost<<endl;

return 0;
}

post-36368-1117498272_thumb.jpg

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

مخرجات البرنامج ستكون كالتالي:

post-36368-1117498345_thumb.jpg

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

برنامج PARTS له ثلاث سمات رئيسية:

إعلان التركيبة , تعريف متغيرات التركيبة , وإدخال أعضاء التركيبة .

هيا بنا ننظر إلي كل سمة من هذه السمات.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

بارك الله فيك اخي البارودي , وجزاك الله خيراً على هذا المجهود الرائع .

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

وشكراً.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

باذن الله علي قد ما اقدر

نستكمل الحديث .................

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

• التصريح أو الإعلان عن التركيبة

التصريح أو الإعلان عن التركيبة يخبرنا عن كيفية تنظيم التركيبة :

إنها تحدد الأعضاء الذين سيكون في التركيبة .

ها هي :

struct part
{
int modelnumber;
int partnumber;
float cost;
};

تركيبة جملة الإعلان عن التركيبة.....

تقدم الكلمة المحجوزة Struct الإعلان عن التركيبة .

بعد ذلك يأتي اسم أو عنوان التركيبة و الذي يكون جزء .

الإعلان عن أعضاء التركيبة – modelnumber , partnumber و إل cost – مرفقة في أقواس الشيالات .

الفاصلة المنقوطة التي تأتي بعد قوس الإغلاق للشيالة , تنهي التركيبة بالكامل .

لاحظ ذلك إن استخدام الفاصلة المنقوطة للتركيبة يخالف الاستخدام لكتل الاكواد .

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

الشكل التالي يوضح طريقة تركيبة جملة التصريح أو الإعلان عن التركيبة.

post-36368-1117796392_thumb.jpg

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

استخدام تعريف التركيبة

الإعلان أو التصريح عن التركيبة يخدم فقط كمخطط لإنشاء متغيرات من النوع Part .

الإعلان عن التركيبة لا يعتبر نفسه تعريف لأي متغير . ذلك , انه لا يحجز أي مساحة في الذاكرة أو تسمية أي متغير .

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

هذا يظهر في الشكل التالي :

post-36368-1117796541_thumb.jpg

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

هو ليس من المتفق أن هذا الوصف يبدو مثل الامتيازات التي لاحظناها بين إل Classes و إل Objects .

وكما سنري , الكائن له نفس العلاقات لنفس إل Classe التي نوع متغير التركيبة يملكها للإعلان عن التركيبة .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم ورحمة الله وبركاته أخي البارودي في برنامج parts في السطر الرابع من main ماذا تعني f ؟؟؟؟؟

وشكرا

أخوك The Cpp

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

تعني ان القيمة الناتجه من النوع Float اي متغير له قيمة اعداد عشريه او كسور

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

• تعريف متغيرات التركيبة

أول سطر داخل الدالة Main ( )

Part part1;

يعرف المتغير و الذي يسمي Part1 , و الذي من النوع التركيبة Part .

يحجز هذا التعريف مساحة في الذاكرة ل Part1 .

ما مقدار المساحة ؟ هل تكون كافية لاحتجاز كل أعضاء Part1 – يعني Modelnumber , Partnumber , و cost .

في هذه الحالة سيكون هناك 4 Bytes لكل اثنين Ints ( افتراض بان النظام 32-bit ) و 4 bytes لكل Float .

الشكل التالي يوضح كيف يكون Part1 في الذاكرة .

( التخطيط يوضح 2-bytes لأعداد صحيحة ).

بشكل من الأشكال نحن يمكن أن نعتبر تركيبة Part هي مواصفات لأنواع بيانات جديدة . هذا سيصبح واضح كلما تقدمنا معهم , لكن يلاحظ أن الصيغة لتعريف متغير التركيبة تماما مثل التي تستخدم لتعريف أنواع البيانات الداخلية الأساسية كذلك مثل Int :

Part part1;
Int var1;

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

( في إل C ستحتاج لاحتواء الكلمة المحجوزة Struct داخل تعريف التركيبة مثلما في

Struct part part1;

في إل C++ الكلمة المحجوزة ليست ضرورية .)

post-36368-1118431618_thumb.jpg

تم تعديل بواسطه البارودي
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

• إدخال أعضاء التركيبة

عندما تعرف متغيرات التركيبة , فانه يمكن إدخال أعضائها باستخدام شئ يسمي معامل النقطة " . " .

هنا كيف أول عضو يأخذ قيمة :

Part1.modelnumber = 6244;

إن عضو التركيبة كتب في ثلاثة أجزاء : اسم متغير التركيبة (Part1 ) ;

المعامل النقطة " . " و اسم العضو ( Modelnumber ) .

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

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

اسم المتغير يجب أن يستخدم للتمييز بين متغير واحد عن الآخر و ذلك عندما يكون هناك أكثر من متغير واحد , مثل Part1 و Part2 و هكذا . كما هو معروض في الشكل التالي :

untitled.jpg

أعضاء التركيبة تم معالجتها مثل المتغيرات الأخرى.

في الجملة :

Part1.modelnumber = 6244;

العضو اخذ القيمة 6244 مستخدما معامل التخصيص الطبيعي " = " .

البرنامج أيضا عرض أعضاء استخدموا في جملة Cout مثل :

Cout << " \n Model " << part1.modelnumber;

هذه الجملة أخرجت قيمة أعضاء التركيبة .

تم تعديل بواسطه البارودي
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

الله يقويك ويعطيك العافيه انشاء نلحق عليكم وانتوا في الجزء الثالث لانا بعدنا في الاول الله كريم نشد الهمه شوي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

• صفات التراكيب الاخري

التراكيب متعددة الاستعمال جدا .

دعنا ننظر إلي بعض الصفات الإضافية لشكل و استعمالات التراكيب .

تم تعديل بواسطه البارودي
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

• دمج أو جمع الإعلان و التعريف

في مثال PARTS رأينا الإعلان و التعريف للتركيبة كبيانات منفصلة .

هذه البيانات يمكنها أيضا أن تدمج إلي سطر بيان واحد كما هو موضح في المثال التالي PARTSCOM .

post-36368-1211409449_thumb.jpg

في هذا المثال ليس هناك بيان منفصل لتعريف التركيبة :

Part part1;

بدلا من ذلك , اسم المتغير Part1 تم وضعه في نهاية الإعلان :

post-36368-1211409710_thumb.jpg

لاحظ ذلك . اسم البطاقة أو الاسم المستخدم في الإعلان عن التركيبة يمكن أن يحذف , كما رأينا هنا , إذا فان لا توجد متغيرات أكثر لهذا النوع من التركيبة سيعرف بعد ذلك في قائمة الكود .

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

عموما هو اقل وضوحا و اقل مرونة في التعامل من استعمال التعريف و الإعلانات المنفصلة .

هذه هي النتيجة التي ستظهر لنا بعد تنفيذ البرنامج :

post-36368-1211410242_thumb.jpg

تم تعديل بواسطه البارودي
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

• اشغال أعضاء التركيبة

في المثال التالي يظهر كيف أن أعضاء التركيبة يمكن أن يشغلوا عندما تكون متغيرات التركيبة تكون معرفة .

إنها أيضا تبين أن يمكنك أن يكون لديك أكثر من متغير واحد لنوع التركيبة المتخذة ( نتمنى بأنك تظن هذا علي طول ) .

ها هي قائمة برنامج PARTINIT

post-36368-1211411178_thumb.jpg

هذا البرنامج يعرف متغيرين من النوع PART :

PART1 و PART2 . إنها تشغل PART1 , و طباعة مخرجات هذا العضو , وتخصيص قيمة PART1 إلي PART2 , وطباعة مخرجات هذا العضو .

ها هي المخرجات :

post-36368-1211410767_thumb.jpg

لا يدعوا للاستغراب أن نفس النتائج متكررة , منذ أن ساوينا بين احد المتغيرات بالآخر .

تم تعديل بواسطه البارودي
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

• تشغيل متغيرات التركيبة

إن متغيرات أعضاء التركيبة Part1 تم إشغالهم عند تعريف المتغيرات :

Part part1 = { 6244 , 373 , 217.55 };

إن القيم التي ستخصص لأعضاء التركيبة محاطة بالشيالات و التي تفصل كل قيمة عن الأخرى بفاصلة .

إن القيمة الأولي تخصص إلي العضو الأول و القيمة الثانية تخصص إلي العضو الثاني و هكذا .

• متغيرات التركيبة في بيانات التخصيص

كما نستطيع أن نري في PARTINIT احد متغيرات التركيبة يمكن أن يخصص إلي الآخر :

Part2 = Part1;

إن قيمة كل عضو في Part1 يخصص إلي العضو المطابق له في Part2.

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

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

تم تعديل بواسطه البارودي
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

• مثال مقياس

دعنا نري كيف يمكن استخدام التركيبة لتجميع أنواع متعددة ومختلفة من المعلومات .

لو أنت نظرت مرارا و تكرارا إلي رسم معماري , تعرف بان ( علي الأقل في الولايات المتحدة ) مسافات مدروسة بالأقدام و البوصات .

( كما من المحتمل ستعرف أن هناك 12 بوصة في القدم ) طول غرفة المعيشة قد يعطي 15' 8' يعني 15 قدم زائد 8 بوصات .

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

هذا جزء للنظام الانجليزي في المقياس .

( نحن لن نصدر أي أحكام هنا علي استحقاقات انجليزي مقابل مترية )

الشكل التالي يظهر الأطوال المثالية في المقاييس في النظام الانجليزي .

post-36368-1213046089_thumb.jpg

افترض انك تريد إنشاء رسم أو برنامج معماري يستخدم النظام الانجليزي.

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

المثال التالي ENGLSTRC يعطي فكرة لكيفية استخدام التراكيب .

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

post-36368-1213046900_thumb.jpg

هنا التركيبة Distance لها اثنين من الأعضاء : Feet و Inches .

المتغير Inches ربما يكون لديه أجزاء مجزئة , لذا نحن سنستخدم النوع Float لذلك . المتغير Feet عادتا ما يكون عدد صحيح , لذا سنستخدم النوع Int له . نحن عرفنا مثل هذه المسافتين , D1 و D3 , بدون تشغيلهم . بينما قمنا بتشغيل آخر , D2 إلي 11' 6.25' .

البرنامج يطلب من المستخدم بإدخال المسافات في الأقدام و البوصات , وتخصيص هذه المسافات إلي D1 .

( قيمة البوصات يجب أن تكون اصغر من 12.0 ( بعد ذلك سيتم إضافة المسافة D1 إلي D2 , و الحصول علي المسافة الكلية D3 .

في النهاية البرنامج سيعرض المسافتان الأوليتان و المسافة الكلية المحسوبة حديثا . هنا بعض النتائج :

post-36368-1213046485_thumb.jpg

لاحظ ذلك نحن لا نستطيع أن نجمع مسافتين مع بيانات البرنامج مثل

D3 = D1 + D2; // Can't do this in ENGLSTRC

لماذا لا ؟ لان ليس هناك روتين أو مشغل مبني في إل C++ الذي يعرف كيف يضيف متغيرات النوع Distance . المعامل + يعمل مع الأنواع الداخلية مثل Float و لكن ليس مع الأنواع التي نعرفها بأنفسنا , مثل Distance . ( علي أي حال , احد منافع استخدام الفصائل Classes , كما سنري بعد ذلك , هي القدرة علي إضافة و أداء العمليات الأخرى علي أنواع البيانات المعرفة من قبل المستخدم ) .

تم تعديل بواسطه البارودي
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

• تركيبات ضمن تركيبات

يمكنك إدخال تركيبة ضمن تركيبة أخري . ها هنا تغيير أو اختلاف في برنامج ENGLSTRC و الذي يعرض كيف يبدو هذا التغيير .

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

post-36368-1213220791_thumb.jpg

ها هو برنامج ENGLAREA , و الذي يستخدم التركيبة Room لتمثيل الحجرة .

post-36368-1213220930_thumb.jpg

البرنامج قام بتعريف متغير واحد – Dining – من النوع Room , في هذا السطر

Room dining; // Variable dining of type Room .

ثم يقوم بتخصيص القيم إلي الأعضاء المختلفين لهذه التركيبة .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

• إدخال أعضاء التركيبة المتداخلة

لان احد التركيبات متداخل داخل تركيبة أخري , نحن يجب أن نطبق معامل النقطة مرتين لإدخال أعضاء التركيبة .

Dining . length . feet = 13;

في هذا البيان , Dining هو اسم متغير التركيبة , كما في السابق ; Length هو اسم عضو التركيبة الخارجية ( Room ) ; أما Feet فهو اسم عضو في التركيبة الداخلية ( Distance ) .

الجملة معناها :

" اتخذ العضو Feet من العضو Length من المتغير Dining وخصص له القيمة 13 " .

الشكل التالي يعرض كيف يحدث ذلك .

post-36368-1213221631_thumb.jpg

عندما القيم خصصت لأعضاء Dining , فان البرنامج يقوم بحساب مساحة أرضية الغرفة كما هو موضح بالشكل التالي .

post-36368-1213221853_thumb.jpg

لإيجاد المساحة , البرنامج يقوم بتحويل الطول و العرض من المتغيرات التي من النوع Distance إلي متغيرات من النوع Float و I و W و الذي يمثلون المسافات في الأقدام . قيم إل I و إل W يتم إيجادهما بإضافة أو جمع العضو Feet من إل Distance إلي العضو Inches مقسوما علي إل 12 . العضو Feet يتم تحويله إلي النوع Float تلقائيا قبل أن تتم عملية الإضافة و النتيجة تكون من النوع Float . متغيرات إل I و إل W يتم ضربهم بعضهم ببعض لإيجاد أو الحصول علي المساحة .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

• تحويلات أنواع المتغيرات المعرفة من قبل المستخدم

لاحظ أن البرنامج يقوم بتحويل مسافتين من النوع Distance إلي مسافتين من النوع Float : المتغيران I و W .

في الواقع إنها تقوم بتحويل مساحة الغرفة , و التي تخزن كتركيبة من النوع Room ( التي عرفت كتركيبتين من النوع Distance ) , إلي رقم عشري واحد يمثل المساحة بالقدم المربع .

ها هي المخرجات :

post-36368-1213222431_thumb.jpg

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .