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

السؤال

نشر (معدل)

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

كتابة فئة 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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...