كيفية عكس صفيف بشكل متكرر في لغة C

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

< / div >< div class = "فاصل" النمط = "واضح: كلاهما ؛ محاذاة النص: الوسط؛" >عكس عناصر صفيف في C ++< / a>< / div>
يشرح هذا الشكل في ثلاث خطوات عملية التقليب بين نمط i ونمط n-i,  تتكرر العملية حتى يتم الوصول إلى نصف طول اللوحة. يتعين علينا تكرار العملية فقط في النصف الأول من المصفوفة وإلا فسنقوم بتبديل عناصر النصف الثاني بعناصر النصف الأول التي تمت معالجتها بالفعل ، وهناك نعود إلى مصفوفة البداية الخاصة بنا.

تقوم التعليمات البرمجية التالية بتبديل صفيف بالطريقة التكرارية:

< pre class = "prettyprint lang-c">#include< كونيو.ه> < فرع />#include< stdio.h>

int main()
{
int i,n,temp;

printf ("حجم الصفيف") ؛
scanf("٪d",& n);
int t[n];

for(i=0; أنا< n; i++)
{
printf("t[٪d]=",i);
scanf("٪d",& t[i]);
}
i = 0 ؛
بينما (i< n/2)
{
temp = t[i];
//n-1 لأن الصفيف يبدأ ب 0
t[i]=t[n-1-i];
t [n-1-i] = temp;
i++;
}

printf("\nالجدول العكسي: \n");
for(i=0; أنا< n; i++)
{
printf("\nt[٪d]=٪d",i,t[i]);
}
getch ();
}
تنفيذ هذا الرمز يعطي:

< / a>< / div>

عكس صفيف في C باستخدام الطريقة العودية< / h2>
الآن بعد أن أصبح لدينا برنامجنا للطريقة التكرارية ، سنقوم بإنشاء نسخة رسمية. سوف تسأل السؤال ، ما الذي يختلف عنه؟ حسنا! النسخة العودية هي وظيفة تستدعي نفسها حتى تصل إلى نقطة الارتكاز. هذه المكالمة العودية هي ما يعادل الحلقة في الإصدار التكراري.

ما عليك سوى ترجمة البرنامج التكراري للحصول على برنامج متكرر. نقطة الارتكاز هي حالة التوقف في نمط الحلقة < span = "عائلة الخط:" ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >أنا< n / 2< / span> (في البرنامج نضع i>=(n+1)/2 لأنه عندما تم استدعاء الوظيفة، تم تقليل حجم الصفيف n-1). < span style = "عائلة الخط:" ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >i تصبح المعلمة الرئيسية للدالة لأن اختبار الإيقاف يتم بعد كل زيادة i.

يوضح المثال التالي كيفية عكس عناصر صفيف بشكل متكرر في C.