---+++ Homework 2 Si vuol ruotare una matrice *N<nop>xN* per *X* volte di *1/4* in senso orario. Ad esempio se *N=3* e la matrice iniziale e le tre matrici ruotate sono <table><tr><td width="25%"> Matrice iniziale oppure *X%4=0* | 1 | 2 | 3 | | 4 | 5 | 6 | | 7 | 8 | 9 | </td><td width="25%"> Dopo una rotazione o se *X%4=1* diventerà | 7 | 4 | 1 | | 8 | 5 | 2 | | 9 | 6 | 3 | </td><td width="25%"> Dopo due rotazioni o se *X%4=2* diventerà | 9 | 8 | 7 | | 6 | 5 | 4 | | 3 | 2 | 1 | </td><td width="25%"> Dopo tre rotazioni o se *X%4=3* diventerà | 3 | 6 | 9 | | 2 | 5 | 8 | | 1 | 4 | 7 | </td></tr> </table> Se *N=4* <table><tr><td width="25%"> Matrice iniziale oppure *X%4=0* |0|1|2|3| |4|5|6|7| |8|9|10|11| |12|13|14|15| </td><td width="25%"> con 1 rotazione di 1/4 passa a |12|8|4|0| |13|9|5|1| |14|10|6|2| |15|11|7|3| </td><td width="25%"> dopo 2 si ha |15|14|13|12| |11|10|9|8| |7|6|5|4| |3|2|1|0| </td><td width="25%"> e quindi dopo 3 rotazioni si arriva a |3|7|11|15| |2|6|10|14| |1|5|9|13| |0|4|8|12| </td></tr> </table> 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 1 leggete il valore *0<N<11* 1 usate la funzione *leggi* per leggere gli *NxN* valori interi e metterli in memoria 1 leggete il valore intero *X* che indica quante rotazioni applicare 1 applicate *X%4* rotazioni alla matrice usando la funzione *ruota* 1 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 ;-) ) *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) * [[%ATTACHURL%/HW2-dati-3x3-5.txt][HW2-dati-3x3-5.txt]]: Esempio di matrice 3x3 che viene fatta ruotare di 5/4 * Formato del file: <verbatim> 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) </verbatim> * Comando: __java -jar Mars4_4.jar sm nc mioprogramma.asm < HW2-dati-3x3-5.txt__ * output atteso: <verbatim> 7 4 1 8 5 2 9 6 3 </verbatim> ---+++ 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 [[%ATTACHURL%/index.html][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 [[%ATTACHURL%/AndreaSterbini.asm][così]] -- Users.AndreaSterbini - 10 Apr 2014
This topic: Architetture2/MZ/AA13_14
>
HomeWork2
Topic revision: r6 - 2014-05-06 - AndreaSterbini
Copyright © 2008-2025 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki?
Send feedback