Sigui una matriu quadrada d’enters. El plegat d’una matriu consisteix en plegar la matriu primer per la línia horitzontal que divideix la matriu, i després per la línia vertical.
Per exemple, sigui la següent matriu amb quatre quadrants , el plegat fa que la part superior () se superposi amb la part inferior (), i el segon plegat fa que la part de la dreta () se superposi amb la de l’esquerra (A,C).
============= ============= ===========
| | | | | | | |
| A | B | ==> | A,C | B,D | ==> | A,B,C,D |
| | | | | | | |
plego --> ------------- ------------- -----------
| | | ^
| C | D | |
| | | |
============= plego
Fixeu-vos que en aquest cas, la matriu passa de ser de a una matriu en què cada posició té 4 números de la matriu original superposats.
El següent exemple mostra quines posicions se superposen amb altres segons el número. Això vol dir que totes les quatre posicions que tenen el número se superposen, les que tenen el número també, etc.
<---- 2N ------>
################ ^
# 1 2 | 2 1 # |
# 3 4 | 4 3 # |
#--------------# 2N
# 3 4 | 4 3 # |
# 1 2 | 2 1 # |
################ v
Cal implementar l’acció
void plegaMatriu(const Matriu& m, Matriu& r) amb la
següent especificació:
PRE:
una matriu
d’enters.
POST:
és una matriu
en què en cada posició té la suma dels elements
d’
superposats pel plegat
d’.
IMPORTANT: Només cal que envieu l’acció que us
demanem i les accions i funcions que vosaltres mateixos definiu.
Mantingueu, però, les definicions de tipus i els
#includes.
Una matriu .
Una matriu en què en cada posició té la suma dels elements d’ superposats pel plegat d’.
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