اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر
بتاريخ 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;

 

  • 0
نشر
بتاريخ 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;

ما هو المطلوب من السؤال بالضبط؟

 

  • 0
نشر

مرحباً بك،
الخطأ الذي يظهر هو كالتالي:

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;
}

بإمكانك تجربة هذه الطريقة من خلال هذا : الرابط

بالتوفيق.

  • 0
نشر

مرحبا

تصحيح الاخطاء

 

بتاريخ 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

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...