Sea una matriz cuadrada . 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 , el plegado hace que la parte superior () se superponga con la parte inferior (), y el segundo plegado hace que la parte de la derecha () 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 a una matriz 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 se superponen, las que tienen el número 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:
una matriz
de enteros.
POST:
es una matriz
en la que en cada posición tiene la suma de los
elementos de
superpuestos por el plegado de
.
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 #includes.
Una matriz .
Una matriz en la que en cada posición tiene la suma de los elementos de superpuestos por el plegado de .
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