Definido, preciso e finito.
Trátase de atopa-lo mínimo dos n elementos a ordear e intercambialo co primeiro elemento (é dicir, situa-lo mínimo na esquerda do vector). Logo, atopa-lo mínimo dos n - 1 elementos restantes, e intercambialo do segundo elemento (é dicir, o elemento mais á esquerda dos n - 1 elementos considerados). Logo, repeti-lo proceso para os n - 1 elementos restantes, e así sucesivamente.
Só as poño en pseudocódigo:
repetir sentencias ata que condición
mentres condición sentencias fin_mentres
dende var = inicial ata final paso n sentencias fin_dende
real, dimension(3, 6) :: m do i = 1, 2 do j = 1, 6 m(i, j) = i*j**j - i*i*j end do end do
Pódese usar nas estruturas do e serve para rompe-la estrutura iterativa.
Para definir constantes.
repetir sentencias ata que condición
Solución:
do sentencias if(condición) exit end do
Ten 11 - (- 4) + 1 = 16 elementos.
Reserva memoria dinámicamente para un vector de n elementos reais.
integer, dimension(:), allocatable :: x do i = 1, 10 print *, x(i) end do
Trátase dun erro de segmentación que se produce na primeira iteración do bucle do, no print, ao tratar de acceder a x(1) sen reservar memoria para o arrai dinámico x.
Coa función intrínseca associated(p), que volta .true. se o punteiro p apunta a algures, e .false. en caso contrario.
integer, dimension(10) :: x do i = 1, 10 x(i) = i - 5 end do where(x > 0) x = x + 1 elsewhere x = x - 1 end where print *, x
Solución: -5 -4 -3 -2 -1 2 3 4 5 6
select case (sqrt(x*x + y*y + z*z)) case (a:) print *, "grande" case (b:a) print *, "medio" case default: print *, "erro" end select
De todos modos, a expresión debería ser enteira, pero non se terá en conta isto na avaliación.
do i = 10, -10, -3 x(i) = i end do
Executaranse max[0,(- 10 - 10 - (- 3))/(- 3)] = max(0, 7) = 7
f(x, y, z, t) = exp((x*x + y*y + z*z)/(t*t)) f(10, a + b, z, 5)
subroutine s(a, b, c, d) real, intent(inout) :: a real, intent(in) :: b real, intent(in) :: c real, intent(out) :: d print *, a a = b + c d = a - c return end subroutine
function f(x) real, intent(in) :: x y = x**3 - 3*x**2 + x - 1 return end function
O valor devolto está indefinido (será lixo) porque nunca se lle da un valor á variábel f, que é a devolta pola función.
recursive integer function f(x) result(y) integer, intent(in) :: x if(x > 1) then y = x + f(x - 1) else y = 1 end if return end function