Presentation is loading. Please wait.

Presentation is loading. Please wait.

Programming -2 برمجة -2 المحاضرة-5 Lecture-5.

Similar presentations


Presentation on theme: "Programming -2 برمجة -2 المحاضرة-5 Lecture-5."— Presentation transcript:

1 Programming -2 برمجة -2 المحاضرة-5 Lecture-5

2 Arrays تابع المصفوفات

3 المحتويات النصوص Strings تمرير المصفوفات إلى الدوال ترتيب المصفوفات
مصفوفات ذات البُعدين Two-Dimensional Arrays أمثلة وملاحظات

4 Strings النصوص النص في لغة C++ هو عبارة عن مصفوفة من الحروف + null character null character يُكتب ‘\0’ (سلاش زيرو) ويُستخدم لإنهاء النص يمكن إنشاء النص عن طريق المصفوفات كالتالي: char string1[ ] = “hello”; char string2[6] = “hello”; char string3[ ] = {‘h’,’e’,’l’,’l’,’o’,’\0’}; char string4[6] = {‘h’,’e’,’l’,’l’,’o’,’\0’}; char string5[6] = {‘h’,’e’,’l’,’l’,’o’}; جميع التعريفات التي بالأعلى صحيحة يمكن كتابة(‘\0’) null character بشكل صريح أو عدم كتابته, في حالة عدم كتابته سوف يضيفه الكومبايلر تلقائياً لاحظي أن حجم المصفوفة هو عبارة عن عدد الحروف + ‘\0’

5 حجم المصفوفة = 6 (عدد الحروف 5 + 0’\’ = (6
تابع . . . من الأفضل عند إنشاء مصفوفة من الحروف عدم كتابة الحجم حتى لا تحصل مشكلة عند نسيان null character حجم المصفوفة = عدد الحروف + null character مثال: (عدم كتابة null) char string1[] = "hello"; حجم المصفوفة = 6 (عدد الحروف 5 + 0’\’ = (6 مثال: (كتابة null) char string1[] = {‘h’,’e’,’l’,’l’,’o’,\0’}; جميع النصوص تنتهي بـ null ('\0') سواء تم كتابته بشكل صريح أو لا, لأن الكومبايلر سوف يضيفه في حالة عدم كتابته

6 تابع . . . قراءة عناصر مصفوفة الحروف من لوحة المفاتيح:
char string1[10]; cin>> string1; الكومبايلر سيضع الحروف التي أدخلها المستخدم في string1 يتوقف عن وضع الحروف في المصفوفة عند أول مسافة فارغة مدخلة يضيف null بعد آخر حرف أدخله المستخدم يجب تفادي إدخال عناصر أكبر من حجم المصفوفة لاحتمال حدوث خطأ! طباعة عناصر مصفوفة الحروف: cout<< string1; سيتم طباعة عناصر المصفوفة حتى يصل إلى null , فتتوقف عملية الطباعة

7 مثال: برنامج يوضح طريقة قراءة وطباعة مصفوفات الحروف
#include <iostream> using namespace std; int main() { (المسافات تعتبر أحرف) // حجم المصفوفة هو 20 char string1[ ] = “What is your name? "; char string2[10]; cout<< string1; cin>> string2; cout<< “Hello " << string2 << endl; system(“pause"); return 0; } // end main What is your name? Amal Hello Amal

8 تمرير المصفوفات إلى الدوال
لتمرير مصفوفة إلى دالة, نكتب اسم المصفوفة بدون الأقواس [ ]في المناداة إعلان الدالة وتعريف الدالة سيكون بالشكل التالي: مثال: مصفوفة حجمها 10 ونوعها int, دالة اسمها f1,نوع بياناتها المسترجعة void int a[10]; تعريف المصفوفة: f1(a); مناداة الدالة وإرسال المصفوفة إليها: void f1(int a[10]); إعلان الدالة: void f1(int a[10]) تعريف الدالة: { }

9 مثال: تمرير مصفوفة إلى دالة وطباعة عناصرها
#include <iostream> using namespace std; void printArray(int a[4]); int main() { int a[4] = {1, 2, 3, 4}; cout<< "Array elements are: "; printArray(a); system("pause"); return 0; } // end main void printArray(int a[4]) for(int i = 0; i < 4; i++) cout<< a[i] << " "; cout<< endl; } 9 Array elements are:

10 ملاحظات كتابة اسم المصفوفة وحجمها في إعلان الدالة اختياري
بمعنى أنه يمكن كتابة إعلان الدالة في المثال السابق كالتالي: void printArray(int a[4]); void printArray(int []); كتابة حجم المصفوفة في رأس الدالة اختياري بمعنى أنه يمكن كتابة رأس الدالة في المثال السابق كالتالي: void printArray(int a[4]) void printArray(int a[]) { { for(int i = 0; i < 4; i++) for(int i = 0; i < 4; i++) cout<< a[i] << " "; cout<< a[i] << " "; cout<< endl; cout<< endl; } } يمكن تمرير/إرسال حجم المصفوفة إلى الدالة كمتغير, مثال في السلايد القادم ...

11 مثال: تمرير مصفوفة وحجمها إلى دالة وطباعة عناصرها
#include <iostream> using namespace std; void printArray(int a[], int arraySize); int main() { const int arraySize = 4; int a[arraySize] = {1, 2, 3, 4}; cout<< "Array elements are: "; printArray(a, arraySize); system("pause"); return 0; } // end main void printArray(int a[], int arraySize) for(int i = 0; i < arraySize; i++) cout<< a[i] << " "; cout<< endl; } 11 Array elements are:

12 مثال: تمرير مصفوفة وحجمها إلى دالة وتغيير قيم عناصر المصفوفة
#include <iostream> using namespace std; void printArray(int a[], int arraySize); void modifyArray(int a[], int arraySize); int main() { const int arraySize = 4; int a[arraySize] = {1, 2, 3, 4}; // طباعة قيم عناصر المصفوفة قبل التغيير cout<< "Original array elements are: "; printArray(a, arraySize); // إرسال المصفوفة إلى الدالة لتغيير قيم عناصرها modifyArray(a, arraySize); // طباعة قيم عناصر المصفوفة بعد التغيير cout<< "Modified array elements are: "; system("pause"); return 0; } // end main 12

13 Original array elements are: 1 2 3 4
// دالة طباعة قيم عناصر المصفوفة void printArray(int a[], int arraySize) { for(int i = 0; i < arraySize; i++) cout<< a[i] << " "; cout<< endl; } // دالة تغيير قيم عناصر المصفوفة void modifyArray(int a[], int arraySize) a[i] *= 2; 13 Original array elements are: Modified array elements are:

14 ملاحظات نلاحظ أن تغيير قيم عناصر المصفوفة حصل داخل دالة اسمها modifyArray وعند طباعة المصفوفة من داخل الدالة الرئيسية main, تم طباعة قيم العناصر بعد التغيير بمعنى أن التغيير ثبت على المصفوفة الأصلية التي بداخل الـ main مع أن عملية تغيير قيم عناصر المصفوفة حصلت داخل دالة أخرى هذه العملية تسمى pass by reference (تمرير بـ المرجع), تعني أنه عند إرسال مصفوفة إلى دالة ما, وأجرت هذه الدالة تغييراً على قيم عناصر المصفوفة, هذا التغيير سوف يؤثر على المصفوفة الأصلية الموجودة في الـ main

15 أمثلة على المصفوفات (1) (2)

16 أمثلة على المصفوفات (3) (4)

17 ترتيب المصفوفات ترتيب المصفوفات Bubble Sort
هو إعادة ترتيب قيم عناصر المصفوفات تصاعدياً أو تنازلياً هناك عدة خوارزميات لترتيب العناصر, أشهرها Bubble Sort Bubble Sort طريقة عمل هذه الخوارزمية هي مقارنة كل عنصرين متجاورين, وتبديل قيمهما إذا احتاجت إلى إعادة ترتيب. خطوات ترتيب المصفوفة تصاعدياً: 1- نمر على عناصر المصفوفة جميعا. 2- عندما نجد عنصر أصغر من العنصر الذى يسبقه(قبله) نقوم بتبديلهما. 3- نمر هكذا على جميع عناصر المصفوفة حتى ننهي الدورة الاولى. 4- نعيد المرور على عناصر المصفوفة مرة أخرى و نرى إن كان هناك أحد العناصر أصغر مما يسبقه و نبدلهما حتى ننهي هذه الدورة. 5- نعيدها مرارا و تكرارا حتى ننتهي تماما من ترتيبها.

18 Bubble Sort Code #include <iostream> #include <iomanip>
using namespace std; void main() { const int arraySize = 10; // size of array a int a[ arraySize ] = { 2, 10, 4, 8, 6, 12, 89, 68, 45, 37 }; int temp; // temporary location used to swap array elements cout << "Data items in original order\n"; for ( int i = 0; i < arraySize; i++ ) cout << setw( 4 ) << a[ i ]; for ( int pass = 0; pass < arraySize - 1; pass++ ) for ( int j = 0; j < arraySize - 1; j++ ) if ( a[ j ] > a[ j + 1 ] ) temp = a[ j ]; a[ j ] = a[ j + 1 ]; a[ j + 1 ] = temp; } cout << "\nData items in ascending order\n"; for ( int k = 0; k < arraySize; k++ ) cout << setw( 4 ) << a[ k ]; cout << endl; system("pause"); Bubble Sort Code

19 تابع المثال السابق . . . Output: Data items in original order
Data items in ascending order

20 Two-Dimensional Arrays
مصفوفات ذات البُعدين عبارة عن جدول ذو صفوف وأعمدة الإعلان عن المصفوفات ذات البُعدين: كتابة نوع البيانات, اسم المصفوفة, عدد الصفوف, وعدد الأعمدة dataType arrayName[i][j]; حيث أن: i عدد الصفوف, j عدد الأعمدة مثال: int array[3][4]; مصفوفة ذات بُعدين تتكون من 3 صفوف و 4أعمدة 0 الصف 1 الصف 2 الصف 0 العمود 1 العمود 2 العمود 3 العمود a[ 0 ][ 0 ] a[ 1 ][ 0 ] a[ 2 ][ 0 ] a[ 0 ][ 1 ] a[ 1 ][ 1 ] a[ 2 ][ 1 ] a[ 0 ][ 2 ] a[ 1 ][ 2 ] a[ 2 ][ 2 ] a[ 0 ][ 3 ] a[ 1 ][ 3 ] a[ 2 ][ 3 ] العمود الصف اسم المصفوفة

21 تابع . . . إعطاء القيم لعناصر المصفوفات ذات البُعدين:
نكتب قيم الصفوف بين أقواس المجموعة ونفصل بينها بفاصلة (يمكن عدم كتابة الأقواس لأن الكومبايلر يهملها) الترتيب مهم! الصف الأول ثم الصف الثاني وهكذا ... مثال: مصفوفة تتكون من صفين وعمودين, قيم الصف الأول (1,2) , قيم الصف الثاني (3,4) int a[ 2 ][ 2 ] = { { 1, 2 }, { 3, 4 } }; OR int a[ 2 ][ 2 ] = { 1, 2, 3, 4 }; 0 الصف 1 الصف 0 العمود 1 العمود 0 الصف 1 2 3 4 1 الصف

22 تابع . . . طباعة عنصر محدد في المصفوفة ذات البُعدين:
int b[ 2 ][ 2 ] = { 1, 0, 3, 4 }; cout<< b[0][1]; سيطبع 0على الشاشة لا يمكن دمج رقم الصف والعمود داخل قوس واحد! مثل: cout<< b[ 0, 1 ]; Error!!! إرسال المصفوفة ذات البُعدين إلى دالة: مثل المصفوفات ذات البُعد الواحد, نكتب اسم المصفوفة بدون الأقواس في المناداة يجب كتابة عدد الأعمدة في الإعلان ورأس الدالة لا داعي لتحديد عدد الصفوف واسم المصفوفة في الإعلان لا داعي لتحديد عدد الصفوف في رأس الدالة 0 العمود 1 العمود 1 0 3 4 0 الصف 1 الصف

23 تابع . . . قراءة عناصر المصفوفة ذات البُعدين:
int a[5][3]; for(int i = 0; i < 5; i++) for(int j = 0; j < 3; j++) cin>> a[i][j]; طباعة عناصر المصفوفة ذات البُعدين: cout<< a[i][j];

24 أمثلة X int a[2][3]={{1,2,0},{3,4,5}}; OR int a[2][3]={{1,2},{3,4,5}};
int b[2][3]={{1,2,0},{3,4,5,6}}; X int c[2][3]={{1},{2,5}}; int d[2][3]={1,2,5}; int e[2][4]={{1,2},5};

25 مثال: تعريف مصفوفات ذات البُعدين وإرسالها إلى الدوال
#include <iostream> using namespace std; void printArray( int [][ 3 ] ); int main() { int array1[ 2 ][ 3 ] = { { 1, 2, 3 }, { 4, 5, 6 } }; int array2[ 2 ][ 3 ] = { 1, 2, 3, 4, 5 }; int array3[ 2 ][ 3 ] = { { 1, 2 }, { 4 } }; cout<< "Values in array1 are:" << endl; printArray( array1 ); cout<< "Values in array2 are:" << endl; printArray( array2 ); cout<< "Values in array3 are:" << endl; printArray( array3 ); return 0; // indicates successful termination } // end main

26 // function to output array with two rows and three columns
void printArray( int a[][ 3 ] ) { for ( int i = 0; i < 2; i++ ) { // for each row for ( int j = 0; j < 3; j++ ) // output column values cout<< a[ i ][ j ] << ' '; cout<< endl; // start new line of output } // end outer for structure } // end function printArray Values in array1 are: 1 2 3 4 5 6 Values in array2 are: 4 5 0 Values in array3 are: 1 2 0 4 0 0


Download ppt "Programming -2 برمجة -2 المحاضرة-5 Lecture-5."

Similar presentations


Ads by Google