Homework 2
Realizzate il programma assembly MIPS che:
- legge una matrice di CxR elementi interi (word) e la mette in memoria
- parte dalla casella a coordinate 0,0
- legge una successione di "mosse" che indicano ciascuna di quante colonne e quante righe ci si deve spostare rispetto alla casella corrente
- somma UNA SOLA VOLTA tutte le caselle toccate dalle mosse (anche se si dovesse passare pių volte sulla stessa casella)
- NOTA: la casella a coordinate 0, 0 va sommata solo se il percorso ci passa sopra
- termina la successione di mosse quando legge la coppia di spostamenti 0, 0
- stampa il risultato
NOTA: nel calcolare la prossima casella di una mossa si deve considerare la matrice come toroidale, ovvero:
- se si supera l'ultima colonna/riga si continua con la prima colonna/riga
- viceversa se si torna indietro prima della prima riga/colonna, si continua con l'ultima riga/colonna
- suggerimento: usate la funzione modulo
Input del programma
Il programma riceve in input:
- C: numero di colonne della matrice, numero intero compreso tra 1 e 100 inclusi
- R: numero di righe della matrice, numero intero compreso tra 1 e 100 inclusi
- RxC interi in ordine di riga e colonna
- prima la prima riga di C elementi (dalla colonna 0 alla colonna C-1)
- poi la seconda riga di C elementi
- ...
- infine l'ultima riga di C elementi
- una successione, di lunghezza non conosciuta a priori, di coppie di interi relativi terminata dalla coppia 0 0
- DC: variazione dell'indice di colonna
- DR: variazione dell'indice di riga
Output del programma
- la somma di tutti gli elementi toccati dal cammino descritto dagli spostamenti, presi una sola volta
NOTA: non scrivete altro (prompt o messaggi)
Esempio
Se la matrice 7x5 fosse
00 |
01 |
02 |
03 |
04 |
05 |
06 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
E la sequenza di mosse fosse:
- +2, +5
- -5, +3
- +11, -6
- -2, +2
- +8, -9
- +1, +2
- 0, 0
Le caselle toccate sarebbero, nell'ordine, alle coordinate (colonna, riga)
- 2, 0
- 4, 3
- 1, 2
- 6, 4
- 0, 0
- 1, 2
Ovvero le caselle evidenziate
00 |
01 |
02 |
03 |
04 |
05 |
06 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
Quindi la somma da stampare č 00 + 02 + 21 + 34 + 46 =
103
Notate che la casella a coordinate 1,2 č stata toccata pių volte ma va sommata solo una volta
Input per l'esempio di cui sopra
7
5
0
1
2
3
4
5
6
10
11
12
13
14
15
16
20
21
22
23
24
25
26
30
31
32
33
34
35
36
40
41
42
43
44
45
46
+2
+5
-5
+3
+11
-6
-2
+2
+8
-9
+1
+2
0
0
Output atteso
103
Esempio di input-output in forma di file
- per testare il programma potete usare la riga di comando
Consegna
Consegnate l'esercizio entro il 10 aprile alle ore 24 sulla
pagina di consegna
Risultati (definitivi)
Trovate i risultati dei test su
https://twiki.di.uniroma1.it/pub/Architetture2/MZ/AA14_15/HomeWork2/
--
AndreaSterbini - 26 Mar 2015