Sea M una matriz cuadrada 2N × 2N. El plegado de una matriz consiste en plegar la matriz de enteros primero por la línea horizontal que divide la matriz, y después por la línea vertical.
Por ejemplo, sea la siguiente matriz con cuatro cuadrantes A,B,C,D, el plegado hace que la parte superior (A,B) se superponga con la parte inferior (C,D), y el segundo plegado hace que la parte de la derecha (B,D) se superponga con la de la izquierda (A,C).
============= ============= =========== | | | | | | | | | A | B | ==> | A,C | B,D | ==> | A,B,C,D | | | | | | | | | plego --> ------------- ------------- ----------- | | | ^ | C | D | | | | | | ============= plego
Fíjese que en este caso, la matriz pasa de ser de 2N × 2N a una matriz N × N en la que cada posición tiene 4 números de la matriz original superpuestos.
El siguiente ejemplo muestra qué posiciones se superponen con otras según su número. Esto significa que todas las cuatro posiciones que tienen el número 1 se superponen, las que tienen el número 2 también, etc.
<---- 2N ------> ################ ^ # 1 2 | 2 1 # | # 3 4 | 4 3 # | #--------------# 2N # 3 4 | 4 3 # | # 1 2 | 2 1 # | ################ v
Es necesario implementar la acción void plegaMatriu(const Matriu& m, Matriu& r)
con la siguiente especificación:
PRE:
m una matriz 2N × 2N de enteros.
POST:
r es una matriz N × N en la que en cada posición
tiene la suma de los elementos de m superpuestos
por el plegado de m.
Observación
IMPORTANTE: Sólo hay que enviar la acción que se pide, y quizás otras acciones y funciones necesarias. Hay que mantener, sin embargo, las definiciones de tipos y los #include
s.
Entrada
Una matriz 2N × 2N.
Salida
Una matriz N × N en la que en cada posición tiene la suma de los elementos de m superpuestos por el plegado de m.
ENTRADA 1: 4 1 2 2 1 3 4 4 3 3 4 4 3 1 2 2 1 SORTIDA 1: 4 8 12 16 ENTRADA 2: 8 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 SORTIDA 2: 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 ENTRADA 3: 2 1 3 2 4 SORTIDA 3: 10