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

التعامل مع المؤشرات و المصفوفات و الإجرائيات في لغة البرمجة ++c

Asma'a

السؤال

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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...