06. Laboratório F

Propaganda
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
Download