is not a palindrome; however, the following one is.3 5 7 2 4
4 2 6 2 4
Write a program that reads in an array and checks if it is a palindrome.
! --------------------------------------------------------------------
! PROGRAM  Palindrome:
!    This program checks to see if an array is a palindrome.  An array
! is a palindrome if they read the same in both directions.
! --------------------------------------------------------------------
PROGRAM  Palindrome
   IMPLICIT  NONE
   INTEGER, PARAMETER :: LENGTH = 30    ! maximum array size
   INTEGER, DIMENSION(1:LENGTH) :: x    ! the array
   INTEGER            :: Size           ! actual array size (input)
   INTEGER            :: Head           ! pointer moving forward
   INTEGER            :: Tail           ! pointer moving backward
   INTEGER            :: i              ! running index
   READ(*,*) Size, (x(i), i = 1, Size)  ! read in the input array
   WRITE(*,*)  "Input array:"           ! display the input
   WRITE(*,*)  (x(i), i = 1, Size)
   Head = 1                             ! scan from the beginning
   Tail = Size                          ! scan from the end
   DO                                   ! checking array
      IF (Head >= Tail)  EXIT           !   exit if two pointers meet
      IF (x(Head) /= x(Tail))  EXIT     !   exit if two elements not equal
      Head = Head + 1                   !   equal.  Head moves forward
      Tail = Tail - 1                   !   and Tail moves backward
   END DO                               ! until done
   WRITE(*,*)
   IF (Head >= Tail) THEN               ! if Head cross Tail, then we have
      WRITE(*,*) "The input array is a palindrome"     ! a palindrome
   ELSE                                 ! otherwise, it is not a palindrome
      WRITE(*,*) "The input array is NOT a palindrome"
   END IF
END PROGRAM  Palindrome
Click here to download this program.
The out of the program is:7 1 2 3 4 3 2 1
If the input data consist of the following:Input array: 1, 2, 3, 4, 3, 2, 1 The input array is a palindrome
The out of the program is:10 1 3 5 7 9 7 5 3 2 1
Input array: 1, 3, 5, 7, 9, 7, 5, 3, 2, 1 The input array is NOT a palindrome
1  3  5  7  5  3  1
H                 T
   H           T
      H     T
         HT
          You may consider Head moving from left to right and
          Tail moving from right to left.  If the elements at
          Head and Tail are equal, that means the input
          array read from left and read from right are the same
          from 1 up to Head and from n down to Tail.
          To see if it is a palindrome, we should keep going until all elements are checked. However, if the elements at Head and Tail are not equal, then definitely the array is not a palindrome.
But, why do we stop when Head and Tail cross each other? This is because once they cross each other, those pairs compared earlier will be re-compared. The following illustrates the concept:
1  3  5  7  5  3  1
H                 T    Head = 1, Tail = 7
   H           T       Head = 2, Tail = 6
      H     T          Head = 3, Tail = 5
         HT            Head = 4, Tail = 4  all pairs have been compared
      T     H          Head = 5, Tail = 3  we did it earlier!
     The problem is that it contains duplicated work. Figure out it yourself please.DO Head = 1, n Tail = n - Head + 1 IF (x(Head) /= x(Tail)) EXIT END DO IF (Tail <= 0) THEN WRITE(*,*) "No." ELSE WRITE(*,*) "Yes" END IF