Difference between revisions of "Processamento de Dados (UFBA 2008.2): Correção da Prova II"

From AdonaiMedrado.Pro.Br
Jump to: navigation, search
(Questão 2)
(Questão 2)
Line 23: Line 23:
 
     WRITE (*,*) "Quantos números deseja digitar?"     
 
     WRITE (*,*) "Quantos números deseja digitar?"     
 
     DO
 
     DO
READ(*,*,IOstat=Erro) n
+
      READ(*,*,IOstat=Erro) n
 
+
 
       IF (Erro > 0) THEN
 
       IF (Erro > 0) THEN
WRITE (*,*) "Número inválido. Digite novamente."
+
          WRITE (*,*) "Número inválido. Digite novamente."
 
       ELSE  
 
       ELSE  
 
         EXIT
 
         EXIT
END IF
+
      END IF
END DO
+
    END DO
 
     ALLOCATE(a(1:n))
 
     ALLOCATE(a(1:n))
 
     
 
     
 
     WRITE (*,*) "Digite uma sequencia de ",n," inteiros."
 
     WRITE (*,*) "Digite uma sequencia de ",n," inteiros."
 
 
 
     i = 1
 
     i = 1
 
     DO
 
     DO
READ(*,*,IOstat=Erro) a(i)
+
        READ(*,*,IOstat=Erro) a(i)
 
+
        IF (Erro /= 0) THEN
      IF (Erro /= 0) THEN
+
            WRITE (*,*) "Número inválido.  Digite novamente."
WRITE (*,*) "Número inválido.  Digite novamente."
+
        ELSEIF (Erro == 0) THEN
      ELSEIF (Erro == 0) THEN
+
            i = i + 1
        i = i + 1
+
            IF (i>n) THEN
        IF (i>n) THEN
+
                EXIT
          EXIT
+
            END IF
 
         END IF
 
         END IF
END IF
+
    END DO
END DO
+
 
      
 
      
 
     OPEN (UNIT=10,FILE="saida.txt")
 
     OPEN (UNIT=10,FILE="saida.txt")

Revision as of 21:31, 4 December 2008

A prova está disponível para download no seguinte endereço: http://www.adonaimedrado.pro.br/wiki/documentos/professor/UFBA_2008_2_MATA045_PD_PROVA_2.pdf.

Esta correção apresenta apenas o gabarito da questão de V ou F e possiveis soluções para os programas que deveriam ser desenvolvidos

Questão 1

  1. V
  2. V
  3. F (a linha referida aloca o vetor e é necessária para reservar memória para o mesmo)
  4. F (o quadrado e não a raiz quadrada)
  5. V
  6. V
  7. F (o CYCLE faz com que se vá para o próximo ciclo do comando DO)
  8. V
  9. V

Questão 2

PROGRAM prova
    IMPLICIT NONE
    INTEGER :: i,n,Erro,Maior,SegundoMaior
    INTEGER, DIMENSION(:),ALLOCATABLE :: a
 
    WRITE (*,*) "Quantos números deseja digitar?"    
    DO
      READ(*,*,IOstat=Erro) n
      IF (Erro > 0) THEN
          WRITE (*,*) "Número inválido. Digite novamente."
      ELSE 
        EXIT
      END IF
    END DO
    ALLOCATE(a(1:n))
 
    WRITE (*,*) "Digite uma sequencia de ",n," inteiros."
    i = 1
    DO
        READ(*,*,IOstat=Erro) a(i)
        IF (Erro /= 0) THEN
            WRITE (*,*) "Número inválido.  Digite novamente."
        ELSEIF (Erro == 0) THEN
            i = i + 1
            IF (i>n) THEN
                EXIT
            END IF
        END IF
    END DO
 
    OPEN (UNIT=10,FILE="saida.txt")
    WRITE (10,*) RetornarSegundoMaior(a)
    CLOSE(10)
CONTAINS
    INTEGER FUNCTION RetornarSegundoMaior(V)
      IMPLICIT NONE
      INTEGER, DIMENSION(:), INTENT(IN) :: V
      LOGICAL :: MaiorAtribuido = .FALSE., SegundoMaiorAtribuido = .FALSE.
      INTEGER :: Maior,SegundoMaior
 
      MaiorAtribuido = .FALSE.
      SegundoMaiorAtribuido = .FALSE.
      DO i = 1, SIZE(V)
        IF (V(i)>Maior .OR. .NOT. MaiorAtribuido) THEN
          Maior = V(i)
          MaiorAtribuido = .TRUE.
        END IF
      END DO
 
      DO i = 1, SIZE(V)
        IF (V(i) /= Maior .AND. (V(i)>SegundoMaior .OR. .NOT. SegundoMaiorAtribuido)) THEN
          SegundoMaior = V(i)
          SegundoMaiorAtribuido = .TRUE.
        END IF
      END DO
 
      IF (SegundoMaiorAtribuido) THEN
        RetornarSegundoMaior = SegundoMaior
      ELSEIF (MaiorAtribuido) THEN
        RetornarSegundoMaior = Maior
      ELSE
        RetornarSegundoMaior = -1
      END IF
    END FUNCTION RetornarSegundoMaior
END PROGRAM

Questão 3

PROGRAM prova
    IMPLICIT NONE
    INTEGER :: linha,coluna
    INTEGER, DIMENSION(1:3,1:3) :: m,n,r
 
    WRITE (*,*) "Digite a primeira matriz."
    DO linha=1,3
        READ (*,*) (m(linha,coluna),coluna=1,3)
    END DO
 
    WRITE (*,*) "Digite a segunda matriz."
    DO linha=1,3
        READ (*,*) (n(linha,coluna),coluna=1,3)
    END DO
 
    DO linha = 1, 3
	DO coluna = 1, 3
		r(linha,coluna) = m(linha,1)*n(1,coluna)+m(linha,2)*n(2,coluna)+m(linha,3)*n(3,coluna)
	END DO
    END DO
 
    WRITE (*,*) "Resultado do produto:"
    DO linha=1,3
        WRITE (*,"(3(I5))") (r(linha,coluna),coluna=1,3)
    END DO
END PROGRAM prova