Computação e Programação 2006/07 Aula Prática 6 Laboratório - Programação em F 1. Programação imperativa em F 1.1. Escreva um programa contadivisores que recebe interactivamente um número natural e apresenta no ecrã o número de divisores desse número. 1.2. Escreva um programa contaprimos que recebe do utilizador um número natural N e apresenta no ecrã o número de números primos até N. Comece por definir uma função auxiliar primoq que pode usar no programa principal. (Relembre a inclusão de funções auxiliares nos programas em F.) 1.3. Escreva um programa fresolve que recebe do utilizador os coeficientes de um polinómio do segundo grau e que apresenta no ecrã as raízes reais desse polinómio, caso existam; caso o polinómio não possua raízes reais, o programa deverá avisar o utilizador. 1.4. Escreva um programa mdc que recebe interactivamente dois números naturais e que calcula o máximo divisor comum desses dois números usando o algoritmo de Euclides, apresentando-o de seguida no ecrã. 2. Debugging de programas É indispensável que saibamos perceber porque é que o nosso programa não compila correctamente. Na grande maioria das vezes basta ler com atenção os erros gerados durante a compilação (mal sucedida). Devemos ter sempre atenção aos erros pela ordem em que são gerados, pois pode haver uma interdependência entre eles e apenas os primeiros serem realmente erros. 2.1. Copie para a pasta aula5 os ficheiros disponíveis a partir da página da cadeira, que contêm alguns erros típicos. Tente compilá-los e observe atentamente as mensagens de erro. Corrija os programas de modo a que compilem sem erros (só assim é que o executável é gerado). program erros1 program erros2 integer :: x, i, y integer :: x, y, z print *,"Introduza um numero" read *, x do i=1,x r=r+i end print *," A soma ate",x,"e:",r print *,"Introduza um numero" read *,x print *,"O quadrado e",f(x) print *,"Introduza um numero" read *,y print *,"O cubo e",g(y,z) end erros1 contains function f(x) result(y) integer :: x integer :: y y=X**2 end f subroutine g(x,y) integer, intent(in) :: x, y y=x**3 end g