Asma'a نشر 26 نوفمبر 2020 أرسل تقرير مشاركة نشر 26 نوفمبر 2020 ممكن توضيج الخطأ في هذا البرنامج اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
0 Wael Aljamal نشر 26 نوفمبر 2020 أرسل تقرير مشاركة نشر 26 نوفمبر 2020 مرحبا، هل يمكنك عرض رسالة الخطأ عند تنفيذ البرنامج! و نسخ الشيفرة البرمجية أيضا شكرا لك اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
0 Asma'a نشر 27 نوفمبر 2020 الكاتب أرسل تقرير مشاركة نشر 27 نوفمبر 2020 بتاريخ On 11/27/2020 at 01:55 قال Wael Aljamal: مرحبا، هل يمكنك عرض رسالة الخطأ عند تنفيذ البرنامج! و نسخ الشيفرة البرمجية أيضا شكرا لك #include <iostream> using namespace std; int i, j; int *print(int **arr, int m, int n) { for (i = 0; i < 3; i++) for (j = 0; j < n; j++) return (*(arr+i) + j); } int main() { int arr[][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; int m = 3, n = 3; int (*mm)[3]=arr; // We can also use "print(&arr[0][0], m, n);" int **p= print(mm, m, n); for (i = 0; i < 3; i++) for (j = 0; j < n; j++) cout<< (*(p+i) + j); return 0; 1 اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
0 Wael Aljamal نشر 27 نوفمبر 2020 أرسل تقرير مشاركة نشر 27 نوفمبر 2020 بتاريخ 1 ساعة قال أسماء عبدالله محمود النظاري: #include <iostream> using namespace std; int i, j; int *print(int **arr, int m, int n) { for (i = 0; i < 3; i++) for (j = 0; j < n; j++) return (*(arr+i) + j); } int main() { int arr[][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; int m = 3, n = 3; int (*mm)[3]=arr; // We can also use "print(&arr[0][0], m, n);" int **p= print(mm, m, n); for (i = 0; i < 3; i++) for (j = 0; j < n; j++) cout<< (*(p+i) + j); return 0; ما هو المطلوب من السؤال بالضبط؟ اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
0 Asma'a نشر 27 نوفمبر 2020 الكاتب أرسل تقرير مشاركة نشر 27 نوفمبر 2020 بتاريخ 12 ساعات قال Wael Aljamal: ما هو المطلوب من السؤال بالضبط؟ تمرير مصفوفة ثنائية بالبوينترز للدالة اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
0 سمير عبود نشر 27 نوفمبر 2020 أرسل تقرير مشاركة نشر 27 نوفمبر 2020 مرحباً بك، الخطأ الذي يظهر هو كالتالي: cannot convert 'int (*)[3]' to 'int**' ما يعني أن الدالة print المفروض تستقبل وسيط من النوع **int لكن ما تم تمريره هو int (*)[3] و هو نوع المُتغير mm بطبيعة الحال يجب توحيد الأنواع حتى لا تحدث أخطاء هناك طريقتين إما بتعديل نوع الوسيط او المُعامل أو تعديل نوع المتُغير الذي تم تمريره كوسيط الطريقة الأولى بإمكانك تعديل الدالة print للشكل التالي: int* print(int (*arr)[3], int m, int n) { for(i = 0; i < 3; i++) for(j = 0; j < n; j++) return (*(arr+i) + j); } بالإضافة إلى تعديل السطر التالي: int** p = print(mm, m, n); إلى int* p = print(mm, m, n); لأن ما تُرجعه الدالة print هو مؤشر(pointer) و ليس مؤشر على مؤشر(pointer to pointer) بإمكانك تجربة الطريقة من خلال هذا : الرابط الطريقة الثانية تعديل نوع المُتغير الذي تم تمريره كوسيط بهذا الشكل: int main() { int arr[][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; int m = 3, n = 3; int *mm[3]; for (int i = 0; i < 3; ++i) { mm[i] = arr[i]; } int* p = print(mm, m, n); for(i = 0; i < 3; i++) for(j = 0; j < n; j++) cout << (*(p+i) + j); return 0; } بإمكانك تجربة هذه الطريقة من خلال هذا : الرابط بالتوفيق. 2 اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
0 Hamada Sayed نشر 28 نوفمبر 2020 أرسل تقرير مشاركة نشر 28 نوفمبر 2020 مرحبا تصحيح الاخطاء بتاريخ 23 ساعات قال أسماء عبدالله محمود النظاري: #include <iostream> using namespace std; int i, j; int *print(int **arr, int m, int n) { for (i = 0; i < 3; i++) for (j = 0; j < n; j++) return (int*)((arr+i) + j); } int main() { int arr[][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; int m = 3, n = 3; int (*mm)[3]=arr; // We can also use "print(&arr[0][0], m, n);" int *p= print((int**)mm, m, n); for (i = 0; i < 3; i++) for (j = 0; j < n; j++) cout<< (*(p+i*m) + j); return 0; } التصحيح تم باستخدام GCC 1 اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
السؤال
Asma'a
ممكن توضيج الخطأ في هذا البرنامج
رابط هذا التعليق
شارك على الشبكات الإجتماعية
6 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.