منتدى مصر التقني
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.

حل نشاط ++C...إنشاء مصفوفة ذات بعدين و التاكد من تساوي مجموعة صفوف و اعمدة المصفوفة

اذهب الى الأسفل

حل نشاط ++C...إنشاء مصفوفة ذات بعدين و التاكد من تساوي مجموعة صفوف و اعمدة المصفوفة Empty حل نشاط ++C...إنشاء مصفوفة ذات بعدين و التاكد من تساوي مجموعة صفوف و اعمدة المصفوفة

مُساهمة من طرف أحمد مناع الخميس فبراير 25, 2021 2:52 pm

اهلا بكم الاخوة الكرام

بعض الاخوة ارسل لى هذا النشاط ....وسنقوم بحله سويا 

[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]

عند قراءة النشاط سنجد المطلوب كما يلى :

1_إنشاء وظيفية لقراءة مصفوفة رقمية ذات حدين او بعدين ...بحيث عدد الاعمدة 5 و عدد الصفوف مختلفة 
2_إنشاء وظيفة للتاكد من أن المصفوفة عبارة عن [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] بمعنى ان جميع الصفوف بها اجمالى قيمتها متساوية 
3_إنشاء وظيفة للتاكد من أن المصفوفة عبارة عن [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] بمعنى ان جميع الاعمدة بها اجمالى قيمتها متساوية 
4_انشاء وظيفة لفرز عناصر المصفوفة


اولا : انشاء وظيفة لقراءة عناصر مصفوفة ذات حدين 


1_اذن اول شىء سنقوم بالاعلان عن عدد الاعمدة و التى حددها السؤال ب 5 اعمدة وذلك على النحو التالى :
الكود:
#define col 5

2_سنقوم بانشاء وظيفة تاخدذ مصفوفة ذات حدين كمعملة (بارمامتير) ورقم يمثل عدد الصفوف وذلك على النحو التالى :
الكود:
void read_arry(int[][col],int); // وظيفة لقراءة المصفوفة

3_سوف نقوم بكتابة جسم الوظيفة على النحو التالى :

الكود:
void read_arry(int arr[][col] ,int row ){
 
   cout<<"Please Enter elements in array:"<<endl;
   for(int i=0;i<row;i++)
 {
 cout<<"row number:"<<i+1<<endl;  
 for(int j=0;j<col;j++)
 {
 cin>>arr[i][j];
 }
 }

شرح الكود اعلاه :

السطر رقم 4 : اظهار رسالة للمستخدم تطالبه بادخال عناصر المصفوفة 
السطر رقم 5 : حلقة تبدء من الصفر حتى عدد الصفوف row بالصفوفة للدوران على كافة صفوف المصفوفة
السطر رقم 6 :اظهار رسالة للمسخدم برقم الصف الذي سيبدء ادخال بياناته به
السطر رقم 7 : حلقة دوران داخلية تبدء من الصفر حتى عدد الاعمدة col بالمصفوفة 
السطر رقم 9 : استخدام امر الادخال cin لاستقبال بيانات كل صف من صفوفة المصفوفة من خلال المستخدم

ثانيا :إنشاء وظيفة للتاكد من أن المصفوفة عبارة عن row_magic


بمعنى ذلك سنقوم بجمع كل صف من صفوف المصفوفة ثم بعد ذلك مقارنة ناتج مجموع كل صف ...فإن كانت كل الصفوف متساوية فى الجمع اذن تلك المصفوفة عبارة عن [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] ويتم ذلك من خلال الدوران على كل صف من صفوف المصفوفة ثم جمع القيم التى به وبعد ذلك يتم تخزين تلك القيم فى مصفوفة مؤقتة ومن ثم مقارنة قيم تلك المصفوفة المؤقتة فإن تساوة القيم اذا يتم ارجاع صحيح وان لم تتساوي يتم ارجاع خطا false .....على النحو التالى :

1_ الاعلان عن وظيفة من نوع [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] تاخذ مصفوفة كمعلمة لها و رقم يمثل عدد الصفوف [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] وذلك على النحو التالى :
الكود:
bool check_row_magic(int[][col],int);

2_نقوم بكتاية جسم الطريقة على النحو التالى :
الكود:
bool check_row_magic(int arr[][col] ,int row ){
      
       int sum = 0;      // متغير لتخزين مجموع كل صف
       int tem[row];     // انشاء مصفوفة مؤقتة لتخزين ناتج الجمع
       int value = 0;    // متغير لتخزين القيمة للعنصر الاول فى المصفوفة المؤقتة
      
   for(int i=0; i<row; i++)  // حلقة دوران للمرور على كافة صفوف المصفوفة
    {
        sum = 0;
        for(int j=0; j<col; j++)  // حلقة دوران داخلية للمرور على اعمدة المصفوفة
        {
            sum = sum + arr[i][j];  // معادلة رياضية لجمع كل صف وتحزينة فى المتغير sum
        }
        
        // إظهار رسالة للمستخدم بقيمة كل صف
        cout<<"Sum of elements of Row: "<< i+1<<" is "<< sum<<endl;
        
        tem[i]=sum;        // تخزين اجمالى كل صف فى المصفوفة المؤقتة
        value=tem[0];      // استخراج اول قيمة فى المصفوفة المؤقتة و تخزينها فى المتغير value
        if(tem[i]!= value)  // مقارنة كل عنصر فى المصفوفة المؤقتة بقيمة value
        
       return false;        // اذا لم تتساوي القيم يتم ارجاع خطا
      
     }
    
      
     return true;          // غير ذلك ارجاع صحيح
   }

ثالثا :إنشاء وظيفة للتاكد من أن المصفوفة عبارة عن column_magic


بمعنى ذلك سنقوم بجمع كل عامود من اعمدة المصفوفة ثم بعد ذلك مقارنة ناتج مجموع كل عامود ...فإن كانت كل الاعمدة متساوية فى الجمع اذن تلك المصفوفة عبارة عن  [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] ويتم ذلك من خلال الدوران على كل عامود من اعمدة المصفوفة ثم جمع القيم التى به وبعد ذلك يتم تخزين تلك القيم فى مصفوفة مؤقتة ومن ثم مقارنة قيم تلك المصفوفة المؤقتة فإن تساوة القيم اذا يتم ارجاع صحيح وان لم تتساوي يتم ارجاع خطا false .....على النحو التالى :

1_ الاعلان عن وظيفة من نوع bool تاخذ مصفوفة كمعلمة لها و رقم يمثل عدد الصفوف row وذلك على النحو التالى :
الكود:
bool check_col_magic(int[][col],int);

2_نقوم بكتاية جسم الطريقة على النحو التالى :
الكود:
bool check_col_magic(int arr[][col] ,int row ){
      
       int sum = 0;
       int tem[row];
       int value = 0;
      
   for(int i=0; i<row; i++)
    {
        sum = 0;
        for(int j=0; j<col; j++)
        {
            sum = sum + arr[j][i]; // هنا يظهر الاختلاف عن الكود فى الطريقة التى تجمع كل صف
        }
    
        cout<<"Sum of elements of Column: "<< i+1<<" is "<< sum<<endl;
        tem[i]=sum;
        value=tem[0];
        if(tem[i]!= value)
        
       return false;
    }
     return true;  
   }

رابعا :انشاء وظيفة لفرز عناصر المصفوفة


توجد عدة طرق لفرز المصفوفات ومنها استخدام الوظيفة sort التى توفرها المكتبة algorithm تلك الوظيفة سهلة الاستخدام للغاية فقط بتمرير معلمتين لها  ، الأولى هي المصفوفة المراد فرزها والمعلمة الثانية هي الطول الذي نريد أن يتم فرز المصفوفة
الكود:
sort(arr, arr + n);

لذلك فان الوظيفة المطلوبة ستكون على النحو التالى :

الكود:
void sort_arry(int m[][col],int row) {
  
       for (int i = 0; i < row; i++)  // الدوران على صفوفة المصوفة
        sort(m[i], m[i] + col);        // استخدام الوظيفة لترتيب كل صف على حده
 
         cout<<"elements in array after sort:"<<endl;
        
         // طباعة عناصر المصفوفة بعد الفرز
          for (int i = 0; i < row; i++)
             {
               for (int j = 0; j < col; j++)
                    cout << (m[i][j]) << " ";
                    cout << endl;
              }
       }



و اخير سيكون كود الكامل للمثال او النشاط اعلاة على النحو التالى :

الكود:
 
#include <iostream>
#include <algorithm>

using namespace std;

// Get the size colume

#define col 5

  void read_arry(int[][col],int); // وظيفة لقراءة المصفوفة
  void sort_arry(int[][col],int); // وظيفة لترتيب المصفوفة
  
  bool check_row_magic(int[][col],int); // وظيفة للتاكد من أن اجمالي كل صف متساوي
  bool check_col_magic(int[][col],int);  // وظيفة للتاكد من ان اجمالى كل عامود متساوي

 int main()
  {
    
    // انشاء ثلاث مصوفات
    int A[4][5];
    int B[6][5];
    int C[5][5];
    
    read_arry(A,4);

    return 0;
  }


   void read_arry(int arr[][col] ,int row ){
 
   cout<<"Please Enter elements in array:"<<endl;
   for(int i=0;i<row;i++)
 {
 cout<<"row number:"<<i+1<<endl;  
 for(int j=0;j<col;j++)
 {
 cin>>arr[i][j];
 }
 }
 
 cout<<"elements in array befor sort:"<<endl;
 
 for (int i = 0; i < row; i++)
      {
          for (int j = 0; j < col; j++)
                {
                  cout << arr[i][j] << " ";
                 }
    
          // Newline for new row
         cout << endl;
      }

      sort_arry(arr,row);
    
    if(check_row_magic(arr,row))
      cout<<"array is row_magic"<<endl;
     else
      cout<<"array is not row_magic"<<endl;
      
      if(check_col_magic(arr,row))
      cout<<"array is Column_magic"<<endl;
     else
      cout<<"array is not Column_magic"<<endl;
      
      
   }
  
   bool check_row_magic(int arr[][col] ,int row ){
      
       int sum = 0;      // متغير لتخزين مجموع كل صف
       int tem[row];     // انشاء مصفوفة مؤقتة لتخزين ناتج الجمع
       int value = 0;    // متغير لتخزين القيمة للعنصر الاول فى المصفوفة المؤقتة
      
   for(int i=0; i<row; i++)  // حلقة دوران للمرور على كافة صفوف المصفوفة
    {
        sum = 0;
        for(int j=0; j<col; j++)  // حلقة دوران داخلية للمرور على اعمدة المصفوفة
        {
            sum = sum + arr[i][j];  // معادلة رياضية لجمع كل صف وتحزينة فى المتغير sum
        }
        
        // إظهار رسالة للمستخدم بقيمة كل صف
        cout<<"Sum of elements of Row: "<< i+1<<" is "<< sum<<endl;
        
        tem[i]=sum;        // تخزين اجمالى كل صف فى المصفوفة المؤقتة
        value=tem[0];      // استخراج اول قيمة فى المصفوفة المؤقتة و تخزينها فى المتغير value
        if(tem[i]!= value)  // مقارنة كل عنصر فى المصفوفة المؤقتة بقيمة value
        
       return false;        // اذا لم تتساوي القيم يتم ارجاع خطا
      
     }
    
      
     return true;          // غير ذلك ارجاع صحيح
   }
  
   bool check_col_magic(int arr[][col] ,int row ){
      
       int sum = 0;
       int tem[row];
       int value = 0;
      
   for(int i=0; i<row; i++)
    {
        sum = 0;
        for(int j=0; j<col; j++)
        {
            sum = sum + arr[j][i];
        }
    
        cout<<"Sum of elements of Column: "<< i+1<<" is "<< sum<<endl;
        tem[i]=sum;
        value=tem[0];
        if(tem[i]!= value)
        
       return false;
    }
     return true;  
   }
  
   void sort_arry(int m[][col],int row) {
  
       for (int i = 0; i < row; i++)  // الدوران على صفوفة المصوفة
        sort(m[i], m[i] + col);        // استخدام الوظيفة لترتيب كل صف على حده
 
         cout<<"elements in array after sort:"<<endl;
        
         // طباعة عناصر المصفوفة بعد الفرز
          for (int i = 0; i < row; i++)
             {
               for (int j = 0; j < col; j++)
                    cout << (m[i][j]) << " ";
                    cout << endl;
              }
       }
    
    

لتشغيل الكود و الاخراج على الرابط التالى :

[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
أحمد مناع
أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 1077
النقاط : 201961
التقيم : 130
الدولة : مصر
الجنس : ذكر

https://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة

ََ

مواضيع ذات صلة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى