Important Announcement
PubHTML5 Scheduled Server Maintenance on (GMT) Sunday, June 26th, 2:00 am - 8:00 am.
PubHTML5 site will be inoperative during the times indicated!

Home Explore ++C من البداية الى البرمجة الكيانية

++C من البداية الى البرمجة الكيانية

Published by Abedalrhman Hazem, 2021-04-10 14:35:05

Description: ++C من البداية الى البرمجة الكيانية

Search

Read the Text Version

[email protected] . ‫ جامعة الكوفة‬/ ‫ نضال خضير العبادي‬.‫د‬ class employee-info { protected : char name [ 20 ] ; int age ; public : void getdata ( ) ; void display ( ) ; }; void main ( ) { student-info obj [ max ] ; infile.open ( \" data \" َ ios :: in || ios :: out ) ; //‫الطزإ في المَف‬ infile.open ( fname َ ios :: out ) ; ………………….. cout << \" storing onto the file ……. \\n \" ; for ( I = 0 ; I < = max -1 ; ++I ) { infile.write ( ( char* ) &obj [ I ] َsizeof ( obj [ I ] ) ) ; } ……………… infile.open ( fname َ ios :: in ) ; //‫القراءه من المَف‬ cout << \" reading from the file ……… \\n \" ; for ( I = 0 ; I < = max -1 ; ++I ) { infile.read ( ( char* ) &obj [ I ] َ sizeof ( obj [ I ] ) ) ; obj [ I ] .display ( ) ; } infile.close() ; } ‫ الاوناف المتداخلة وعمليات الملف‬21.22 Nested Classes and File Operations ،‫كمرا سربق وان عرفرت ان الصرنف ممكرن ان يكرون عضرو مرن صرنف اخرر‬ ‫فعنردما يرتم الاعرلان عرن صرنف علرى انره عضرو مرن صرنف اخرر فران هرذا الصرنف‬ ‫ وفي هرذ‬،‫) او صنف ضمن صنف اخر‬nested class( ‫العضو يدعى صنف متداخل‬ ‫ كمرا‬،‫الحالة فان الصنف العضو سوف يكون مدا الصنف الاخر الذي هو عضو فيه‬ .‫ان كيان الصنف الخارجي سوف لايحتوي على كيان الصنف الداخلي‬ 615

‫ من البداية إلى البرمجة الكيانية‬C++ ‫• مقطع البرنامج التالي يوض كيفية قراءة وكتابة كيانات ونف متداخل في ملف‬ // Example 12.13 #include < fstream > class Student-Info { private : char name [ 20 ] ; public : void getbase ( ) ; void display ( ) ; class Date { private : int year ; public : void getdata ( ) ; void show-data ( ) ; class Age-Class { private : int age ; public : void getage () ; // Age‫نهاية اللهنف الدمر‬ void show-age ( ) ; }; } ; // Data ‫نهاية اللهنف البيانا‬ } ; // Student-Info‫نهاية الاع إ عن اللهنف مدَوما الطَبه‬ void main ( ) { Student-Info obj1 ; //‫الطزإ في المَف‬ Student-Info :: date obj 2 ; Student-Info :: date :: Age-Class obj 3 ; fstream infile ; infile.open ( fname ios :: in || ios :: out ) ; ………………………… infile.open ( fname َ ios :: out ) ; cout << \" storing onto the file ……… \\n \" ; for ( I = 0 ; I < = n-1 ; i++ ) { 616

[email protected] . ‫ جامعة الكوفة‬/ ‫ نضال خضير العبادي‬.‫د‬ infile.write ( ( char* ) &obj 1 َsizeof ( obj 1 ) ) ; infile.write ( ( char* ) &obj 2 َsizeof ( obj 2 ) ) ; infile.write ( ( char* ) &obj 3 َsizeof ( obj 3 ) ) ; } infile.close () ; ………………… infile.open ( fname َ ios :: in ) ; //‫القراءه من المَف‬ cout << \" reading from the file ……\\n \" ; for ( I = 0 ; I < = n-1 ; ++I ) { obj 1.display () infile.read ( ( char* ) &obj 1 َsizeof ( obj 1 ) ) ; infile.read ( ( char* ) &obj 2 َsizeof ( obj 2 ) ) ; infile.read ( ( char* ) &obj 3 َsizeof ( obj 3 ) ) ; ; obj 2. show-date () ; obj 3. show-age () ; } infile.close () ; } ‫• برنامج لقراءة بيانات مصفوفة كيانات ونف متوداخل مون لوحوة المفواتي وكتابتهوا‬ // Example 12.14 .‫في ملف معين‬ #include < fstream > #include < string > char sex ; #include < iomanip > const int max = 100 ; class Student-Info { private : char name [ 20 ] ; long int rollno ; public : getbase () ; void display () ; class Date () { private : int day ; int month ; int year ; public : void getdate () ; void show-date () ; class Age-Class { private : int age ; public : 617

‫ من البداية إلى البرمجة الكيانية‬C++ void getage () ; // Age ‫نهاية الاع إ عن اللهنف‬ void show-age () ; } ; } ; // Date ‫نهاية الاع إ عن اللهنف‬ } ; // Student-Info‫نهاية الاع إ عن اللهنف‬ void student-info :: getbase () { cout << \" enter a name : \" ; cin >> name ; cout << \" roll number : \" ; cin >> rollno ; cout << \" sex : \" ; cin >> sex ; } void Student-Info :: Date :: getdate () { cout << \" Enter date of a birth \" << endl ; cout << \" day \" ; cin >> day ; cout << \" month : \" ; cin >> month ; cout << \" year : \" ; cin >> year ; } void Student-Info :: Date :: Age-Class :: getage () { cout << \" Enter an age : \" ; cin >> age ; } void Student-Info :: display () { cout << name << \" \" << '\\t' ; cout << rollno << \" \" ; cout << sex << \" \"; } void Student-Info :: Date :: show-date () { cout << day << ' / ' << month << ' / ' << year << '\\t ' ; } void Student-Info :: Date :: Age-Class :: show-age() { cout << '\\t ' << age << endl ; } void main () { Student-Info obj 1 [ max ] ; Student-Info :: date obj 2 [ max ] ; Student-Info :: Date :: age-class obj 3 [ max ] ; int I َn ; fstream infile ; char fname [ 10 ] ; cout << \" Enter a file name to be stored ? \\n \" ; cin >> fname ; infile.open ( fname َios :: in || ios :: out ) ; cout << \" How many students ? \\n \" ; // ُّ‫تقرأ من لوحة المفاتي‬ cin >> n ; cout << \" Enter the following information \\n \" ; // program continue‫البرنامج له تِمَة‬ // continue for ( I = 0 ; I < = max-1 ; ++ I ) { int j = I + 1 ; cout << \" \\n object : \" << j << endl ; obj 1 [ I ] . getbase () ; obj 2 [ I ] .getdate () ; 618

[email protected] . ‫ جامعة الكوفة‬/ ‫ نضال خضير العبادي‬.‫د‬ obj 3 [ I ] .getage () ; } //‫الطزإ في المَف‬ infile.open ( fname َios :: out ) ; cout << \" storinf onto the file …….. \\n \" ; for ( I = 0 ; I < = max-1 ; ++I ) { infile.write (( char* ) & obj 1 [ I ] َsizeof ( obj 1 [ I ] ) ) ; infile.write ( ( char* ) & obj 2 [ I ] َsizeof ( obj 2 [ I ] )) ; infile.write ( ( char* ) & obj 3 [ I ] َsizeof ( obj 3 [ I ])) ; } infile.close () ; //‫القراءه من المَف‬ infile.open ( fname َios :: in ) ; cout << \" reading from the file ………… \\n \" ; cout << \" \\n\\n\\n \" << endl ; cout << \" contents of the array of nested classes \\n \" ; cout << \" ------------------------------------------- \" << endl ; cout << \" student's – name roll – no sex date – of – birth age \\n \" ; cout << \" --------------------------------------------------------------------- - \" << endl ; for ( I = 0 ; I < = max-1 ; ++I ) { infile.read ( ( char* ) & obj 1 [ I ] َsizeof ( obj 1 [ I ] )) ; infile.read ( ( char* ) & obj 2 [ I ] َsizeof ( obj 2 [ I ] )) ; infile.read ( ( char* ) & obj 3 [ I ] َsizeof ( obj 3 [ I ] )) ; obj 1 [ I ] .display () ; obj 2 [ I ] .show-date ; obj 3 [ I ] . show-age () ; } cout << \" ________________________________ \" << endl ; infile.close () ; } ‫ معالجة ملفات الووول العشوائي‬21.21 Random Access File Processing ‫يعتبررر خلررق ملفررات الوصررول المتسلسررل اكثررر سررهولة مررن ملفررات الوصررول‬ ‫ حي ان البيانات فري ملفرات الوصرول المتسلسرل تخرزن وتسرترجع بشركل‬،‫العشوائي‬ ‫ ان مؤشرر الملرف يتحرر مرن بدايرة الملرف الرى نهايرة‬،‫متسلسل واحدة بعرد الاخررى‬ ‫الملف في ملف الوصول المتسلسل بينمرا لريب بالضررور ان يبردأ المؤشرر فري ملرف‬ 619

‫‪ C++‬من البداية إلى البرمجة الكيانية‬ ‫الوصرول العشروائي مرن بدايرة الملرف ويتحرر باتجراة نهايرة الملرف‪ ،‬ان المؤشرر فري‬ ‫ملف الوصول العشروائي يتحرر مباشررة الرى أي موقرع فري الملرف بردلا مرن تحركرة‬ ‫بالتترالي كمرا فري ملرف الوصرول المتسلسرل‪ .‬تسرتخدم ملفرات الوصرول العشروائي مرع‬ ‫ملفات قواعد البيانات‪ ،‬ولغر قراءة وتحروير كيران فري قاعردة البيانرات فران الملرف‬ ‫يجب ان يفتح في طور الوصول لكرل مرن القرراءة والكتابرة ويسرتخدم الملرف الررئيب‬ ‫(‪ )fstream‬للاعلان عن ملف الوصول العشوائي وكما بينا سابقا فران (‪ )fstream‬هرو‬ ‫صرنف يسرتند علرى كرل مرن الصرنفين (‪ .)and ofstream ،ifstream‬ان (‪)fstream‬‬ ‫يررث مؤشرري ملرف للتعامرل مرع ملرف الوصرول العشروائي واحرد للادخرال والاخرر‬ ‫للاخراج (لكل من القراءة والكتابة)‪.‬‬ ‫يفتح ملف الوصول العشوائي مع الاطوار التالية‬ ‫( ‪(ios::in ،ios::out ،ios::ate ،and ios::binary‬‬ ‫•مقطرع البرنرامج الترالي يبرين كيفيرة فرتح ملرف الوصرول العشروائي لكرل مرن‬ ‫القراءة والكتابة‬ ‫> ‪#include < fstream‬‬ ‫{ )( ‪void main‬‬ ‫; ‪fstream file‬‬ ‫; ) ‪file.open ( fname ،ios :: in || ios :: out || ios :: ate || ios :: binary‬‬ ‫} ‪……………..‬‬ ‫ملاحظة‪//:‬‬ ‫يفضرل فرتح الملرف مرع الاطروار اعرلا لغرر انجراز عمليرات القرراءة‪،‬‬ ‫الكتابة‪ ،‬والاضافة‪ ،‬ويجب ان يعرف على انه ثنائي لان بيانات الصنف الاعضاء‬ ‫تخزن بالصيغة الثنائية ‪.‬‬ ‫‪611‬‬

‫د‪ .‬نضال خضير العبادي ‪ /‬جامعة الكوفة ‪[email protected] .‬‬ ‫ملاحظة ‪//:‬‬ ‫‪ fstream‬يررث الردوال الاعضراء التاليرة لغرر تحريرك مؤشرر الملرف بمرا‬ ‫يساعد للوصول الى قاعدة البيانات‬ ‫قريم التعردد الرقمري‬ ‫الموقع في الملف‬ ‫‪enum‬‬ ‫‪ios :: beg‬‬ ‫بداية الملف‬ ‫‪ios :; cur‬‬ ‫الموقرررررررع الحرررررررالي‬ ‫للمؤشر‬ ‫‪ios :: end‬‬ ‫نهاية الملف‬ ‫اما الدوال الاعضاء التالية فهي تستخدم لمعالجة ملفات الوصول العشوائي‬ ‫‪ )seekg( .2‬وهي تستخدم لتحديد عمليات الملف لعمليات الادخال العشوائي‬ ‫• مقطع البرنامج التالي يوضح عمل هذ الدالة‪:‬‬ ‫> ‪#include < fstream‬‬ ‫اذهب الى البايت رقم ‪//41‬‬ ‫{ )( ‪void main‬‬ ‫اذهب الى البايت رقم ‪//41‬‬ ‫; ‪fstream infile‬‬ ‫‪…………………….‬‬ ‫اذهب الى نهاية الملف ‪//‬‬ ‫مؤشر الملف يجب ان ‪//‬‬ ‫; ) ‪infile.seekg ( 40‬‬ ‫يتحر للخلف بايت واحد ‪//‬‬ ‫; ) ‪infile.seekg ( 40 , ios :: beg‬‬ ‫; ) ‪infile.seekg ( 0 ،ios :: end‬‬ ‫; ) ‪infile.see;g ( -1 ،ios :: cur‬‬ ‫‪ )seekp( .2‬يستخدم لتحديد عمليات الملف للأخراج العشوائي‬ ‫‪ (tellg) .3‬يستخدم لفح الموقع الحالي للادخال‬ ‫‪ )tellp) .4‬يستخدم لفح الموقع الحالي للاخراج‬ ‫‪611‬‬

‫‪ C++‬من البداية إلى البرمجة الكيانية‬ ‫‪ 21.23‬الووول العشوائي ‪Random Access‬‬ ‫مبردئيا ان الملفرات تقررأ وتكترب بشركل متسلسرل‪ .‬ولكرن يمكرن الوصرول الررى‬ ‫الملف بترتيب عشوائي‪ .‬في نمام الأدخال والأخراج فري ‪ C++‬فانرك تقروم بالوصرول‬ ‫العشوائي باستخدام الدوال ()(‪ .)seekg(), and seekp‬اغلب الاشكال عمومية هي‪:‬‬ ‫;)‪istream &seekg(off_type offset ،seekdir origin‬‬ ‫;)‪ostream &seekp(off_type offset ،seekdir origin‬‬ ‫هنا )‪ (off_type‬هو مرن نروع الاعرداد الصرحيحة يعررف بواسرطة (‪ (ios‬والتري‬ ‫لهرا القابليرة لحمرل اكبرر قيمرة مقبولرة والتري يمكرن ان تأخرذها الازاحرة (‪ .(offset‬أمرا‬ ‫‪ seekdir‬فهو متعدد رقمي (‪ (enumeration‬له هذ القيم‪:‬‬ ‫‪ios::beg‬‬ ‫بداية الملف‬ ‫‪ios::cur‬‬ ‫الملف الحالي‬ ‫‪ios::end‬‬ ‫نهاية الملف‬ ‫يحصل الحرف التالي في حزمة الادخال‬ ‫)‪( peek‬‬ ‫يعيد حرف الى حزمة الادخال‬ ‫)‪( putback‬‬ ‫تدفق مخرجات الحزمة‬ ‫)‪( flush‬‬ ‫نمام الأدخال والأخراج فري ‪ C++‬يردير مؤشررين يشرتركان مرع الملرف‪ .‬واحرد‬ ‫هرو )‪ (get pointer‬والرذي يحردد مكران حردوث عمليرة الأدخرال اللاحرق فري الملرف‪.‬‬ ‫المؤشر الأخر هو(‪ (putpointer‬والذي يحدد اين ستحدث عملية الاخراج اللاحقة في‬ ‫الملف‪ .‬فري كرل وقرت عنردما تحردث عمليرة ادخرال او اخرراج‪ ،‬فران المؤشرر المناسرب‬ ‫سيقدم‪ .‬استخدام الدوال ()(‪ )seekg(), and seekp‬سيساعد علرى الوصرول الرى الملرف‬ ‫بطريقة غير تسلسلية‪.‬‬ ‫الدالرة (‪ )seekg‬تحرر مؤشرر الملرف المشرتر الحرالي (مؤشرر ‪ )get‬بازاحرة‬ ‫مقدرة بعدد من البايتات ضمن المصدر المحدد‪ .‬الدالة )‪ )seekp‬تحر مؤشرر الملرف‬ ‫المشرتر الحرالي (مؤشرر ‪ )putpointer‬بازاحرة مقردرة بعردد مرن البايترات ضررمن‬ ‫المصدر المحدد‪.‬‬ ‫‪612‬‬

‫د‪ .‬نضال خضير العبادي ‪ /‬جامعة الكوفة ‪[email protected] .‬‬ ‫بشركل عرام الوصرول العشروائي للادخرال والاخرراج المفررو ان ينجرز فقرط‬ ‫على تلك الملفات التي فتحت للعمليات الثنائية‪.‬‬ ‫• برنامج يوض استخدام الدالة )‪ ،)seekp‬ويسم ل بتحديد اس ملوف فوي سوطر‬ ‫الاوامر‪ ،‬متبوع بعدد البايتات ال ي يحدد موقع الأدخال في الملوف والو ي ترغوب‬ ‫ان تبدأ منه بعملية الأدخال‪ .‬سيقوم البرنامج بعدها بكتابوة ‪ X‬فوي الموقوع المحودد‪.‬‬ ‫لاح بان الملف يجب ان يفت لعمليات القراءة والكتابة الثنائي‪.‬‬ ‫‪// Example 12.15‬‬ ‫>‪#include <iostream‬‬ ‫>‪#include <fstream‬‬ ‫>‪#include <cstdlib‬‬ ‫;‪using namespace std‬‬ ‫)] [‪int main(int argc َchar *argv‬‬ ‫{‬ ‫{ )‪if(argc!=3‬‬ ‫;\"‪cout << \"Usage: CHANGE <filename> <byte>\\n‬‬ ‫;‪return 1‬‬ ‫}‬ ‫;)‪fstream out(argv[1] َios::in | ios::out | ios::binary‬‬ ‫{ )‪if(!out‬‬ ‫;\"‪cout << \"Cannot open file.\\n‬‬ ‫;‪return 1‬‬ ‫}‬ ‫;)‪out.seekp(atoi(argv[2]) َios::beg‬‬ ‫;)'‪out.put('X‬‬ ‫;)(‪out.close‬‬ ‫;‪return 0‬‬ ‫}‬ ‫• برنوامج يسوتخدم )‪ . )seekg‬سويقوم بعورض محتويوات الملوف‪ ،‬بودءا مون الموقوع‬ ‫ال ي تحدده على سطر الامر‪ )Seekp( .‬سيحرك مؤشر ‪.put‬‬ ‫‪// Example 12.16‬‬ ‫>‪#include <iostream‬‬ ‫>‪#include <fstream‬‬ ‫‪613‬‬

‫ من البداية إلى البرمجة الكيانية‬C++ #include <cstdlib> using namespace std; int main(int argc َchar *argv[]) { char ch; if(argc!=3) { cout << \"Usage: NAME <filename> <starting location>\\n\"; return 1; } ifstream in(argv[1] َios::in | ios::binary); if(!in) { cout << \"Cannot open file.\\n\"; return 1; } in.seekg(atoi(argv[2]) َios::beg); while(in.get(ch)) cout << ch; return 0; } :‫بامكانك ان تحدد الموقع الحالي لكل مؤشر ملف باستخدام الدالة‬ pos_type tellg(); ‫( والتي لهرا القابليرة لحمرل اكبرر‬ios( ‫( هو نوع معرف بواسطة‬pos_type) ‫هنا‬ .‫قيمة تعيدها دالتة‬ ‫) التري تحرر مؤشررات‬seekg(), and seekp()( ‫هنا نسر متطابقرة لكرل مرن‬ .)tellg(), and tellp()( ‫الملرف الرى الموقرع المحردد بواسرطة القريم المعرادة لكرل مرن‬ :‫الصيغة العامة لهم هو‬ istream &seekg(pos_type position); ostream &seekp(pos_type position); 614

‫د‪ .‬نضال خضير العبادي ‪ /‬جامعة الكوفة ‪[email protected] .‬‬ ‫‪ 21.24‬فح حالات الادخال والاخراج ‪Checking I/O Status‬‬ ‫نمرررام الادخرررال والخرررروج فررري ‪ C++‬يحرررافظ علرررى معلومرررات الحالرررة حرررول‬ ‫المخرجررات لكررل عمليررة مررن عمليررات الادخررال والاخررراج‪ .‬الحالررة الحاليررة لترردفق‬ ‫المدخلات والمخرجات تكون موصوفة في كيان من نروع ‪ ،iostate‬والتري هري قائمرة‬ ‫اعداد تعرف بواسطة (‪ )ios‬والذي يحتوي على هذ الاعضاء‪:‬‬ ‫)‪)tellg‬‬ ‫يعيد موقع ‪ get‬الحالي‬ ‫)‪)tellp‬‬ ‫يعيد موقع ‪ put‬الحالي‬ ‫‪ios::goodbit‬‬ ‫عدم وجود خطأ بضبط البتات‬ ‫تعيد ‪ 1‬عندما يصل نهاية الملف‪ ،‬وصفر بخلاف ذلك ‪ios::eofbit‬‬ ‫تعيد ‪ 1‬عندما لايحدث خطأ في الادخال او الاخراج‪ ،‬بخرلاف ذلرك يعيرد صرفر‬ ‫‪ios::failbit‬‬ ‫يعيرد ‪ 1‬عنردما يحردث خطرأ فري الادخرال او الاخرراج‪ ،‬و صرفر بخرلاف ذلرك‬ ‫‪ios::badbit‬‬ ‫هنرا طريقتران بالامكران ان تسراعد بالحصرول علرى معلومرات حالرة الادخرال‬ ‫والاخرراج‪ .‬اولا‪ ،‬بالامكران اسرتدعاء الدالرة )‪ ،(rdstate‬والتري هري عضرو مرن (‪.)ios‬‬ ‫ولها الصيغة العامة‪:‬‬ ‫;) (‪iostate rdstate‬‬ ‫وهي تعيد الحالة الحالية لبتات الاخطاء‪ .‬وكما يمكنك ان تخمن مرن النمرر فري‬ ‫قائمة الاعلام (بتات الاخطاء) فران )‪ (rdstate‬سرتعيد ‪ goodbit‬عنردما لايحردث خطرأ‪.‬‬ ‫بخلاف ذلك فان خطأ سيعاد‪.‬‬ ‫الطريقرة الثانيرة بامكانرك ان تحردد اذا ماحردث خطرأ وذلرك باسرتخدام واحرد او‬ ‫اكثر من دوال ‪ ios‬الاعضاء‪:‬‬ ‫;)(‪bool bad‬‬ ‫;)(‪bool eof‬‬ ‫‪615‬‬

‫ من البداية إلى البرمجة الكيانية‬C++ bool fail(); bool good(); ‫ القراءة والكتابة في الملف النصي‬21.25 Reading and Writing Text Files ‫او الكتابرة فري ملرف نصري هرو باسرتخدام العوامرل‬/‫ان ابسط طريقة للقراءة من‬ .(<< and >>) .test ‫ وسلسلة رمزية في ملف يسمى‬،‫ قي حقيقية‬، ‫• برنامج يكتب عدد وحي‬ // Example 12.17 #include <iostream> #include <fstream> using namespace std; int main() { ofstream out(\"test\"); if(!out) { cout << \"Cannot open file.\\n\"; return 1; } out << 10 << \" \" << 123.23 << \"\\n\"; out << \"This is a short text file.\"; out.close(); return 0; } ‫ وسلسلة رمزية من الملوف الو ي خلوك بالرنوامج‬،‫ حرفا‬،‫• برنامج يقرأ عددا وحيحا‬ 12.17 // Eample 12.18 #include <iostream> #include <fstream> using namespace std; int main() 616

‫د‪ .‬نضال خضير العبادي ‪ /‬جامعة الكوفة ‪[email protected] .‬‬ ‫{‬ ‫;‪char ch‬‬ ‫;‪int i‬‬ ‫;‪float f‬‬ ‫;]‪char str[80‬‬ ‫;)\"‪ifstream in(\"test‬‬ ‫{ )‪if(!in‬‬ ‫;\"‪cout << \"Cannot open file.\\n‬‬ ‫;‪return 1‬‬ ‫}‬ ‫;‪in >> i‬‬ ‫;‪in >> f‬‬ ‫;‪in >> ch‬‬ ‫;‪in >> str‬‬ ‫;\"‪cout << i << \" \" << f << \" \" << ch << \"\\n‬‬ ‫;‪cout << str‬‬ ‫;)(‪in.close‬‬ ‫;‪return 0‬‬ ‫}‬ ‫ضرع فري ذهنرك بران العامرل )>>( يسرتخدم لأغررا قرراءة الملفرات النصرية‪،‬‬ ‫ويحردث هنرا تحويرل لربعض الحرروف‪ .‬مثرال‪ ،‬حرروف الفراغرات (‪ (whitespace‬يرتم‬ ‫حرذفها‪ .‬امرا اذا اردت منرع تحويرل اي حررف‪ ،‬فأنرك يجرب أن تفرتح الملرف فري طرور‬ ‫الوصول الثنائي‪ ،‬كذلك تذكر عندما تستخدم العامل (>>) لقراءة سلسلة رمزية‪ ،‬ضع‬ ‫توقف عندما يصادفك حرف من حروف الفراغات ‪.whitspace‬‬ ‫‪ 21.26‬الأدخال والأخراج الثنائي غير المنسك ‪Unformatted Binary‬‬ ‫‪I/O‬‬ ‫ملفات النص المنسقة (مثل تلك المستخدمة في المثال السابق) تكون مفيردة فري‬ ‫حالات مختلفة‪ ،‬ولكن ليب لها المرونرة التري فري الملفرات الثنائيرة غيرر المنسرقة‪ .‬لهرذا‬ ‫السربب ‪ C++‬تروفر عردد مرن دوال الأدخرال والأخرراج للملرف الثنرائي (احيانرا يردعى‬ ‫الملف الخام ‪ )raw‬والتي بامكانها انجاز عمليات غير منسقة‪.‬‬ ‫‪617‬‬

‫‪ C++‬من البداية إلى البرمجة الكيانية‬ ‫فعندما تنجز عمل من نوع العمليات الثنائية على الملف‪ ،‬تاكرد مرن فرتح الملرف‬ ‫باسررتخدام محرردد الطررور )‪ .(ios::binary‬بررالرغم مررن ان دوال الملررف غيررر المنسررق‬ ‫سروف تعمرل علرى الملفرات المفتوحرة لطرور الرنص‪ ،‬فرأن بعرض تحرويلات الحرروف‬ ‫ربما تحدث‪ .‬تحويلات الحروف تعطل الغر من عمليات الملف الثنائي‪.‬‬ ‫بشركل عرام‪ ،‬هنرا طريقتران لقرراءة وكتابرة البيانرات الثنائيرة غيرر المنسرقة مرن‬ ‫او الررى الملررف‪ .‬اولا‪ ،‬يمكنررك كتابررة بايررت وذلررك باسررتخدام الدالررة العضررو ()(‪،)put‬‬ ‫وقراءة بايت وذلك باستخدام الدالة العضرو ))(‪ .(get‬الطريقرة الثانيرة‪ ،‬باسرتخدام دوال‬ ‫‪ C++‬لأدخال وأخرراج كتلرة ()(‪ )read(), and write‬كرل مرن هرذ الطررق سروف يرتم‬ ‫تجربتها هنا‪.‬‬ ‫‪ 21.26.2‬استخدام ))( ‪) get() and put‬‬ ‫الدالرة ))( ‪ )get‬لهرا عردد مرن الأشركال‪ ،‬ولكرن النسرخة الأكثرر اسرتخداما هري‬ ‫الموضحة فيما يلي‪ ،‬مع دالة ))(‪(put‬‬ ‫;)‪istream &get(char &ch‬‬ ‫;)‪ostream &put(char ch‬‬ ‫الدالة ))(‪ (get‬تقرأ حرفا مفردا واحدا من حزمرة بيانرات وتضرعها فري المتغيرر‬ ‫‪ ،ch‬فهي تعيرد مرجعيرة الرى الحزمرة‪ .‬وتكرون القيمرة صرفر او فررا )‪ (null‬أذا مرا ترم‬ ‫الوصول الى نهاية الملف‪.‬‬ ‫الدالة ))(‪ (put‬تكتب ‪ ch‬الى الحزمة وتعيد مرجعية الى الحزمة‪.‬‬ ‫*برنامج سوف يقوم بعر محتويات اي ملف على الشاشة‪ ،‬وسوف يستخدم‬ ‫الدالة (‪ )get‬التي تقرأ حرفا من ملف وتكتبه )‪ (put‬اي الحرف في ملف‪.‬‬ ‫‪// Example 12.19‬‬ ‫>‪#include <iostream‬‬ ‫>‪#include <fstream‬‬ ‫;‪using namespace std‬‬ ‫)] [‪int main(int argc َ char *argv‬‬ ‫{‬ ‫‪618‬‬

[email protected] . ‫ جامعة الكوفة‬/ ‫ نضال خضير العبادي‬.‫د‬ char ch; if(argc!=2) { cout << \"Usage: PR <filename>\\n\"; return 1; } ifstream in(argv[1] َ ios::in | ios::binary); if(!in) { cout << \"Cannot open file.\\n\"; return 1; } //‫ ستِوإ طأ عند الواللهول الى نهاية المَف‬in while(in) { in.get(ch); if(in) cout << ch; } in.close(); return 0; } ‫ مسرببا توقرف حلقرة‬،‫ سريكون الشررط خطرأ‬،‫عنرد الوصرول الرى نهايرة الملرف‬ ‫ عليه هنا في الحقيقة طرق اكثر رصانه لكتابة شفرة حلقرة التكررار‬،while ‫التكرار‬ ‫كما في ادنا‬,‫التي تقرأ وتعر الملف‬ while(in.get(ch)) cout << ch; ‫ وهرذ سرتكون خطرأ‬in ‫( سرتعيد الحزمرة‬get) ‫هذا الشكل يعمل وذلك لان الدالة‬ .‫عند الوصول الى نهاية الملف‬ .‫( لكتابة سلسلة رمزية في الملف‬put) ‫• برنامج يستخدم‬ // Example 12.20 #include <iostream> #include <fstream> using namespace std; int main() { char *p = \"hello there\"; ofstream out(\"test\" َios::out | ios::binary); if(!out) { cout << \"Cannot open file.\\n\"; return 1; } while(*p) out.put(*p++); 619

‫‪ C++‬من البداية إلى البرمجة الكيانية‬ ‫;)(‪out.close‬‬ ‫;‪return 0‬‬ ‫}‬ ‫‪ 21.26.1‬قراءة وكتابة كتل من البيانات‬ ‫‪Reading and Writing Blocks of Data‬‬ ‫قراءة وكتابة كتل من البيانات الثنائية‪ ،‬مستخدما الدوال الأعضاء ‪read() and‬‬ ‫)(‪write‬‬ ‫صيغتها العامة هي‪:‬‬ ‫;)‪istream &read(char *buf ،streamsize num‬‬ ‫;)‪ostream &write(const char *buf ،int streamsize num‬‬ ‫الدالة (‪ )read‬تقرأ عددا مرن البايترات (‪ )num‬مرن الحزمرة المشرتركة وتضرعها‬ ‫فري مكران فري الرذاكرة مؤشرر عليهرا بواسرطة المؤشرر(‪ .)buf‬وكمرا بينرا سرابقا‪ ،‬حجرم‬ ‫الحزمة )‪ (streamsize‬معرفة كشكل مرن الاعرداد الصرحيحة‪ .‬وهري يمكنهرا مرن حمرل‬ ‫اكبر عدد من البايتات والتري يمكرن ان تنقرل بواسرطة اي عامرل مرن عوامرل الادخرال‬ ‫والاخراج‪.‬‬ ‫• برنامج يكتب ث يقرأ مصفوفة من الأعداد الصحيحة‬ ‫‪// Example 12.21‬‬ ‫>‪#include <iostream‬‬ ‫>‪#include <fstream‬‬ ‫;‪using namespace std‬‬ ‫)(‪int main‬‬ ‫{‬ ‫;}‪int n[5] = {1, 2, 3, 4, 5‬‬ ‫;‪register int i‬‬ ‫;)‪ofstream out(\"test\" َ ios::out | ios::binary‬‬ ‫{ )‪if(!out‬‬ ‫;\"‪cout << \"Cannot open file.\\n‬‬ ‫;‪return 1‬‬ ‫}‬ ‫‪621‬‬

‫د‪ .‬نضال خضير العبادي ‪ /‬جامعة الكوفة ‪[email protected] .‬‬ ‫;)‪out.write((char *) &n َsizeof n‬‬ ‫;)(‪out.close‬‬ ‫‪for(i=0; i<5; i++) // clear array‬‬ ‫;‪n[i] = 0‬‬ ‫;)‪ifstream in(\"test\" َios::in | ios::binary‬‬ ‫{ )‪if(!in‬‬ ‫;\"‪cout << \"Cannot open file.\\n‬‬ ‫;‪return 1‬‬ ‫}‬ ‫;)‪in.read((char *) &n َsizeof n‬‬ ‫‪for(i=0; i<5; i++) // show values read from file‬‬ ‫;\" \" << ]‪cout << n[i‬‬ ‫;)(‪in.close‬‬ ‫;‪return 0‬‬ ‫}‬ ‫لاحررظ ان تحويررل الانررواع داخررل الاسررتدعاء ()(‪ )read(),and write‬يكررون‬ ‫ضروريا عندما تعمل على الذاكرة (‪ )buffer‬والتي لرم تعررف كمصرفوفة احررف‪ .‬اذا‬ ‫مرا ترم الوصرول الرى نهايرة الملرف قبرل ان يرتم قرراءة عردد الاحررف المحردد (‪،)num‬‬ ‫عنردها ببسراطة فران الدالرة (‪ )read‬سررتتوقف‪ ،‬ومسراحة الرذاكرة سرتحتوي عردد مررن‬ ‫الاحرررف والترري كانررت مترروفرة‪ .‬بامكانررك ان تجررد عرردد الاحرررف الترري تررم قراءتهررا‬ ‫باستخدام دالة عضو اخرى‪ ،‬تدعى ))(‪ ،(gcount‬والتي لها الصيغة التالية‬ ‫;)(‪streamsize gcount‬‬ ‫الدالرة ))(‪ (gcount‬عيرد عردد الاحررف التري ترم قراءتهرا بواسرطة اخرر عمليرة‬ ‫ادخال‪.‬‬ ‫• مثال لمقارنة ملف ‪Example for File Comparison‬‬ ‫البرنرامج الترالي يوضرح قروة وبسراطة نمرام ملفرات ‪ .C++‬فهرو يقرارن ملفرين‬ ‫لمعرفة اذا كانا متساويين‪ .‬هذا ممكن باستخدام دوال الملفات الثنائيرة )(‪،(read‬‬ ‫))(‪ .eof(), and gcount‬يفررتح البرنررامج اولا الملفررات للعمليررات الثنائيررة‪( .‬وهررذا‬ ‫ضرروري لمنرع تحرويلات الاحررف مرن الحردوث)‪ ،‬بعردها‪ ،‬تقررا جرزءا واحردا مرن‬ ‫الذاكرة المؤقتة في الوقت الواحد من كل مرن الملفرين وتقرارن محتوياترة مرا‪ .‬ولتحديرد‬ ‫‪621‬‬

‫ من البداية إلى البرمجة الكيانية‬C++ ‫) لتحديد بالضربط كرم عردد الاحررف فري‬gcount( ‫حجم الذاكرة المؤقتة تستخدم الدالة‬ ‫ فران القليرل مرن الشرفرة‬C++ ‫ عنرد اسرتخدام دوال ملفرات‬،‫ كمرا تررى‬،‫الرذاكرة المؤقتره‬ .‫تحتاج لانجاز هذ العملية‬ ‫• برنامج لمقارنة اثنان من الملفات‬ // Example 12.22 #include <iostream> #include <fstream> using namespace std; int main(int argc َchar *argv[ ]) { register int i; unsigned char buf1[1024] َbuf2[1024]; if(argc!=3) { cout << \"Usage: compfiles <file1> <file2>\\n\"; return 1; } ifstream f1(argv[1] َ ios::in | ios::binary); if(!f1) { cout << \"Cannot open first file.\\n\"; return 1; } ifstream f2(argv[2] َ ios::in | ios::binary); if(!f2) { cout << \"Cannot open second file.\\n\"; return 1; } cout << \"Comparing files...\\n\"; do { f1.read((char *) buf1 َ sizeof buf1); f2.read((char *) buf2 َ sizeof buf2); if(f1.gcount() != f2.gcount()) { cout << \"Files are of differing sizes.\\n\"; f1.close(); f2.close(); return 0; } 622

[email protected] . ‫ جامعة الكوفة‬/ ‫ نضال خضير العبادي‬.‫د‬ // compare contents of buffers for(i=0; i<f1.gcount(); i++) if(buf1[i] != buf2[i]) { cout << \"Files differ.\\n\"; f1.close(); f2.close(); return 0; } } while(!f1.eof() && !f2.eof()); cout << \"Files are the same.\\n\"; f1.close(); f2.close(); return 0; } 623

‫‪ C++‬من البداية إلى البرمجة الكيانية‬ ‫‪624‬‬

[email protected] . ‫ جامعة الكوفة‬/ ‫ نضال خضير العبادي‬.‫د‬ ‫الملاحك‬ IBM Character Codes ASCII Chart :A ‫الملحك‬ IBM‫شفرات رموز‬ DEC ‫عشري‬ HEX Symbol Key ‫المفتا‬ Use in C ‫استخدام بلغة‬ ‫سادس‬ ‫الرمز‬ ‫عشر‬ 1 11 (NULL) Ctrl 2 Ctr A 1 11 A Ctrl B Ctrl C 2 12 B Ctrl B Ctrl E 3 13 C Ctrl F Ctrl G 4 14 D Backspace 5 15 E Tab Ctrl J 6 16 F Ctrl K Ctrl L 7 17 G Enter Beep Ctrl N Backspace 8 18 H Ctrl O Tab Ctrl P Linefeed (new line) 9 19 I Ctrl Q Vertical Tab Ctrl R Form Feed 11 A1 J Ctrl S Carriage Return Ctrl T 11 B1 K Ctrl U Ctrl V 12 C1 L Ctrl W Ctrl X 13 D1 M Ctrl Y Ctrl Z 14 E1 N Escape 15 F1 O 16 11 P 17 11 Q 18 12 R 19 13 S 21 14 T 21 15 U 22 16 _ 23 17 W 24 18 X 25 19 Y 26 A1 Z 27 B1 a 625

‫ من البداية إلى البرمجة الكيانية‬C++ 28 C1 b Ctrl \\ 29 D1 c Ctrl ] 31 E1 d Ctrl 6 31 F1 e Ctrl – 32 21 SPACE BAR 33 21 ! ! 34 22 “ “ 35 23 # # 36 24 $ $ 37 25 % % 38 26 & & 39 27 ‘ ‘ 41 28 ( ( 41 29 ) ) 42 A2 * * 43 B2 + + 44 C2 , , 45 D2 – – 46 E2 . . 47 F2 / / 48 31 1 1 49 31 1 1 51 32 2 2 51 33 3 3 52 34 4 4 53 35 5 5 54 36 6 6 55 37 7 7 56 38 8 8 57 39 9 9 58 A3 : : 59 B3 ; ; 61 C3 < < 61 D3 = = 62 E3 > > 626

[email protected] . ‫ جامعة الكوفة‬/ ‫ نضال خضير العبادي‬.‫د‬ 63 F3 ? ? @ 64 41 @ A B 65 41 A C D 66 42 B E F 67 43 C G H 68 44 D I 69 45 E J K 71 46 F L M 71 47 G N O 72 48 H P Q 73 49 I R S 74 A4 J T U 75 B4 K V W 76 C4 L X Y 77 D4 M Z [ 78 E4 N \\ ] 79 F4 O ^ _ 81 51 P ' a 81 51 Q 82 52 R 83 53 S 84 54 T 85 55 U 86 56 V 87 57 W 88 58 X 89 59 Y 91 A5 Z 91 B5 [ 92 C5 \\ 93 D5 ] 94 E5 ^ 95 F5 _ 96 61 ' 97 61 a 627

98 62 b ‫ من البداية إلى البرمجة الكيانية‬C++ 99 63 c 111 64 d b 111 65 e c 112 66 f d 113 67 g e 114 68 h f 115 69 i g 116 A6 j h 117 B6 k i 118 C6 l j 119 D6 m k 111 E6 n l 111 F6 o m 112 71 p n 113 71 q o 114 72 r p 115 73 s q 116 74 t r 117 75 u s 118 76 v t 119 77 w u 121 78 x v 121 79 y w 122 A7 z x 123 B7 { y 124 C7 | z 125 D7 } { 126 E7 ~ | 127 F7 f } 128 81 Ä ~ 129 81 ü Ctrl ← 131 82 é Alt 128 131 83 É Alt 129 132 84 ä Alt 130 Alt 131 Alt 132 628

[email protected] . ‫ جامعة الكوفة‬/ ‫ نضال خضير العبادي‬.‫د‬ 133 85 à Alt 133 Alt 134 134 86 å Alt 135 Alt 136 135 87 Ç Alt 137 Alt 138 136 88 ê Alt 139 Alt 140 137 89 ë Alt 141 Alt 142 138 A8 è Alt 143 Alt 144 139 B8 ï Alt 145 Alt 146 141 C8 î Alt 147 Alt 148 141 D8 ì Alt 149 Alt 150 142 E8 Ä Alt 151 Alt 152 143 F8 Å Alt 153 Alt 154 144 91 É Alt 155 Alt156 145 91 æ Alt157 Alt158 146 92 Æ Alt159 Alt160 147 93 ô Alt161 Alt162 148 94 ö Alt163 Alt164 149 95 ò Alt165 Alt166 151 96 ù Alt167 151 97 ù 152 98 ÿ 153 99 Ö 154 A9 Ü 155 B9 õ 156 C9 £ 157 D9 ¥ 158 E9 û 159 F9 ü 161 A0 á 161 A1 í 162 A2 ó 163 A3 ú 164 A4 ñ 165 A5 Ñ 166 A6 a 167 A7 o 629

168 A8 ® ‫ من البداية إلى البرمجة الكيانية‬C++ 169 A9 © Alt168 Alt169 171 AA ™ Alt170 Alt 171 171 AB ' Alt 172 Alt 173 172 AC .. Alt 174 Alt 175 173 AD ¡ Alt 176 Alt 177 174 AE « Alt 178 Alt 179 175 AF » Alt 180 Alt 181 176 B0 ¤ Alt 182 Alt 183 177 B1 ¤ Alt 184 Alt 185 178 B2 ¤ Alt 186 Alt 187 179 B3 ≥ Alt 188 Alt 189 181 B4 ¥ Alt 190 Alt 191 181 B5 µ Alt 192 Alt 193 182 B6 ð Alt 194 Alt 195 183 B7 ς Alt 196 Alt 197 184 B8 Π Alt 198 Alt 199 185 B9 π Alt 200 Alt 201 186 BA ∫ Alt 202 187 BB a 631 188 BC o 189 BD Ω 191 BE æ 191 BF ™ 192 C0 ¿ 193 C1 ¡ 194 C2 ¬ 195 C3 √ 196 C4 ∫ 197 C5 ≈ 198 C6 Δ 199 C7 « 211 C8 » 211 C9 ... 212 CA g

[email protected] . ‫ جامعة الكوفة‬/ ‫ نضال خضير العبادي‬.‫د‬ 213 CB À Alt 203 Alt 204 214 CC à Alt 205 Alt 206 215 CD Õ Alt 207 Alt 208 216 CE Œ Alt 209 Alt 210 217 CF œ Alt 211 Alt 212 218 D0 – Alt 213 Alt 214 219 D1 — Alt 215 Alt 216 211 D2 \" Alt 217 Alt 218 211 D3 \" Alt 219 Alt 220 212 D4 Ô Alt 221 Alt 222 213 D5 \" Alt 223 Alt 224 214 D6 ÷ Alt 225 Alt 226 215 D7 ◊ Alt 227 Alt 228 216 D8 ÿ Alt 229 Alt 230 217 D9 Ÿ Alt 231 Alt 232 218 DA / Alt 233 Alt 234 219 DB ¤ Alt 235 Alt 236 221 DC < Alt 237 221 DD > 222 DE fi 223 DF fl 224 E0 α 225 E1 β 226 E2 Γ 227 E3 π 228 E4 ς 229 E5  231 E6 µ 231 E7 τ 232 E8 Ë 233 E9 Θ 234 EA Ω 235 EB Î 236 EC Ï 237 ED ψ 631

238 EE ∈ ‫ من البداية إلى البرمجة الكيانية‬C++ 239 EF Ô Alt 238 Alt 239 241 F0 ≡ Alt 240 Alt 241 241 F1 + Alt 242 Alt 243 242 F2 ≥ Alt 244 Alt 245 243 F3 ≤ Alt 246 Alt 247 244 F4 Ù Alt 248 Alt 249 245 F5 1 Alt 250 Alt 251 246 F6 ÷ Alt 252 Alt 253 247 F7 ∼ Alt 254 Alt 255 248 F8 ° ‫ الكلمات المحجوزة‬:B ‫الملحق‬ 249 F9 • namespace 251 FA . N 251 FB √ new 252 FC η O operator 253 FD ² Private 254 FE < P protected 255 FF blank public Asm 632 A auto Bool B break case catch C char class

[email protected] . ‫ جامعة الكوفة‬/ ‫ نضال خضير العبادي‬.‫د‬ const const_cast continue Default delete register D do R reinterpret_cast double return dynamic_cast Short Else signed enum sizeof E explicit S static export static_cast extern struct switch template False this throw float T true F try typedef for friend typeid 633

G Goto ‫ من البداية إلى البرمجة الكيانية‬C++ If typename I inline Union int U unsigned L Long using virtual Main V void M volatile wchar_t mutable W while 634

[email protected] . ‫ جامعة الكوفة‬/ ‫ نضال خضير العبادي‬.‫د‬ References 1. Bjarne Stroustrup, “C++ Programming”, 3rd Edition, AT&T , 1997, ISBN 0201889544. 2. Bruce Eckel, President, “Thinking in C++”, 2nd Edition, Volum 1, Prentice Hall, 2000, ISBN 0-13-979809-9. 3. D. Ravichandran, “Program with C++ “, 2nd edition, McGraw- Hill publishing company Limited, 2003. 4. Danny Kalev, \"ANSI/ISO C++ Professional Programmer's Handbook”, Macmillan Computer Publishing, 1999. 5. David Vandevoorde, Nicolai M. Josuttis, “C++ Templates: The Complete Guide”, Addison Wesley, 2002, ISBN 0-201-73484- 2. 6. Francis Glassborow, Roberta Allen, “A Beginner’s Introduction to Computer Programming You Can Do It!”, John Wiley & Sons Ltd, 2004, ISBN 0-470-86398-6. 7. Grady Booch, Robert A. Maksimchuk, Michael W. Engle, and etal, “Object-Oriented Analysis and Design with Application”, 3rd edition, Pearson Prentice Hall, 2007, ISBN 0- 201-89551-X 8. Herb Sutter, Exceptional C++: 47 Engineering Puzzles, Programming Problems, and Solutions”, Addison Wesley, 1999, ISBN 0-201-61562-2. 9. Herbert Schildt, “C++ from the Ground Up”, 3rd Edition, The McGraw-Hill Companies, 2003, ISBN 0-07-222897-0. 10. Jayantha Katupitiya Kim Bentley, “Interfacing with C++ Programming Real-World Applications”, Springer-Verlag Berlin Heidelberg, 2006, Library of Congress Control Number: 2005937895, ISBN-10 3-540-25378-5. 11. Jeff Cogswell, Christopher Diggins, Ryan Stephens, Jonathan Turkanis, “C++ Cookbook”, O'Reilly, 2005, ISBN 0- 596-00761-2 12. Jeffrey S. Childs, “C++ Classes and Data Sructures”, Pearson Prentice Hall, 2008, ISBN 0-13-158051-5. 635

‫ من البداية إلى البرمجة الكيانية‬C++ 13. Matthew Telles, “C++ Timesaving Techniques™ For Dummies”, Wiley Publishing, Inc., 2005, ISBN 0-7645-7986- X. 14. Nassir H. Salman, “C++ Programming with 469 Solved Problems”, DAR Wael, 2009, ISBN 978-9957-11-759-7. 15. Nicholas A. Solter , Scott J. Kleper, “Professional C++”, Wiley Publishing, Inc., 2005, ISBN 0-7645-7484-1. 16. Nicolai M. Josuttis, “C++ Standard Library: A Tutorial and Reference”, Addison Wesley, 1999, ISBN 0-201-37926-0. 17. Paulo Franca, “C++: No Experience Required”, Sybex, 1998, ISBN 078212111X. 18. Ray Lischner, “C++ in a Nutshell”, O'Reilly, 2003, ISBN 0- 596-00298-X. 19. Robert Lafore, “Waite Group's Object-Oriented Programming in C++”, 3rd edition, Macmillan Computer Publishing,1998, ISBN 157169160x. 20. Sharam Hekmat, “C++ Programming”, Pragmatix Software Pty. Ltd., 1998. 21. Stanley B. Lippman, Josée Lajoie, Barbara E. Moo, “C++ Primer”, 4th Edition, Addison Wesley Professional, 2005, ISBN 0-201-72148-1 22. Steve Heller , “Learning to Program in C++”, Prentice Hall PTR, 2000, ISBN 0-13-032410-8 23. Steve Oualline, “Practical C++ Programming”, O'Reilly & Associates, Inc, USA, 1995, ISBN. 1-56592-139-9 24. Walter Savitch , “Problem solving with C++”, seven edition, Pearson Prentice Hall, 2009. 636


Like this book? You can publish your book online for free in a few minutes!
Create your own flipbook