المقدمة
تدوير مصفوفة ثنائية الأبعاد، أو مصفوفة، هو مشكلة شائعة في البرمجة يمكن أن تنشأ في تطبيقات مختلفة، خاصة في الرسوميات الحاسوبية ومعالجة البيانات. في هذه التدوينة، سوف نتعمق في عملية تدوير مصفوفة 4x4 بزاوية 90 درجة في اتجاه عقارب الساعة.
فهم المشكلة
تخيل أن لديك مصفوفة ثنائية الأبعاد منسقة على النحو التالي:
[1][2][3][4]
[5][6][7][8]
[9][0][1][2]
[3][4][5][6]
بعد تدوير هذه المصفوفة بزاوية 90 درجة في اتجاه عقارب الساعة، يجب أن تتحول إلى:
[3][9][5][1]
[4][0][6][2]
[5][1][7][3]
[6][2][8][4]
بمصطلحات عملية، كل عنصر في المصفوفة الأصلية ينتقل إلى وظيفة جديدة بناءً على زاوية التدوير. ولكن كيف يمكننا تنفيذ ذلك في لغة برمجة مثل C#؟ دعونا نفصل ذلك خطوة بخطوة.
الحل
الخطوة 1: تهيئة المصفوفة
أولاً، نحتاج إلى تهيئة المصفوفة في برنامجنا. إليك كيفية القيام بذلك:
int[,] array = new int[4,4] {
{ 1,2,3,4 },
{ 5,6,7,8 },
{ 9,0,1,2 },
{ 3,4,5,6 }
};
الخطوة 2: إنشاء دالة لتدوير المصفوفة
بعد ذلك، سنقوم بإنشاء دالة تسمى RotateMatrix
التي تقوم بالتدوير المطلوب. ستأخذ هذه الدالة المصفوفة الأصلية وحجمها كمعلمات وتعيد المصفوفة المدورة.
إليك تنفيذ دالة RotateMatrix
:
static int[,] RotateMatrix(int[,] matrix, int n) {
int[,] ret = new int[n, n];
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
ret[i, j] = matrix[n - j - 1, i];
}
}
return ret;
}
الخطوة 3: شرح الدالة
- إعلان المصفوفة: نقوم بإعلان مصفوفة جديدة
ret
بنفس حجم المدخل. - الحلقات المتداخلة: نستخدم حلقة متداخلة للتنقل عبر كل عنصر في المصفوفة.
- منطق التدوير: بالنسبة لكل عنصر في الموضع
(i, j)
، نقوم بربطه بالموضع الجديد(j, n - i - 1)
. هذه المعادلة تساعد في تدوير العناصر بشكل صحيح بزاوية 90 درجة في اتجاه عقارب الساعة.
الخطوة 4: اختبار الدالة
يمكنك اختبار الدالة عن طريق استدعائها وطباعتها المصفوفة المدورة:
int[,] rotated = RotateMatrix(array, 4);
فقط تأكد من تنفيذ طريقة لطباعة المصفوفة للتحقق.
الخاتمة
تدوير مصفوفة ثنائية الأبعاد هو مهمة بسيطة بمجرد أن تفهم ربط الفهارس. بينما يعمل النهج الحالي بتعقيد زمني O(n^2)، فإن تحسين الخوارزميات لمصفوفات أكبر (مثل 10000x10000) هو موضوع نقاش مستمر في الخوارزميات وهياكل البيانات.
الآن يمكنك تدوير أي مصفوفة ثنائية الأبعاد بثقة في C#. برمجة سعيدة!