در این قسمت تیم کدگیت را با توضیح واروخوانه در سی شارپ (palindrome) همراهی کنید. پیش نیاز این آموزش آشنایی با حلقه و روش بازگشتی است.
واروخوانه (palindrome)
قلب مستوی یا جناس قلب، همچنین شناخته شده با نام واروخوانه که معادل فارسی ایست برای پالیندروم (Palindrome) به واژه، جمله، عدد یا هر چیز دیگری گفته میشود که خواندن آن از چپ به راست یا از راست به چپ کاملاً یکسان باشد. بهعنوان مثال عدد ۱۵۳۴۳۵۱ یک عدد واروخوانه است، یا واژه «Malayalam» که نام یکی از زبانهای محلی جنوب غربی هندوستان است ویا واژه “داد” از این قاعده پیروی میکنند(ویکیپدیا).

پیاده سازی واروخوانه در سی شارپ
پیاده سازی واروخوانه در سی شارپ به دو صورت انجام میگیرد.
- پیاده سازی با روش بازگشتی
- پیاده سازی غیر بازگشتی
در این جا ما هر دو روش را توضیح میدهیم.
برای پیاده سازی واروخوانه ما از یک رشته استفاده میکنیم به عنوان متنی برای بررسی واروخوانه بودن یا نبودن. سپس الگوریتم را بر روی رشته اجرا میکنیم. کد زیر الگوریتم غیر بازگشتی واروخوانه است.
public static bool loopPalindrome(String s) {
int low = 0;
int high = s.Length - 1;
bool isPalindrome = true;
while (low < high) {
if (s[low] != s[high]) {
isPalindrome = false;
break;
}
low++;
high--;
}
return isPalindrome;
}
ایده کلی کد بالا به این صورت است که ما رشته دریافتی را به صورت آرایه از کاراکتر در می آوریم. سپس دو متغیر به خانه اول و آخر آرایه اشاره میکند(low و high).حال تنها کاری که نیاز داریم این است که بررسی کنیم آرایه ما در خانه low و hight مقادیر برابری دارند یا خیر. بعد یک قدم به جلوتر میرویم و خانه های بعدی آرایه را بررسی میکنیم. تصویر زیر گویای کل مسئله است.

کد پیاده سازی بازگشتی واروخونه در سی شارپ در زیر آمده است.
public static bool recursive_palindrome(String s) {
if (s.Length <= 1)
return true;
else if (s [0] != s [s.Length - 1]) {
Console.WriteLine (s [0]);
return false;
}else
return recursive_palindrome(s.Substring(1, s.Length - 2));
}
از لحاظ مقدار کد این روش خیلی کوتاهتر است و ساده تر. در روش بازگشتی ما هر بار خانه اول و آخر را بررسی میکنیم و اگر با هم برابر بودند باید بقیه رشته نیز همین شرط (برابری کاراکتر اول و آخر) برقرار باشد و ما این کار را به صورت بازگشتی انجام میدهیم تا موقعی که طول رشته کوچکتر یا برابر با 1 شود.
تست برنامه
برای تست کدهای بالا کد main زیر را بزنید.
public static void Main (string[] args)
{
String palindrome = "12321";
String not_palindrome = "1211";
if (recursive_palindrome(palindrome)) {
Console.WriteLine("palindrome");
} else {
Console.WriteLine("not palindrome");
}
if (loopPalindrome(not_palindrome)) {
Console.WriteLine("palindrome");
} else {
Console.WriteLine("not palindrome");
}
Console.ReadKey ();
}