Difference between revisions of "F90: Ordenação um vetor de N números inteiros"

From AdonaiMedrado.Pro.Br
Jump to: navigation, search
(New page: <code lang="fortran"> PROGRAM aula IMPLICIT NONE INTEGER :: i, quantidade INTEGER, DIMENSION(:),ALLOCATABLE :: a WRITE (*,*) "Quantos números deseja digitar?" READ (*,*) quantidade; ...)
 
Line 23: Line 23:
 
INTEGER, DIMENSION(:), INTENT(INOUT) :: vetor
 
INTEGER, DIMENSION(:), INTENT(INOUT) :: vetor
 
INTEGER :: auxiliarTroca
 
INTEGER :: auxiliarTroca
LOGICAL :: houveTroca = .FALSE.
+
LOGICAL :: houveTroca
 +
                houveTroca = .FALSE.
  
 
IF (inicio /= fim) THEN
 
IF (inicio /= fim) THEN

Revision as of 04:04, 4 November 2008

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
                houveTroca = .FALSE.
 
		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