...

LIST UN PROGRAMMA ASSEMBLY PER ESEGUIRE SEMPLICI

by user

on
Category: Documents
13

views

Report

Comments

Transcript

LIST UN PROGRAMMA ASSEMBLY PER ESEGUIRE SEMPLICI
LIST
UN PROGRAMMA ASSEMBLY PER ESEGUIRE SEMPLICI
OPERAZIONI SU LISTE
VINCENZO MARRA
Sommario. Questo documento espone il tema d’esame valido dal 1.I.2005 al
30.IV.2005 per il laboratorio del corso di Architetture degli Elaboratori e delle
Reti (turno 3, Prof. D’Antona).
1. Modalità d’esame
•
•
•
•
•
Titolo del progetto: List
Validità: 1.I.2005 – 30.IV.2004
Votazione: in trentesimi
Peso relativo nel voto finale: 13
Appelli durante il periodo di validità: si veda il sito del Dipartimento di
Informatica e Comunicazione
• Date di consegna per portare il progetto all’orale: una settimana prima
delgli appelli.
Nota. Per una descrizione dettagliata delle modalità d’esame si consulti la pagina
web del corso all’indirizzo http://homes.dico.unimi.it/∼dantona/.
2. Tema d’esame: List
Una lista è una sequenza finita di elementi di un tipo dato. In questo progetto
si tratterà esclusivamente di liste di interi. Si denoti con L = [e1 , e2 , . . . , en ] una
lista di n elementi (numeri interi). La lista vuota, denotata da Λ, è l’unica lista che
non contiene elementi, ed ha dunque n = 0 nella notazione appena introdotta. La
lunghezza della lista L è il numero intero positivo n. La lista vuota è quindi anche
definibile come (l’unica) lista di lunghezza 0. Sia data una lista L. L’operatore
Length restituisce la lunghezza di una lista, ed è definito ricorsivamente da:
• Length([e1 , . . . , en ]) = 0 se n = 0.
• Length([e1 , . . . , en ]) = 1 + Length([f1 , . . . , fn−1 ]), dove fi = ei+1 per i ∈
{1, . . . , n − 1}, se n > 0.
L’operatore binario ∗ di concatenazione costruisce una lista L3 a partire da due
liste date L1 = [a1 , . . . , ar ] e L2 = [b1 , . . . , bs ] come segue:
L1 ∗ L2 = [a1 , . . . , ar , b1 , . . . , bs ] .
Dato un intero e e una lista [e1 , . . . , en ], si definisca l’operatore Append ricorsivamente come segue:
• Append([e1 , . . . , en ], e) = [e] se n = 0.
Date: 1 febbraio 2005.
1
2
VINCENZO MARRA
• Append([e1 , . . . , en ], e) = [e1 ] ∗ Append([f1 , . . . , fn−1 ], e), dove fi = ei+1 per
i ∈ {1, . . . , n − 1}, se n > 0.
Esempio. Un esempio di concatenazione:
[1, 23, −2, 5] ∗ [32, 4, 0] = [1, 23, −2, 5, 32, 4, 0] .
Un esempio di applicazione di Length:
Length([1, 23, −2]) = 1 + Length([23, −2]) =
= 1 + 1 + Length([−2]) = 1 + 1 + 1 + Length(Λ) =
=1+1+1+0 = 3
Un esempio di applicazione di Append:
Append([1, 23], −2) =
= [1] ∗ [23] ∗ Append(Λ, −2) =
[1] ∗ Append([23], −2) =
[1] ∗ [23] ∗ [−2] = [1, 23, −2] .
¤
Si implementi un programma assembly MIPS secondo le seguenti specifiche.
(1) Il programma chiede inizialmente all’utente di inserire una arbitraria 1 lista
L di interi.
(2) Il programma chiede poi all’utente di scegliere fra una delle seguenti opzioni.
(a) Calcolare la lunghezza della lista.
(b) Aggiungere un elemento alla lista.
Nel primo caso, il programma esegue una opportuna implementazione di
Length sulla lista L. L’implementazione in questione deve rispecchiare la
struttura ricorsiva della definizione data sopra. Inoltre, l’esecuzione del
calcolo deve essere illustrata il più chiaramente possibile tramite la visualizzazione di informazioni appropriate che evidenzino l’andamento della
ricorsione.
Nel secondo caso, il programma chiede all’utente di inserire un elemento
e, ed esegue una opportuna implementazione di Append sulla lista L e
l’elemento e. L’implementazione in questione deve rispecchiare la struttura
ricorsiva della definizione data sopra. L’esecuzione deve essere illustrata il
più chiaramente possibile tramite messaggi, come nel caso precedente.
(3) (Facoltativo.) Il programma permette all’utente di ripetere a piacimento
le operazioni (a) e (b) sulla lista corrente (cioè, la lista risultante dalla
sequenza di operazioni eseguite dall’inizio del programma).
Note.
• Si documenti adeguatamente il progetto. A tal scopo, può essere più che
sufficiente commentare opportunamente il codice. A discrezione del candidato, è possibile allegare una relazione che documenti aspetti del progetto non adeguatamente illustrati dai commenti. Si noti che, in ogni caso,
la documentazione deve essere proporzionata alla dimensione del progetto
(ossia, molto succinta).
• La documentazione deve includere le informazioni relative alla piattaforma
sulla quale si è sviluppato il progetto — sistema operativo, editor impiegato,
simulatore impiegato (spim, mips, altro) e sua versione, etc.
1Ma si assuma per semplicità che gli elementi della lista siano interi con segno rappresentabili,
per esempio, con 32 bit.
LIST
3
2.1. Approfondimenti. Un qualunque testo su algoritmi e strutture dati tratta
l’argomento di questo tema d’esame. Ad esempio, si veda A. Bertossi, Algoritmi
e Strutture Dati, Utet, Torino, 2000.
(V. Marra) D.I.Co., Università degli Studi di Milano, via Comelico 39-41, 20135 Milano
E-mail address: [email protected]
Fly UP