المشاركات

عرض المشاركات من فبراير, ٢٠١٣

الذاكرة ككائن للتدفق في ++C

صورة
الذاكرة ككائن للتدفق يمكننا أن نعامل مساحة معينة من الذاكرة ككائن تدفق ندخل فيها بيانات بالضبط كما نفعل مع ملف , وهي إمكانية مفيدة في حالة الرغبة في تشكيل الخرج علي صورة معينة (كأن تخرج الأعداد بعددين عشريين فقط) , ولكنك تريد أيضا أن تستخدم الدوال المخرجة للنصوص التي تتطلب عبارات نصية كمدخلات . هذا المطلب شائع بالنسبة للواجهات الرسومية GUI . وهناك عائلة من فئات التدفقات تتعامل مع هذا النوع من التشكيل داخل الذاكرة فللخرج لدينا الفئة ostrstream المشتقة من ostream (مع أشياء أخري ) , وللإدخال لدينا istrsteam المشتقة من istream ولكائنات الذاكرة لدينا strstream المشتقة من iostream للإدخال والإخراج . والشئ الغالب أن تحتاج إلي ostream وفي مثالنا نبين لك كيف يكون ذلك . سوف نبدأ بإنشاء ذاكرة مرحلية للبايتات , ثم كائن منتم إلي ostrsteam مستخدمين الذاكرة المرحلية buff وحجمها كمعاملين لبادئة التدفق . والأن يمكننا إخراج النص المهيأ إلي الذاكرة المرحلية كما لو كان كائنا لتدفق , وإليك صياغة البرنامج . ostrstr.cpp   // ostrstr.cpp // writes formatted data into memory   #include

زيادة تحميل مؤثرات الإدخال والإخراج في ++C

صورة
زيادة تحميل مؤثرات الإدخال والإخراج ننتقل الأن إلي موضوع أخر متعلق بالتدفقات , زيادة تحميل مؤثري الإدخال والإخراج , وهي أداة من الأدوات القوية للسي++ , فيها يمكنك أن تشكل إخراج الكائنات التي عرفتها علي الصورة الملائمة لها مباشرة دون أن تتجشم عبء دالة مخصوصة للإظهار , علي غرار الدالة display() التي كانت قاسما مشتركا في كافة برامجنا المتعلقة بالمسافات الإنجليزية . ويبين لك البرنامج التالي هذه الإمكانية . englio.cpp   // englio.cpp // overloaded << and >> operators // UCS Laboratories   #include <iostream.h> #include <conio.h>   class Distance // English Distance class { private : int feet; float inches; public : Distance() // constructor (no args) { feet = 0; inches = 0.0; } Distance( int ft, float in ) // constructor (two args) { feet = ft; inches = in ; } friend istream& operator >> (istream& s,

مؤشرات الملفات في ++C

صورة
مؤشرات الملفات كل كائن لملف يتضمن رقمين , يسميان " مؤشر القراءة ومؤشر الكتابة get pointer , put pointer " , كما قد يسميا current get position موضع القراءة الحالة " , و current put position " موضع الكتابة الحالي " , أو اختصارا current position " الوضع الحالي " يحدد الرقمان بداية القراءة والكتابة . والوضع الغالب للقراءة هي من أول الملف إلي نهايته , أما الكتابة فقد يقصد أن تكون من بداية الملف بحيث تمحو الكتابة الجديدة القديمة , أو من نهاية الملف , وذلك في حالة الإلحاق حيث تفتح الملف مستخدمين البتة ios::app . ولكن قد تثور الحاجة لتحديد موضع معين للكتابة أو للقراءة عندئذ نريد التحكم في مؤشرات الموضع , عندئذ نستخدم الدوال التي تمكننا من ذلك , وهي الدالتان seekg(),tellg() , وseekp(), tellp() للكتابة , كما سوف نشرح فيما يلي . تحديد المواضع قدمنا لمثال لتحديد بالدالة seekg() عن طريق معامل وحيد , يحدد الموضع في بداية الملف . ولهذه الدالة حالة أخري , يكون لها معاملان , أحدهما يحدد مسافة يقال لها " الإزاحة offset " والثاني يحدد النقطة المنسوب

عمليات الكائنات في ++C

صورة
عمليات الكائنات نتولي في المقالات التالية شرح عمليات الإدخال والإخراج حين تجري علي كائنات كتابة عناصر كائن في قرص سوف نستخدم الكائن person الذي استخدمناه في أمثلة سابقة ولكتابة الكائنات نستخدم عموما النمط الثنائي , وهو الذي يضمن لنا أن يتم التعامل مع الأعداد بالطريقة الملائمة . وفي البرنامج التالي سوف يطلب من المستخدم أن يدخل بيانات تدخل في كائن من الفئة person ثم يكتب الكائن في الملف PERSON.DAT الذي يخزن علي القرص .   opers.cpp   // opers.cpp // saves person object to disk #include <fstream.h> // for file streams #include <conio.h>   class person // class of persons { protected : char name[40]; // person's name int age; // person's age public : void getData( void ) // get person's data { cout << "Enter name: " ; cin >> name; cout <<

العمليات الثنائية في ++C

صورة
العمليات الثنائية يمكننا أن نخزن أرقاما علي الأقراص باستخدام العمليات المهيأة كما مر بنا حيث يحتل كل رقم في العدد بايتا مستقلا , ولكن إذا تطلب الأمر تخزين كم كبير من الأرقام , فالأنسب من ناحية الاقتصاد في مساحة الذاكرة أن تخزن علي الصورة الثنائية , وهي التي تخون بها في ذاكرة الرام بالجهاز . وفي الصورة الثنائية يخزن العدد الصحيح في 2 بايت ويخزن العدد الكسري في أربعة بايتات دائما , مهما كانت عدد أرقام العدد . بينما يتطلب عدد مثل 12345 إلي خمسة بايتات في الصورة النصية , ويتطلب عدد مثل 6.02314e13 إلي عشرة بايتات . في البرنامج التالي نبين كيف نكتب مصفوفة من الأعداد في قرص , ثم نقرأها في ذاكرة مستخدمين النمط الثنائي . سوف نستخدم دالتين جديدتين , write() من دوال ofstream و read() من دوال ifstream . هاتان الدالتان تعتبران البيانات سلسلة من البايتات (من النوع char ) , لا يهمها علي أي وجه تكون تهيئتها , فالأولي ببساطة تملأ ذاكرة مرحلية بالبايتات , وتفرغها في القرص , ثم تقرأها الدالة الثانية . ولذا فإن كل دالة تأخذ معاملين لها , مؤشر (عنوان) الذاكرة المرحلية ] في البرنامج التالي المصفوفة [b