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

التعامل مع المصفوفة الثنائية بلغة C++

Rola Rola

السؤال

مرحبا هل من احد يستطيع مساعدتي في حل كود لهذا البرنامج لانني اواجه مشكلة في حل هذا السؤال؟

كتابة فئة C ++ واسمها مصفوفة. كما أن لديها متغيرين عضويين يسمى RAW_SIZE (من النوع int) و col_type (من النوع الدولي). بالإضافة إلى ذلك، يحتوي على أربع طرق تسمى: إضافة، طرح، مضاعفة، وتغييرها. يجب أن تحتوي فئة المصفوفة أيضا على مدمر واحد واثنين من منشئين: المنشئ الافتراضي الذي يقوم بإنشاء مصفوفة افتراضية من RAW_SIZE 3 و COL_SIZE 3 و COL_SIZE 3 وآخر منشئ يقبل حجما: RAW_SIZE و  RAW_SIZE .اختبار المقاولين والطرق التي كتبت أعلاه.ويمكن إضافة فقط مصفوفات من نفس الأحجام أو طرحها. يجب ان تطبق قواعد الضرب المصفوفة قبل القيام الضرب و هذا الخط: يجب على (3،Matrix Mat (3، إنشاء مجموعة 2D من حجم 3x3 من النوع المزدوج. 

 

تم التعديل في بواسطة عبود سمير
تنسيق العنوان
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

مرحباً ...
يُمكنك عمل البرنامج بهذا الشكل و موجود أيضا الشرح في التعليقات: 

#include <iostream>
using namespace std;

// تعريف الصنف مصفوفة
class Matrix {
    // تعريف المتغيرات الأعضاء
public:
    int row_size, col_size;

public:
    int **array2d;

    // constructor 1
public:
    Matrix() {
        cout << "Constructor 1 is called" << endl;
        this->row_size = 3;
        this->col_size = 3;
        this->array2d = new int *[this->row_size];
        for (int i = 0; i < this->row_size; i++) {
            this->array2d[i] = new int[this->col_size];
        }
    }

    // constructor 2
public:
    Matrix(int row_size, int col_size) {
        cout << "Constructor 2 is called" << endl;
        this->row_size = row_size;
        this->col_size = col_size;
        this->array2d = new int *[this->row_size];
        for (int i = 0; i < this->row_size; i++) {
            this->array2d[i] = new int[this->col_size];
        }
    }

    // destructor
public:
    ~Matrix() {
        cout << "\nDestructor is called" << endl;
        for (int i = 0; i < this->row_size; ++i)
            delete[] this->array2d[i];

        delete[] this->array2d;
    }

    // دالة مساعدة لقراءة عناصر المصفوفة من المستخدم
    void read_els() {
        for (int i = 0; i < this->row_size; ++i) {
            for (int j = 0; j < this->col_size; ++j) {
                cout << "Enter El: [" << i << "][" << j << "]: " << endl;
                cin >> this->array2d[i][j];
            }
        }
    }

    // دالة مساعدة لطباعة عناصر المصفوفة
    void print_els() {
        for (int i = 0; i < this->row_size; ++i) {
            for (int j = 0; j < this->col_size; ++j) {
                printf("%d ", this->array2d[i][j]);
            }

            printf("\n");
        }

    };

    // دالة لجمع مصفوفتين و ترجع الناتج في مصفوفة
    Matrix add(Matrix *mat) {

        Matrix m(this->row_size, this->col_size);
        for (int i = 0; i < m.row_size; ++i) {
            for (int j = 0; j < m.col_size; ++j) {
                m.array2d[i][j] = this->array2d[i][j] + mat->array2d[i][j];
            }
        }
        return m;
    }

    // دالة لطرح مصفوفتين و ترجع الناتج في مصفوفة
    Matrix sub(Matrix *mat) {

        Matrix m(this->row_size, this->col_size);
        for (int i = 0; i < m.row_size; ++i) {
            for (int j = 0; j < m.col_size; ++j) {
                m.array2d[i][j] = this->array2d[i][j] - mat->array2d[i][j];
            }
        }
        return m;
    }

    // دالة لضرب مصفوفتين و ترجع الناتج في مصفوفة
    Matrix mul(Matrix *mat) {

        Matrix m(this->row_size, mat->col_size);
        int tmp = 0;
        for(int i = 0; i < m.row_size; ++i) {
            for (int j = 0; j < m.col_size; ++j) {
                tmp = 0;
                for (int k = 0; k < this->col_size; ++k) {
                    tmp += this->array2d[i][k] * mat->array2d[k][j];
                }
                m.array2d[i][j] = tmp;
            }
        }
        return m;
    }

    // دالة لضرب مصفوفة في مُعامل سنستعملها في المضاعفة أو التكعيب أو اي كان و ترجع الناتج في مصفوفة
    Matrix mul_k(int k) {

        Matrix m(this->row_size, this->col_size);
        for (int i = 0; i < m.row_size; ++i) {
            for (int j = 0; j < m.col_size; ++j) {
                m.array2d[i][j] = k * this->array2d[i][j];
            }
        }
        return m;
    }

};

int main() {
    // تعريف مؤشرين لمصفوفتين
    Matrix *m1 = new Matrix(2, 2);
    Matrix *m2 = new Matrix(2, 2);

    cout << "Enter m1 elements: " << endl;
    m1->read_els(); // قراءة عناصر المصفوفة الأولى
    cout << "Enter m2 elements: " << endl;
    m2->read_els(); // قراءة عناصر المصفوفة الثانية




    if (m1->row_size != m2->row_size || m1->col_size != m2->col_size) { // في حالة عدم تساوي حجم المصفوفتين لا يُمكننا عمل عمليتي الجمع و الطرح
        cout << "can not make addition or subtraction";
    } else {
        cout << "m1 + m2 = " << endl;
        m1->add(m2).print_els(); // القيام بعملية الجمع ثم عرض الناتج
        cout << "m1 - m2 = " << endl;
        m1->sub(m2).print_els(); // القيام بعملية الطرح ثم عرض الناتج
    }

    if (m1->col_size != m2->row_size) { // عرض رسالة في حالة عدم إمكانية عمل عملية الضرب
        cout << "Error! column of first matrix not equal to row of second.";
    } else {
        cout << "m1 X m2 = " << endl;
        m1->mul(m2).print_els(); // القيام بعملية الضرب ثم عرض الناتج
    }

    cout << "2 X m1 = " << endl;
    m1->mul_k(2).print_els(); // القيام بعملية المضاعفة ثم عرض الناتج

    delete m1; // إستدعاء المدمر لتنظيف الذاكرة و مسح الحيز المحجوز من طرف المؤشر الأول
    delete m2; // إستدعاء المدمر لتنظيف الذاكرة و مسح الحيز المحجوز من طرف المؤشر الثاني

}

يُمكنك أيضا تجربة البرنامج من خلال هذا الرابط أيضا أنصحك بمتابعة سلسلة تعلم سي بلس بلس للمحترفين على أكاديمية حسوب فهي مفيدة و مُستمرة خاصة هذا الدرس عن المؤشرات الدرس 19: المؤشرات (Pointers) في Cpp 
بالتوفيق

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...