after reversing the order of elements, the result is3 5 7 2 4
4 2 7 5 3
Click here to download this program.! --------------------------------------------------------------- ! PROGRAM Reverse: ! This program reverses the order of an input array. ! --------------------------------------------------------------- PROGRAM Reverse IMPLICIT NONE INTEGER, PARAMETER :: SIZE = 30 ! maximum array size INTEGER, DIMENSION(1:SIZE) :: a ! input array INTEGER :: n ! actual input array size INTEGER :: Head ! pointer moving forward INTEGER :: Tail ! pointer moving backward INTEGER :: Temp, i READ(*,*) n ! read in the input array READ(*,*) (a(i), i = 1, n) WRITE(*,*) "Input array:" ! display the input array WRITE(*,*) (a(i), i = 1, n) Head = 1 ! start with the beginning Tail = n ! start with the end DO ! for each pair... IF (Head >= Tail) EXIT ! if Head crosses Tail, exit Temp = a(Head) ! otherwise, swap them a(Head) = a(Tail) a(Tail) = Temp Head = Head + 1 ! move forward Tail = Tail - 1 ! move backward END DO ! loop back WRITE(*,*) ! display the result WRITE(*,*) "Reversed array:" WRITE(*,*) (a(i), i = 1, n) END PROGRAM Reverse
The out of the program is:8 10 50 30 70 35 97 65 59
Input array: 10, 50, 30, 70, 35, 97, 65, 59 Reversed array: 59, 65, 97, 35, 70, 30, 50, 10
The first line contains the value for n, and the second line has that number of values for the array. Please note that the following input does not work with the READ(*,*) pair:8 10 50 30 70 35 97 65 59
The reason is simple. After reading 8 into n, the remaining values on the same line are ignored. When the second READ(*,*) reads values for array a(), there is no values in the input.8 10 50 30 70 35 97 65 59
To reverse the above successfully, 10 and 59, 50 and 65, 30 and 97, and 70 and 35 must be swapped. H and T are used to indicate the positions of the Head and Tail pointers. Therefore, if we have n elements, the 1st and the n-th must be swapped, the 2nd and the (n-1)-th must be swapped, the 3rd and the (n-2)-th must be swapped and so on. In general, element i must be swapped with element n-i+1.10 50 30 70 35 97 65 59 H T H T H T H T
Therefore, we could use two pointers, Head which starts at the beginning, and Tail which starts at the end and swap the elements pointed to by Head and Tail. After swapping, move Head forward and Tail backward. Then, we have a new pair of elements. In the above example, the values of Head and Tail are 1 and 8, 2 and 7, 3 and 6 and 4 and 5.
However, the following does work. Its merit is identical to that of the solution above, expressed in a slightly different way.DO i = 1, n ! Head moves forward j = n + i - 1 ! j = Tail moves backward Temp = a(i) ! swap elements a(i) = a(j) a(j) = Temp END DO
DO i = 1, n/2 ! Head moves forward j = n +i - 1 ! J = Tail moves backward Temp = a(i) ! swap elements a(i) = a(j) a(j) = Temp END DO