F90: Ordenação um vetor de N números inteiros

From AdonaiMedrado.Pro.Br
Jump to: navigation, search
PROGRAM aula
	IMPLICIT NONE
	INTEGER :: i, quantidade
	INTEGER, DIMENSION(:),ALLOCATABLE :: a
	WRITE (*,*) "Quantos números deseja digitar?"
	READ (*,*) quantidade;	
	IF (quantidade > 999) THEN
		WRITE (*,*) "Quantidade muito grande, digite um número até 999"
	ELSE
		ALLOCATE(a(1:quantidade))
		WRITE (*,"(A,I3,A)") "Digite",quantidade," números"
		READ (*,*) (a(i),i=1,quantidade)
		WRITE (*,*) "Seus,",quantidade,"números foram:"
		CALL Ordenar(a,1,quantidade)
		WRITE (*,"(I4.3)") (a(i),i=1,quantidade)
		DEALLOCATE(a)
	END IF
CONTAINS
	SUBROUTINE Ordenar(vetor, inicio, fim)
		IMPLICIT NONE
		INTEGER, INTENT(IN) :: inicio, fim
		INTEGER, DIMENSION(:), INTENT(INOUT) :: vetor
		INTEGER :: auxiliarTroca
		LOGICAL :: houveTroca
 
		IF (inicio /= fim) THEN
			DO
				houveTroca = .FALSE.
				DO i = inicio, fim - 1
					IF (Vetor(i) > Vetor(i+1)) THEN
						auxiliarTroca = Vetor(i+1)
						Vetor(i+1)=Vetor(i)
						Vetor(i) = auxiliarTroca
						houveTroca = .TRUE.
					END IF
				END DO
 
				IF (.NOT. houveTroca) THEN
					EXIT
				END IF
			END DO
		END IF		
	END SUBROUTINE
END PROGRAM aula