# exercici 1 Parcial Q2 20-21 # variables # m : matriu donada # k : valor del radi de l'ordre # iniSub : index inferior mínim de la submatriu en estudi # fiSub : index superior màxim de la submatriu en estudi # La submatriu associada a un k-centre d'ordre es # de (2k+1)x(2k+1). Per tant, perque els indexs que la recorren # siguin sempre dins de la matriu donada de nxn, cal que # 2k+1 <= n. Es a dir, k <= (n - 1) %/% 2. matOrdenada <- function(m) { ant <- m[1, 1] for(i in 1 : nrow(m)){ for (j in 1 : ncol(m)){ if (ant > m[i, j]) return (FALSE) ant <- m[i, j] } } return (TRUE) } nombreCentres <- function(m, k) { n <- nrow(m) if (k <= (n - 1) %/% 2){ iniSub <- 1 + k fiSub <- n - k for (i in iniSub : fiSub){ for (j in iniSub : fiSub){ subMatriu <- m[(i-k):(i+k), (j-k):(j+k)] if( matOrdenada(subMatriu)){ cat("(",i, ",", j, ")", "\n") } } } } } # programa principal # A definida per columnes A <- matrix( c(11, 14, 17, 2, 3, 90, 12, 11, 77, 12, 15, 18, 1, 11, 65, 74, 81, 96, 13, 16, 19, 27, 47, 70, 75, 90, 96, 2, 17, 20, 30, 50, 71, 76, 95, 97, 1, 18, 21, 40, 52, 74, 12, 13, 15, 3, 19, 25, 45, 63, 76, 10, 11, 11, 1, 19, 27, 46, 65, 80, 10, 10, 14, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), nrow = 9) k <- 1 cat("\n k = ", k, "\n") nombreCentres(A, k) k <- 2 cat("\n k = ", k, "\n") nombreCentres(A, k) k <- 3 cat("\n k = ", k, "\n") nombreCentres(A, k) k <- 7 cat("\n k = ", k, "\n") nombreCentres(A, k)