- (3 PUNTOS) Escribir unha función externa chamada calcula_s en Fortran 90 que, dado un número enteiro n, calcule e retorne a seguinte suma:
function calcula_s(n)
integer, intent(in) :: n
calcula_s = 0
do i = 1, n
do j = 1, i
calcula_s = calcula_s + (i*i)*sin(3.1416/j)
end do
end do
return
end function
- (4 PUNTOS) Escribir un programa en Fortran que lea por teclado un número enteiro n e reserve memoria dinámicamente para dous vectores e de n elementos reais cada un. Logo, debe ler por teclado o vector e transforma-lo a un novo vector de modo que
yi = (xi-1 + xi + xi+1)/3, i = 1,..., n (se i - 1 < 1, non se debe sumar xi-1; se i + 1 > n, non se debe sumar xi+1). Finalmente, debe imprimi-lo vector e libera-la memoria dos dous vectores. Nota: se non sabes usar arrais dinámicos, usa arrais estáticos, aunque o exercicio puntuará menos.
program proba
real, dimension(:), allocatable :: x, y
read *, n
allocate(x(n), y(n))
do i = 1, n
y(i) = 0
do j = -1, 1
if( (i + j >= 1).and.(i + j <= n) ) y(i) = y(i) + x(i + j)
end do
y(i) = y(i)/3
end do
print *, y
deallocate(x, y)
end program
- (3 PUNTOS) Escribir un programa en Fortran que lea un número enteiro n e imprima por pantalla os seus divisores primos coas súas multiplicidades. Pista: o programa debe percorrer os números enteiros k < n/2, e atopar aqueles números k para os que n é múltiplo enteiro de k. Para atopa-la multiplicidade dun factor k, hai que facer n = n/k mentres que o resto desta división (que se pode calcular coa función intrínseca mod(n, k)) sexa 0: a multiplicidade é o número destas divisións.
program factores_primos
integer :: p
read *, n
k = n
do
if(mod(n, k) == 0) then
p = 0
do
n = n/k
p = p + 1
if(mod(n, k) /= 0) exit
end do
print *, k, p
end if
if(n == 1) exit
k = k + 1
end do
end program