السلام عليكم ورحمـة الله وبركـاته
هذه مشاركاتي الاولـى في المنتدى
أرجـو التكرم والإجابة على هذا السؤال البسيط
1
كيف بإمكـاني صنع مصفوفة مؤشرات عبارة عـن بعـدين
أي أن البعـدين جميعهما مؤشرات
السلام عليكم ورحمـة الله وبركـاته
هذه مشاركاتي الاولـى في المنتدى
أرجـو التكرم والإجابة على هذا السؤال البسيط
1
كيف بإمكـاني صنع مصفوفة مؤشرات عبارة عـن بعـدين
أي أن البعـدين جميعهما مؤشرات
لا يا عـزيزي لم أقصد هذا الشيء
الذي أقصده كيف أجعل البعـدين مؤشرات يستطيع مستخـدم البرنامج تغييرها متى شاء
لا أريدها ثابتـة مثل ما أنت كاتب أريدها ديناميكيـة ( لبعـدين وليس لبعد واحد)
حسب ما قرأت في أحد الكتب أنـه بإمكـانتك فعل ذلك هـكذا
int **pArray[ i ][ j ]
أي بمؤشرين
لكن الكاتب لم يتطرق إلى كيفية الوصول إلى عـناصر هذه المصفوفـة الثنائيـة
ولا كيفيـة حجز مكـان لها في الذاكرة
أرجـو مساعـدتي في أقرب وقت وشكراً لكم
البعد الاول ببساطة:
type **table = 0; *table = new type[d1];
تستطيع عمل البعد الثاني عن طريق for loop
for(int i = 0; i < d1; i++)
{
table = new type[d2];
}لم اختبر هذا الكود حيث كتبته للتو .. لكن اعتقد انه يعطيك فكرة عامة.
تستطيع البحث في جووجل عن 2d dynamic array C++
شكراً جزيلاً لكم
هذه الطريقة هي طريقـة حجز الذاكرة ....
لكن القضيـة هـي كيف أصل لعـناصر هذه المصفوفـة
فمثلاً
إذا افترضنا أن المستخـدم أدخل للبعد الاول عشرة عـناصر والبعـد الثاني عشرة عـناصر
ثم كتبت في البرنامج أنـا
هذا الكـود
Array[5] [5] = X+Y
مع العـلم أن الـX والـ Y أعـداد يدخلها المستخدم سابقاً في البرنامج ؛الذي سيحدث للبرنامج أن المترجم لن يعـطيني أي خـطاً لكن حينما يصل البرنامج إلى ذلك السطر السابق يتوقف ... جربتها أيضاً بمكتشف الأخطاء وأخبرني أن الخطأ في السطر السابق....
كل الذي أريده كيف أصل لتلك المصفوفـة مع العـلم أن الذي أريده أنها ذات بعـدين متغيرة دائماً.. لا أريدها ثابتـة
أرجـوكم أن تساعدوني لأني أحـاول كتابة برنامج يحسب لك مصفوفة جاوس
طرقة باش مهـندس صحيحـة لكن حسب عـلمي وتجربتي لن تنفع إلا مع مصفوفـة المحارف وليس مع الأعداد الصحيحـة integer
وشكراً وآسف إن كنت أزعـجتكم
ربما الخطأ في التطبيق و ليس في الفكرة.
ضع الكود هنا (و لا تنسى احاطته بعلامات [ code ] )
عـموماً هذا هـو كـودي
وهـو تجربـة
لا أدري لماذا لم ينجح مع جهـازي أو برنامجي... ربما بسبب تعقيد موضوع المؤشرات
أتـمنى أن تجربـوه
مع العـلم أن كل قصدي هـو أن اقوم بإنشاء مصفوفـة ديناميكيـة ذات بعـدين ثم يقوم المستخدم بإدخال عـناصر المصفوفة ليس إلا.. مع العـلم أنها ليست مصفوفة محارف
هل هذا الكـود صحيح... إذا لم يكن صحيح أو أن المترجم يقول أنه صحيح في حين أنه خاطيء فأرجـو أن توضحوا لي أين هـو الخطأ
وشكراً لتفاعلكم السريع
#include <iostream.h>
void main()
{
int i,j;
cin >> i >> j;
float **Gawes = new float *;
for (int counter=0; counter < i; counter++)
{
Gawes [counter]= new float [j];
}
for (counter=0; counter <i;counter++)
for (int counter2=0;counter2 <j; counter2 ++)
cin >> Gawes [j];
cout << "\n" << Gawes[0][0];
}السطر ما قبل الأخير
هـو للتأكد أن البرنامج بالفعل خـزن العـنصر الأول في مكـانه الصحيح (حتى أتأكد أني لم أخـطي في اللوب)
cin >> Gawes [j];
قيم i و j هي ابعاد المصفوفة, و ليس العنصر الحالي داخل اللوب.
استخدم
Gawes [counter] [counter2];
آسف..
قمت بكتـابة البرنامج على نفس شاشـة المنتدى
قمت بتجربـة الكـود سابقاً قبل أن اسأل .. لكنـه أعـطاني خطأ .. ليس في الترجمـة وإنما في التنفيذ ...
وأظن أحد الأسباب لذلك هـو وجود تعارض بين البورلاند (وحتى الفيجوال سي في بعض الحالات) مع البرامج الأخـرى النشطـة مثل المكافيء والزون آلارم .... وبالتالي أضطر لغلق جميع تلك البرامج قبل أن أكتب أي كـود
عــموماً الطريقـة نجحت وشكراً جزيلا لكم
هذا الموضوع مغلق.