کد فوق مشکل کوچکی دارد یعنی برای رشته های با طول فرد کار نمی کند، فرض کنید رشته ما AbA باشد در اولین بار تکرار حلقه شرط A<>b چک می شود چون طول رشته برابر 3 است و کاراکتر اول برابر A و کاراکتر یکی ماند به آخر یعنی طول رشته منهای یک برابر 2 یعنی کاراکتر b است و تابع عدم پالیندروم بودن را نمایش می دهد، دقت کنید که در پاسکال رشته از 1 شروع می شود.
---------------------------
برای به دست آوردن وسطش اینجوری باید عمل کنم ؟
شما باید ابتدا قسمت اول عبارت پالیندروم را بدست آورید برای عبارات زوج از تابع زیر استفاده کنید
Count:=Lenght(PalindramString)/2
و برای رشته های با طول فرد از تابع زیر استفاده کنید
Count:=Ceil(Length(palindramString)/2)
تابع Ceil یا Ceiling باید وجود داشته باشه لطفا خودتان جستجو کنید
من که نتونستم اجرا کنم همین طور substr
از تابع Copy استفاده کنید (خیلی وقت هست با پاسکال کار نکردم شاید این تابع در پاسکال 7 وجود نداشته باشه همینطور Reverse ولی Copy صد در صد وجود داره)
حال دو قسمت پالیندروم را بدست آورید
HalfPalindram:=Copy(PalindramString,1,Count)
HalfPalindram2:=Copy(PalindramString,Count+1,Count )
راستی تابعی به اسم REVERSE تو توربو پاسکال 7 داریم ؟
همانطور که گفتم یادم نیست وجود دارد یا نه اما می توانید آنرا به صورت زیر شبیه سازی کنید
st:='Your String';
Location := POS(Space, St);
Len := Length(St);
Last := COPY(St, 1, Location - 1);
First := COPY(St, Location + 1, Len - Location);
St := First + Space + Last
موفق باشید