المكدس و المصفوفات في ++C

c

المكدس

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

 

Stackflo.cpp

// stackflo.cpp


// tests the TStackAsVector class with type float


#include <classlib\stacks.h>


#include <iostream.h>


 


void main()


   {                          // instantiate stack for type float


   TStackAsVector<float> staflo;


 


   staflo.Push(11.1);         // push floats onto stack


   staflo.Push(12.2);


   staflo.Push(13.3);


 


   while( !staflo.IsEmpty() ) // pop floats off stack


      cout << staflo.Pop() << endl;


   }




 



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



 



Stacklist.cpp




// staklist.cpp


// tests the TStackAsList class with type int


#include <classlib\stacks.h>


#include <iostream.h>


 


void main()


   {


   TStackAsList<int> stint;   // instantiate a stack for type int


 


   stint.Push(11);            // push ints onto stack


   stint.Push(12);


   stint.Push(13);


 


   while( !stint.IsEmpty() )  // pop ints off stack


      cout << stint.Pop() << endl;


   }




 



ويقدم لنا جدول الدوال المنتمية للفئة TStackAsVector .



جدول الفئات المنتمية للفئة TStackAsVector







































































الدالة



الغرض منها



FirstThat



تعيد مؤشرا لأول كائن يحقق شرطا وضعه المبرمج



Flush



إزالة كافة العناصر من المكدس



ForEach



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



GetItemsInContainter



تعيد عدد العناصر في المكدس



IsEmpty



تعيد 1 في حالة خلو المكدس



IsFull



تعيد 1 في حالة امتلاء المكدس



LastThat



تبحث عن كافة العناصر التي تحقق شرطا وضعه المبرمج



Pop



سحب عنصر



Push



ضخ(إضافة) عنصر



Top



تعيد موضع رأس المكدس دون إزالته .





المصفوفات



تقدم الفئة TArrayAsVector نفس ما تقدمه المصفوفات في لغة السي++ من إمكانيات , إذ يمكن الوصول لعنصر عن طريق المؤثر [] المعروف , ولكنها تقدم ما هو أكثر من إمكانيات . فالدالة AddAt() مثلا تتيح لك إضافة عنصر في موضع ما دون أن تمحو العنصر الذي كان به , إذ تتسع المصفوفة عند هذا الموضع لتحتوي البيان الجديد (علي عكس ما يحدث عند استخدام المؤثر [] – راجع المثال التالي ) . ويبين الشكل الفرق بين نوعي الإضافة



شكل إضافة عنصر جديد لمصفوفة



ويبين الجدول الدوال المنتمية لهذه الفئة



جدول دوال الفئة TArrayAsVector































































































الدالة



الغرض منها



Add



إضافة عنصر , زيادة سعة المصفوفة



AddAt



إضافة عنصر في مكان ما , زيادة سعة المصفوفة



ArraySize



إعادة سعة المصفوفة



Destory



محو عنصر من المصفوفة ومن الذاكرة



Detach



محو عنصر من المصفوفة , وليس بالضرورة محوه من الذاكرة .



FirstThat



تعيد مؤشرا لأول كائن يحقق شرطا وضعه المبرمج



ForEach



تنفذ عملية علي كافة العناصر



GetItemsInContainer



تعيد عدد العناصر



HasMember



هل العنصر موجود في المصفوفة ؟



IsEmpty



تعيد 1 في حالة الخلو



IsFull



تعيد 1 في حالة الامتلاء



LastThat



تبحث عن كافة العناصر التي تحقق شرطا ما



LowerBound



إعادة الحد السفلي الجاري (السعة الأدني )



UpperBound



إعادة الحد العلوي الجاري (السعة الأقصي)





ويقدم لك المثال التالي تطبيقا لبعض إمكانيات دوال هذه الفئة :



 



Arrayflo.cpp




// arrayflo.cpp


// demonstrates TArrayAsVector class


#include <classlib\arrays.h>          // for TArrayAsVector


#include <iostream.h>


 


void main()


   {


   TArrayAsVector<float> arrflo(10);  // create array of 10 floats


 


   arrflo.Add(7.1);         // insert at 0


   arrflo.Add(7.2);         // insert at 1


   arrflo.Add(7.3);         // insert at 2


   arrflo.AddAt(7.15, 1);   // insert at 1 (moves 1 and 2)


   arrflo[0] = 7.01;        // overwrite at 0


                                      // display all floats


   for(int j=0; j<arrflo.GetItemsInContainer(); j++)


      cout << arrflo[j] << endl;


   }




وقد حددنا في هذا المثال السعة القصوي للمصفوفة (10) , وهناك إمكانية أن تحدد للمصفوفة حدين , السعة الأدني , والسعة القصوي , وفي هذه الحالة عليك أن تحدد عدد الخانات التي تزاد كل مرة (يسمي ذلك المعامل delta ) فلو افترضنا أن الحد العلوي هو 100خانة , السفلي 10 وأن الزيادة بمعدل 5 خانات (لو حدد بصفر فلن تتسع المصفوفة) فيكون التعريف بالمصفوفة علي النحو التالي :



TArrayAsVector <float> arrflo (100, 10, 5);




تعليقات

المشاركات الشائعة من هذه المدونة

المؤثرات الحسابية في C++

الرسم Graphics

دوال النمط الرسومي في ++C