البرمجة

تحسين برنامج جمع المصفوفات في لغة C

عنوان المقال: كيفية استخدام مصفوفة ثنائية الأبعاد في بيان تعريف الدالة؟

المقال:

تعتبر استخدام مصفوفة ثنائية الأبعاد في بيان تعريف الدالة أمرًا ضروريًا في برمجة بعض البرامج مثل جمع المصفوفات. عادةً، يتم تعريف الدالة باستخدام مصفوفة واحدة الأبعاد (مثل int []) بسهولة، ولكن عند التعامل مع مصفوفة ثنائية الأبعاد (مثل int [][])، يمكن أن يحدث بعض الأخطاء المزعجة.

الخطأ الأول الذي قد يظهر هو “multidimensional array must have bounds for all dimensions except the first”، وهذا يعني أنه يجب تحديد حدود لكل الأبعاد باستثناء الأولى. في بيان تعريف الدالة، يمكنك تحديد عدد الأعمدة بجانب الأسطر، على سبيل المثال:

c
void mat(int [][10], int [][10], int, int);

والخطأ الثاني “invalid conversion from ‘int (*)[10]’ to ‘int’ [-fpermissive]” يظهر عند محاولة تحويل مصفوفة ثنائية الأبعاد إلى نوع بيانات غير صحيح. لتجنب هذا، يجب أن يكون تعريف الدالة متناسبًا مع نوع المصفوفة، ويمكن تعديل بيان تعريف الدالة على النحو التالي:

c
void mat(int a[][10], int b[][10], int m, int n);

وفيما يلي إصدار معدل من برنامج جمع المصفوفات يستخدم تلك الإصلاحات:

c
#include void mat(int [][10], int [][10], int, int); int main() { int a[10][10], b[10][10], m, n, i, j; printf("Enter the rows and columns: "); scanf("%d %d", &m, &n); printf("\nEnter the elements of 1st Matrix:"); for(i = 0; i < m; i++) for(j = 0; j < n; j++) scanf("%d", &a[i][j]); printf("\nEnter the elements of the 2nd Matrix:"); for(i = 0; i < m; i++) for(j = 0; j < n; j++) scanf("%d", &b[i][j]); mat(a, b, m, n); } void mat(int a[][10], int b[][10], int m, int n) { int i, j, c[10][10]; for(i = 0; i < m; i++) for(j = 0; j < n; j++) c[i][j] = a[i][j] + b[i][j]; printf("\nThe addition of the 2 Matrix is :"); for(i = 0; i < m; i++) { printf("\n"); for(j = 0; j < n; j++) printf("%d ", c[i][j]); } }

باستخدام هذا النهج، يمكنك تجنب الأخطاء المزعجة وضمان تشغيل برنامج جمع المصفوفات بنجاح.

المزيد من المعلومات

بصورة عامة، يعد استخدام مصفوفات ثنائية الأبعاد في برمجة لغة C أمرًا مهمًا للعديد من التطبيقات، خاصة عند التعامل مع بيانات متعددة الأبعاد مثل الصور والمصفوفات الرياضية. في مثال البرنامج الذي قدمته، نركز على جمع مصفوفتين ثنائيتي الأبعاد.

تحسين البرنامج يتضمن أيضًا النظر في بعض النقاط الإضافية:

1. تحسينات في بيانات الإدخال:

  • يمكنك إضافة رسائل أكثر واضحًا للمستخدم لتوجيهه خلال إدخال البيانات، مما يساعد في تجنب أخطاء إدخال غير متوقعة.

2. تحسينات في تنسيق الطباعة:

  • قم بإضافة مسافة بين الأرقام المطبوعة لجعل الإخراج أكثر وضوحًا.

3. التحقق من توافق حجم المصفوفات:

  • يمكنك إضافة شيفرة تحقق تلقائيًا من توافق حجم المصفوفات قبل إجراء العملية الرئيسية.

4. استخدام ثوابت لحجم المصفوفة:

  • يمكنك استخدام ثوابت لحجم المصفوفة بدلاً من الأرقام الثابتة في الشيفرة لجعل البرنامج أكثر قابلية للصيانة وفهمًا.

فيما يلي نسخة معدلة من البرنامج تأخذ في اعتبارها بعض هذه التحسينات:

c
#include #define MAX_ROWS 10 #define MAX_COLS 10 void mat(int [][MAX_COLS], int [][MAX_COLS], int, int); int main() { int a[MAX_ROWS][MAX_COLS], b[MAX_ROWS][MAX_COLS], m, n, i, j; printf("Enter the rows and columns: "); scanf("%d %d", &m, &n); if (m <= 0 || n <= 0 || m > MAX_ROWS || n > MAX_COLS) { printf("Invalid input for rows or columns. Exiting program.\n"); return 1; } printf("\nEnter the elements of the 1st Matrix:\n"); for (i = 0; i < m; i++) for (j = 0; j < n; j++) scanf("%d", &a[i][j]); printf("\nEnter the elements of the 2nd Matrix:\n"); for (i = 0; i < m; i++) for (j = 0; j < n; j++) scanf("%d", &b[i][j]); mat(a, b, m, n); return 0; } void mat(int a[][MAX_COLS], int b[][MAX_COLS], int m, int n) { int i, j, c[MAX_ROWS][MAX_COLS]; for (i = 0; i < m; i++) for (j = 0; j < n; j++) c[i][j] = a[i][j] + b[i][j]; printf("\nThe addition of the 2 Matrix is:\n"); for (i = 0; i < m; i++) { for (j = 0; j < n; j++) printf("%d ", c[i][j]); printf("\n"); } }

هذه التحسينات تجعل البرنامج أكثر قوة ووضوحًا، وتساهم في جعل تجربة المستخدم أفضل وأكثر دقة.

مقالات ذات صلة

زر الذهاب إلى الأعلى

هذا المحتوى محمي من النسخ لمشاركته يرجى استعمال أزرار المشاركة السريعة أو تسخ الرابط !!