Homework 2

Si vuol ruotare una matrice NxN per X volte di 1/4 in senso orario.

Ad esempio se N=3 e la matrice iniziale e le tre matrici ruotate sono

Matrice iniziale oppure X%4=0
1 2 3
4 5 6
7 8 9
Dopo una rotazione o se X%4=1 diventerà
7 4 1
8 5 2
9 6 3
Dopo due rotazioni o se X%4=2 diventerà
9 8 7
6 5 4
3 2 1
Dopo tre rotazioni o se X%4=3 diventerà
3 6 9
2 5 8
1 4 7

Se N=4

Matrice iniziale oppure X%4=0
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
con 1 rotazione di 1/4 passa a
12 8 4 0
13 9 5 1
14 10 6 2
15 11 7 3
dopo 2 si ha
15 14 13 12
11 10 9 8
7 6 5 4
3 2 1 0
e quindi dopo 3 rotazioni si arriva a
3 7 11 15
2 6 10 14
1 5 9 13
0 4 8 12

Scrivete un programma ASM MIPS che:

  • definisce una funzione leggi(Matrice, N) che legge una matrice di interi di dimensione 0<N<11 mettendoli in memoria per righe a partire dall'indirizzo Matrice
  • definisce una funzione ruota(Matrice, N) che ruota la matrice di un quarto in senso orario (potete usare una matrice uguale di appoggio)
  • definisce una funzione stampa(Matrice, N) che stampa la matrice per righe
  • e nel programma principale:
    1. allocate staticamente lo spazio per la matrice e per la matrice di appoggio (max 10x10 words ciascuna) e per le altre strutture o stringhe necessarie
    2. leggete il valore 0<N<11
    3. usate la funzione leggi per leggere gli NxN valori interi e metterli in memoria
    4. leggete il valore intero X che indica quante rotazioni applicare
    5. applicate X%4 rotazioni alla matrice usando la funzione ruota
    6. usate la funzione stampa per stampare la matrice

ATTENZIONE: visto che esistono solo 4 tipi di rotazioni a qualcuno potrebbe venire in mente che non è necessario ruotare veramente la matrice ma basta prevedere 4 diverse funzioni di stampa ... NON E' COSI' ... realizzate le funzioni richieste o il compito varrà 1/10 invece di 1 (sempre che funzioni wink )

NOTE:

  • Potete assumere che l'input sarà corretto (non c'è bisogno di controllare i dati)
  • NON INSERITE PROMPT DI NESSUN TIPO (o almeno toglieteli prima di consegnare)
  • i dati possono essere letti da file tramite redirezione, ciascuno su una riga seguito da accapo (vedi file di esempio)
    • HW2-dati-3x3-5.txt: Esempio di matrice 3x3 che viene fatta ruotare di 5/4
    • Formato del file:
N (dimensione della matrice, tra 1 e 10 compresi)
1° valore
2° valore
...
NxN° valore
X (numero di rotazioni di 1/4 in senso orario da applicare)
    • Comando: java -jar Mars4_4.jar sm nc mioprogramma.asm < HW2-dati-3x3-5.txt
    • output atteso:
      7 4 1
      8 5 2
      9 6 3
            

Risultati dei test

Ho testato 10 casi, ovvero le 10 matrici da dimensione 1 a dimensione 10, con un numero di rotazioni generato a caso tra 0 e 49 compresi.

Ve la siete cavata abbastanza bene, bravi!

  • per un paio di voi il programma si è bloccato sul test 1,3,8 ovvero i casi in cui K (numero di rotazioni di 1/4) era multiplo di 4
  • l'errore più comune è non formattare la matrice correttamente (con spazi ed accapi)
  • oppure sbagliare il numero di rotazioni da applicare
  • Ecco i risultati dei test su 10 set di dati generati a caso
  • come interpretare le differenze:
    • le righe che iniziano con il carattere '-' sono le righe "giuste" che non sono presenti nel vostro output
    • le righe che iniziano con il carattere '+' sono le righe "sbagliate" che sono presenti nel vostro output
  • come al solito il punteggio che prendete sul compito è PASSED/10
    • chi non ha ruotato la matrice ma realizzato 4 funzioni di stampa becca solo 1/4 del punteggio
  • Io ho implementato l'esercizio così

-- AndreaSterbini - 10 Apr 2014


This topic: Architetture2/MZ/AA13_14 > HomeWork2
Topic revision: r6 - 2014-05-06 - AndreaSterbini
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback