Difference between revisions of "Processamento de Dados (UFBA 2008.2): Correção da Prova I"
(New page: 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_1.pdf. Esta correção apresenta apen...) |
m (Protected "Processamento de Dados (UFBA 2008.2): Correção da Prova I" [edit=sysop:move=sysop]) |
(No difference)
|
Revision as of 00:08, 24 October 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_1.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
- V
- F
- F
- F
- F
Questão 2
Solução abaixo foi, com pequenas alterações, apresentada por um aluno e se refere apenas ao programa que deveria ser construído.
PROGRAM velocidade IMPLICIT NONE INTEGER :: S,T REAL :: V WRITE (*,*) "Digite o deslocamento." READ (*,*) S WRITE (*,*) "Digite o espaço de tempo." READ (*,*) T IF (T<=0) THEN WRITE (*,*) "Erro: Espaço de tempo inválido." ELSE V = (S*1.0) / T WRITE (*,*) "A velocidade escalar média é",V END IF END PROGRAM
A maioria dos alunos esqueceu-se de que S inteiro dividido por T inteiro seria igual a um inteiro e não a um real, motivo pelo qual se necessita fazer S*1.0 ou REAL(S).
Questão 3
Esta questão, apesar de ter sido formulada para ser respondida utilizando-se CASE também era possível fazer utilizando IF. A maioria dos alunos seguiu a última opção. Seguem duas possíveis soluções, também feitas por alunos, mas postas aqui com pequenas alterações.
Solução com IF
PROGRAM aliquota IMPLICIT NONE INTEGER :: A WRITE (*,*) "Digite o valor da renda anual." READ (*,*) A IF (A <= 1500) THEN WRITE (*,*) "Isento." ELSE IF (A>1500 .AND. A<=2500) THEN WRITE (*,*) "2%" ELSE IF (A>2500 .AND. A<=5000) THEN WRITE (*,*) "5%" ELSE IF (A>5000 .AND. A<=10000) THEN WRITE (*,*) "10%" ELSE IF (A>10000) THEN WRITE (*,*) "15%" END IF END IF END IF END IF END IF END PROGRAM aliquota
Muitos alunos utilizaram .OR. ao invés do .AND. necessário à solução.
Solução com CASE
PROGRAM aliquota IMPLICIT NONE INTEGER :: R WRITE (*,*) "Informe sua renda anual." READ (*,*) R WRITE (*,*) "O valor da aliquota será:" SELECT CASE (R) CASE (:1500) WRITE (*,*) "Isento" CASE (1501:2500) WRItE (*,*) "2%" CASE (2501:5000) WRITE (*,*) "5%" CASE (5001:10000) WRITE (*,*) "10%" CASE (10001:) WRITE (*,*) "15%" END SELECT END PROGRAM aliquota
Existiram muitos erros na sintaxe do CASE.
Questão 4
Esta questão tinha sido informada que iria estar na prova. Várias soluções diferentes foram apresentadas, mas todas seguiram a mesma lógica básica. Segue um das soluções apresentadas por um aluno.
PROGRAM resto INTEGER :: A,B,C,D WRITE (*,*) "Digite o dividendo." READ (*,*) A WRITE (*,*) "Digite o divisor." READ (*,*) B IF (B==0 .OR. A<0) THEN WRITE (*,*) "Número inválido." ELSE IF (A<B .OR. A==0) THEN C = A WRITE (*,*) "A divisão de ",A," por ",B," é zero e o resto é ",C ELSE C = A D = 0 DO C = C - B D = D + 1 IF (C<B) THEN WRITE (*,*) "A divisão tem como quociente ",D," e resto ",C EXIT END IF END DO END IF END PROGRAM resto