اريد ان انشي مصفوفه ثنائيه يقوم المستخدم بتحديد ابعادها
int size
cin>>size
[int *ar=new int [size
هذه الطريقه لانشاء مصفوفه احاديه يقوم المستخدم بادخال ابعادها
اريد ان انشي مصفوفه ثنائيه يقوم المستخدم بتحديد ابعادها
int size
cin>>size
[int *ar=new int [size
هذه الطريقه لانشاء مصفوفه احاديه يقوم المستخدم بادخال ابعادها
فارس2010 كتب:اريد ان انشي مصفوفه ثنائيه يقوم المستخدم بتحديد ابعادها
int size
cin>>size
[int *ar=new int [size
هذه الطريقه لانشاء مصفوفه احاديه يقوم المستخدم بادخال ابعادها
شو قاصد ثنائية؟ يعني ذات بعدين؟
آها
إنشاء مصفوفة دايناميكية ذات بعدين
المثال التالي يقوم بإنشاء مصفوفة ذات بعدين وإضافة قيم وطباعتهن وحدفهن
للأمانة العلمية المثال من هنا بإضافة بعض التعديلات والتجارب
#include <iostream>
using namespace std;
int main()
{
int row, col;
cin >> row >> col;
int **dynamicArray = 0;
//memory allocated for elements of rows.
dynamicArray = new int *[row] ;
//memory allocated for elements of each column.
for( int i = 0 ; i < row ; i++ )
dynamicArray = new int[col];
//free the allocated memory
for(int j = 0; j < row; j++)
{
for(int h = 0; h < col; h++)
{
dynamicArray[j][h] = h;
cout << dynamicArray[j][h] << endl;;
}
}
for( int i = 0 ; i < row ; i++ )
delete [] dynamicArray ;
delete [] dynamicArray ;
return 0;
}هل هو المطلوب؟
أجمل الإمنيات
سبب التعديل: تحسين وتنظيم الكود
تم تعديل هذه المشاركة بواسطة ♥ حُوريّة ♥ في 31 مارس 2011 في 00:09
[وسط]
♥ Countess ♥

♥
[/وسط]
بارك الله في علمك وجزاك الله خيرا
واسالك اختي الفاضله ان تشرحي لي الكود السابق باستفاضه اكثر
وكيف يفهم الكومبيلور الكود خطوه خطوه...
فارس2010 كتب:بارك الله في علمك وجزاك الله خيرا
واسالك اختي الفاضله ان تشرحي لي الكود السابق باستفاضه اكثر
وكيف يفهم الكومبيلور الكود خطوه خطوه...
بارك الله بك
بتؤمر أخي إن شاء الله
بتنطيني فرصة لبكرا!
يحرسك الله
[وسط]
♥ Countess ♥

♥
[/وسط]
السلام عليكم ورحمة الله
اخي المكرم فارس
آسفة للتأخير
هذا هو الكود للشرح
#include <iostream>
using namespace std;
int main()
{
int row, col;
cin >> row >> col;
int **dynamicArray = 0;
//memory allocated for elements of rows.
dynamicArray = new int *[row] ;
//memory allocated for elements of each column.
for( int i = 0 ; i < row ; i++ )
dynamicArray = new int[col];
//free the allocated memory
for(int j = 0; j < row; j++)
{
for(int h = 0; h < col; h++)
{
dynamicArray[j][h] = h;
cout << dynamicArray[j][h] << endl;;
}
}
for( int i = 0 ; i < row ; i++ )
delete [] dynamicArray ;
delete [] dynamicArray ;
return 0;
}شغلة التضمين وشغلة الدالة الرئيسية وكتير من الأساسيات معروفة لديك إن شاء الله, متوقعة ذلك من نوع السؤال والموضوع الأصلي...
الميزة الحقيقة بالكود هو إنشاء مصفوفة ذات بعدين تقبل من المستخدم إدخال عدد الصفوف وعدد الأعمدة row و col
لا نستطيع عمل ذلك ببساطة أو بطريقة اعتيادية كما نفعل مع المصفوفات ذات البعدين التي نقوم بتعيين صفوف وأعمدة لها مباشرة عند الإنشاء
لذلك قام المؤلف للكود السابق بإنشاء مؤشر لمؤشر Pointer to Pointer كما في السطر التالي وتعيين قيمة استهلالية وهي صفر أي Null ويستحسن هذه الطريقة في لغة سي++
int **dynamicArray = 0;
بخصوص ماهية وطريقة عمل المؤشرات للمؤشرات Pointers to Pointers تحتاج مراجعة وبحت من مصدر أو كتاب أو ربما بمراجعة المواضيع المثبتة هنا بالقسم
هذا يعني أن المصفوفة السابقة ستحتوي على مجموعة من المؤشرات وليست مجرد عناصر
هنا إنشاء مؤشرات للصفوف the rows
dynamicArray = new int *[row] ;
عدد الصفوف ستتم بواسطة المتغير row بواسطة المستخدم إثناء إدخال القيم المطلوبة بأول البرنامج وعدد الأعمدة كذلك
وبالتالي إنشاء مصفوفات عادية للأعمدة(البعد التاني) لكل مؤشر من مؤشرات الصفوف السابقة (البعد الأول)
for( int i = 0 ; i < row ; i++ ) dynamicArray = new int[col];
الجزئية التالية عبارة عن وضع قيم اعداد صحيحة للصفوف والأعمدة
for(int j = 0; j < row; j++)
{
for(int h = 0; h < col; h++)
{
dynamicArray[j][h] = h;
cout << dynamicArray[j][h] << endl;;
}
}الجزئية التالية والأخيرة هي تحرير الزاكرة وحدف كل ما سبق بواسطة الأمر delete
for( int i = 0 ; i < row ; i++ ) delete [] dynamicArray ; delete [] dynamicArray ;
طريقة حدف الكائنات والمصفوفات بصفة عامة بواسطة الأمر delete قد تكون ضمن كتاب او مرجع
آسفة للتقصير لا استطيع الشرح اكتر من ذلك لأنهن ستأخد درس متكامل في جوهر اللغة بطريقة واسعة
أطيب المُنى
[وسط]
♥ Countess ♥

♥
[/وسط]
الشرح مفيد ماشاء الله عليكي
اخي الكريم من الافضل ان تقراء عن مفهومين هما array of arrays و two dimension array حيث ان ما تم عمله هو array of arrays .
مثلاً في سؤالك
لننشيء مصفوفه ثنائيه ابعادها 4*4 .
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int a[4*4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
int *TwoDimA[4];
int i,j;
for(i=0;i<16;i+=4)
TwoDimA[i/4]=&a;
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
cout<<TwoDimA[j]<<" ";
cout<<endl;
}
system("pause");
return 0 ;
}