| |
Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum |
[D'ANTONA] Progetto Stirling Clicca QUI per vedere il messaggio nel forum |
yoruno |
Come penso abbiate letto sul Diario del Corso ieri sera a lezione è stato presentato il testo del progetto d'esame.
In attesa che il prof aggiorni la pagina web, inizio ad aprire questo thread per raccogliere suggerimenti e aiuti riguardo il progetto.
Ps.: come per gli altri progetti è meglio evitare di postare codice, meglio dei sani suggerimenti :) |
Polo |
Io non ho seguito i corsi mi sapreste spiegare chi deve fare questo progetto. per esempio io mi sono iscritto all'appello del 17 giugno centro qualcosa con questo progetto e dove posso trovarlo?? |
yoruno |
Lo potrai trovare al sito di D'Antona appena verrà aggiornato, per ora il prof non ha ancora provveduto... ti ricordo che il progetto va consegnato via mail entro il 7 Giugno per essere valutato per il primo appello. |
Polo |
ma Vale per qualsiasi appello A cui mi sono iscritto o solo per D'Antona?? |
yoruno |
No, io mi riferisco solo per quanto riguarda D'Antona, per gli altri professori non so nulla, sorry :) |
yoruno |
Progetto pubblicato sul sito, in bocca al lupo a tutti! :) |
yoruno |
code:
n\k | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10
------------------------------------------------------------------------------------
1 | 1 | | | | | | | | |
2 | 1 | 1 | | | | | | | |
3 | 1 | 3 | 1 | | | | | | |
4 | 1 | 7 | 6 | 1 | | | | | |
5 | 1 | 15 | 25 | 10 | 1 | | | | |
6 | 1 | 31 | 90 | 65 | 15 | 1 | | | |
7 | 1 | 63 | 301 | 350 | 140 | 21 | 1 | | |
8 | 1 | 127 | 966 | 1701 | 1050 | 266 | 28 | 1 | |
9 | 1 | 255 | 3025 | 7770 | 6951 | 2646 | 462 | 36 | 1 |
10 | 1 | 511 | 9330 | 34105 | 42525 | 22827 | 5880 | 750 | 45 | 1
Poi ad esempio (vengono comodi per testare il programma):- S(13,6)= 9321312
- S(15,2)= 16383
- S(15,12)= 106470
- S(12,8)= 159027
- S(21,2)= 1048575
|
emanuele |
Per consegnare il progettino come si fa?
Cioe',basta inviare una mail al prof con nome e num matricola o bisogna scrivere altro?(il sito non spiega molto bene) |
yoruno |
Si, da quel che ha detto il prof basta inviare una mail (io magari userei quella fornita dall'università) a Marra con in allegato i file del progetto. :) |
mazob |
Ho letto antentamente la presentazione del progetto ma non ho capito, magari qualcuno mi può aiutare.
Cosa bisogna inviare al prof solo la procedura che fa il calcolo o tutto il programma con il main?
Che tipo di messaggi bisogna presentare all'utente? |
yoruno |
Tutto ciò che non è specificato nel testo non è obbligatorio. Quindi i messaggi utente e quant'altro sono liberi e a tua discrezione.
Poi dovrai inviare al prof ovviamente tutto il programma, corredato (se vuoi) da una documentazione in pdf o rtf e ben commentato. Su quest'ultimo punto si è molto raccomandato :) |
Oracle |
Io penso che devi inviare tutto il programma (completo) anche perchè non è molto lungo così si può provare.
I messaggi presumo siano liberi es :
"inserire 2 numeri e premere invio"
"il risultato è :"
:ciao: |
emanuele |
Domande:
1) le eccezioni vanno gestite?(Overflow ad esempio)
2) Il prof ha suggerito di strutturarlo in qaulche modo particolare?(Ad esempio usare variabili globali o cose simili) |
emanuele |
Altra domanda(non tecnica):
Per iscriversi all'orale cosa bisogna fare?
Scrivere a D'Antona? |
yoruno |
Originally posted by emanuele
Altra domanda(non tecnica):
Per iscriversi all'orale cosa bisogna fare?
Scrivere a D'Antona? Esattamente, ha richiesto di mandargli una semplice mail per l'iscrizione :) |
emanuele |
scusate...io credo di averlo finito...ma e' davvero cosi' semplice?
Cioe',basta che i rsultati tornino o bisogna controllare + cose? |
yoruno |
Direi che una volta che i risultati tornano puoi al limite farci qualche rifinitura.
Io ho messo un paio di abbellimenti (scritte messe bene, cose del genere), ma nulla più :) |
yoruno |
Chiarimenti da parte del prof
Il testo del progetto richiede esplicitamente che l'implementazione segua la formula ricorsiva riportata nel testo.
Si tratta quindi di implementare un programma ricorsivo, cosa per la quale occorre usare lo stack. |
T_M_P |
Scusate, avrei un paio di domandine:
- il push va fatto prima di chiamare la procedura?
- all'entrata della procedura controllate subito se "n" o "k" sono 1 in modo da ritornare il valore?
Ciao e grazie!! |
T_M_P |
Mah... Facile? Sarà, ma qui ci sto facendo notte...
Come si fa a fare in modo che restituisca 1 se k o n =1??
Help Help...
:)
P.S. E' possibile modificare lo stackpointer a piacimento (non tecnicamente ma in base alle istruzioni del prof)? Se fosse così si potrebbe "uscire" dalla ricorsione quando se ne ha voglia..
O sbaglio?:( |
T_M_P |
Ragazziiii....
Non è che c'è qualche Buon Samaritano che mi da una mano?? |
danire83 |
anche a me non sembra così semplice!!
Cmq io lo stack lo inizializzo nella procedura... e prima della ricorsione faccio subito un test per verificare se k e n inseriti danno subito un risultato...(se k=n o k=1 n<1 o k<1 e n=1)
il problema anzi il problemone è che non riesco a pensare un modo per effettuare la ricorsione vera e propria sulla funzione!!
Il fatto che ci sono due addendi con variabili distinte mi manda in casino!!
SE qualcuno ha qualche idea mi dia una mano please!!!! |
tom80 |
Ciao ragazzi.Io il progetto l'ho scritto in C e sembra funzionare!!!!.Ora si tratta solo di trascriverlo in linguaggio assembler.Io non ho potuto seguire le lezioni.Ovviamente il progetto è da farei in linguaggio assembler!!!!!!!.(Scusate la domanda stupida).C'è la possibilità di avere un esempio di un programma scritto in linguaggio assembler come quello, che vuole il prof?.Grazie mille.
A presto.
Ciao ciao Tom80 |
T_M_P |
tom, scriverlo in C è il meno, 10 righe ed è fatto...
Il problema è scriverlo in Assembly...
:-)
Io ho fatto qualche passo avanti.. Ma che casino!!! |
T_M_P |
Ehi ragazzi!!
Ma tutto lo spirito di aggregazione del progetto in java dov'è finito!?!?!
Abbiamo bisogno di aiuto... |
yoruno |
Il problema è che ho poco tempo al momento... e mi sa che molti hanno rinunciato a questo progetto... o forse è presto... la consegna alla fine è entro luglio, magari c'è chi sta aspettando... |
T_M_P |
Originally posted by yoruno
Il problema è che ho poco tempo al momento... e mi sa che molti hanno rinunciato a questo progetto... o forse è presto... la consegna alla fine è entro luglio, magari c'è chi sta aspettando...
Come la consegna è entro luglio? Non era per il 7 di giugno?
E poi non era riferito a te: già solo per il fatto che hai postato gli appunti sei esonerato da ogni richiesta di aiuto.. :D |
yoruno |
Se vuoi la valutazione del progetto entro l'orale di giugno, senno entro il 5 (o il 7?) di luglio per la seconda data... se leggi le specifiche è scritto :) |
T_M_P |
Originally posted by yoruno
Se vuoi la valutazione del progetto entro l'orale di giugno, senno entro il 5 (o il 7?) di luglio per la seconda data... se leggi le specifiche è scritto :)
Hai ragione!!!
Pensavo che quella data fosse per un altro progetto... |
T_M_P |
Ma tu l'hai finito?
Io ora sono riuscito a mettere giù qualcosa..
chiedo i valori
chiamo la funzione
controllo i valori (n e k)
ecc
il problema ce l'ho con il ritorno al $ra nello stack.. Mah!
Un consiglio: tu usi i registri $a0 e $a1 per passare i parametri alla funzione o usi solo lo stack?
Io carico i valori nello stack prima di chiamare la funzione e dopo li scarico.. Ma alla funzione li passo con i registri... |
yoruno |
Originally posted by T_M_P
Ma tu l'hai finito?
Io ora sono riuscito a mettere giù qualcosa..
chiedo i valori
chiamo la funzione
controllo i valori (n e k)
ecc
il problema ce l'ho con il ritorno al $ra nello stack.. Mah!
Un consiglio: tu usi i registri $a0 e $a1 per passare i parametri alla funzione o usi solo lo stack?
Io carico i valori nello stack prima di chiamare la funzione e dopo li scarico.. Ma alla funzione li passo con i registri... Io avevo già finito il progetto, usando solo dei registri temporanei senza stack, poi ho scoperto che era richiesto il suo utilizzo, e ho preso il progetto e l'ho reiniziato... non so se lo consegnerò il 6, ho poca voglia di farlo di corsa...
Sono quasi alla fine, ma anche a me il $ra crea qualche problemino...
Comunque anche io sto usando $a0 e $a1... |
^Belzebu^ |
Originally posted by yoruno
Il problema è che ho poco tempo al momento... e mi sa che molti hanno rinunciato a questo progetto... o forse è presto... la consegna alla fine è entro luglio, magari c'è chi sta aspettando...
infatti.io sono impegnato con Economia. per questo non mi sto preoccupando gia' ora.
iniziero' il progetto dopo il 18 giugno e di presentarlo entro il 7 luglio.
conto di dare l'orale nell'appello di luglio.
quindi potro' contribuire solo fra un po' di tempo..sorry.
ByezAll
^Belzebu^ |
luca71 |
voi almeno avete iniziato io non ancora letto la traccia :)... |
luca71 |
sapete la data dell'appello di luglio e le mod di iscrizione?
ciaoo |
T_M_P |
qualcuno l'ha cominciato?
Io sto migliorando.. E' vero, va in loop, però per un bel pezzo tutto viene eseguito correttamente..
Spero non mi manchi molto.. |
bill76 |
Scusate ma vorrei sapere quanto tempo devo prendermi per fare un progetto simile.
Quanto tempo devo preventivare? |
T_M_P |
Originally posted by bill76
Scusate ma vorrei sapere quanto tempo devo prendermi per fare un progetto simile.
Quanto tempo devo preventivare?
Secondo me non poco.. mettere giù la base non è complicato, ma fare il debug in assembly è veramente una cosa lunga... |
steve78 |
Sono un po' OT ma sapete quanta gente + o - è iscritta all'orale di Dantona del 12/07 ? |
ROYV |
sul sito non c'è niente.
cmq credo che siano un 60/70% delle persone, quindi come si fà con i permessi del lavoro ? visto che verrà suddiviso in + giornate |
yoruno |
Una marea di permessi che il prof dovrà firmare, oppure un bel fax dalla segreteria... |
T_M_P |
Qualcuno ha finito il progetto? |
yoruno |
Io ce l'ho li, manca poco ma manca anche il tempo... peccato, il primo senza stack funzionava tanto bene, mi è dispiaciuto doverlo rifare... |
T_M_P |
Originally posted by yoruno
Io ce l'ho li, manca poco ma manca anche il tempo... peccato, il primo senza stack funzionava tanto bene, mi è dispiaciuto doverlo rifare...
A me continua ad andare in loop... Non riesco a farlo tornare ad eseguire la s(n-1,k-1) della prima...
:alsono: |
yoruno |
Io ho usato tre valori invece che due, utilizzo n, k e per k-1 ho usato j, in modo che non si perda i valori... magari è per questo, non so... |
T_M_P |
Originally posted by yoruno
Io ho usato tre valori invece che due, utilizzo n, k e per k-1 ho usato j, in modo che non si perda i valori... magari è per questo, non so...
Può essere un idea... Ma quindi a te funziona? |
yoruno |
Si, a parte che ho un paio di errori di calcolo durante il pop dello stack... ho tutto moltiplicato x3... spero di riuscire a capire col debug come mai... |
T_M_P |
Originally posted by yoruno
Si, a parte che ho un paio di errori di calcolo durante il pop dello stack... ho tutto moltiplicato x3... spero di riuscire a capire col debug come mai...
Vai! Anche a me funziona e anche io ho qualche problema con il calcolo finale: fa tutta la ricorsione ma mi incasino per la memorizzazione del risultato da restituire.. Lo sovrascrivo da qualche pare...
Però credo che sia questione di poco, forse riesco a consegnarlo!!! Mitttttiiicccco!!! |
yoruno |
Originally posted by T_M_P
Però credo che sia questione di poco, forse riesco a consegnarlo!!! Mitttttiiicccco!!! C'è da dire che in compenso la documentazione non penso proprio che gliela farò! :P |
T_M_P |
Ma siamo solo io e te a fare il progetto? :shock: |
T_M_P |
SIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
:D :-D
:) :(
:sad: :-o
:shock: :?
:cool: :x
:P :oops:
:cry: :evil:
:twisted: :roll:
;) :!:
:?: :arrow:
:alieno: :angel:
:approved: :arg:
:asd: :ban:
:devil: :cannabis:
:birrozza: :clap:
:crazy: :ueee:
:uhmehehe: :buuu:
:schifo: :eek:
:| :#
:caffe: :lode:
:help: :idea:
:ignore: :pazzo:
:alsono: :lamer:
:love: :mad:
:sighsob: :muhehe:
:sedere: :nono:
:malmust: :pop:
:sbocco: :red:
:roargh: :rotfl:
:ciao: :sbav:
:pensa: :schoked:
:smack: :smokin:
:swear: :teach:
:pc: :ihihih:
:wall: :babbo:
:bolted: :grr:
:sbonk: :girl:
:smack2: :boni:
:zzz: :boing:
:gnum: :ciaoo:
:lol: :climb:
:prr: :cagatemi:
:ola: :thxthx:
:rolleyes: :look:
:saw: :bluekiss:
:banana: :bubble:
:date: :licking:
:lmao: :matrix:
:pccrash: :petting:
:pills: :please:
:talking: :whisper:
:blabla: |
T_M_P |
Ovviamente significa che l'ho finito.. :) |
yoruno |
Ah, ma per curiosità... la famosa documentazione tu la fai? |
mark |
Originally posted by T_M_P
Ma siamo solo io e te a fare il progetto? :shock:
non esageriamo:D
fatto e consegnato senza documentazione extra....
sperem......:please: |
yoruno |
Ah, ok, almeno non sarò l'unico a consegnare senza documentazione! :P |
Guinan |
ehm, ehm, io la documentazione gliel'ho mandata.....
...spero solo che non me la tiri dietro!
non sapevo cosa metterci e gli ho messo una descrizione della ricorsione di Stirling una descrizione mooolto breve della sequenza del programmino!
..... e speriamo bene!!:talking:
mi sa che l'orale non sarà proprio una passeggiatina....... |
^Belzebu^ |
Originally posted by Guinan
ehm, ehm, io la documentazione gliel'ho mandata.....
...spero solo che non me la tiri dietro!
non sapevo cosa metterci e gli ho messo una descrizione della ricorsione di Stirling una descrizione mooolto breve della sequenza del programmino!
..... e speriamo bene!!:talking:
mi sa che l'orale non sarà proprio una passeggiatina.......
io ancora non l'ho finito.
spero tra oggi e domani di finirlo.
curiosita': piu' o meno quante righe di codice avete scritto? :?
giusto per capire se sono sintetico o dispersivo :D :D
ByezAll
^Belzebu^ |
mark |
Originally posted by Guinan
ehm, ehm, io la documentazione gliel'ho mandata.....
...spero solo che non me la tiri dietro!
non sapevo cosa metterci e gli ho messo una descrizione della ricorsione di Stirling una descrizione mooolto breve della sequenza del programmino!
..... e speriamo bene!!:talking:
mi sa che l'orale non sarà proprio una passeggiatina.......
ah bene, punti al 30 eh ???? :D |
T_M_P |
Originally posted by ^Belzebu^
io ancora non l'ho finito.
spero tra oggi e domani di finirlo.
curiosita': piu' o meno quante righe di codice avete scritto? :?
giusto per capire se sono sintetico o dispersivo :D :D
ByezAll
^Belzebu^
io un centinaio.... |
T_M_P |
mmmmhhhh.... Ho riscontrato qualche errore nel programma....
Con numeri i primi 10 numeri (e anche alcuni oltre) tutto ok, è con numeri superiori che si incasina... Per esempio con 21 e 5. Il problema è che mi si incasina anche scrivendolo in C o Java... Secondo voi è giusto questo codice?
public main ()
{
stirling(n,k);
}
int stirling(int n, int k)
{
if (n == 1 && k>1)
{
return 0;
}
if (k == 1 && n >= 1)
{
return 1;
}
return stirling(n-1,k-1)+k*stirling(n-1,k);
}
:? |
T_M_P |
Originally posted by T_M_P
mmmmhhhh.... Ho riscontrato qualche errore nel programma....
Con numeri i primi 10 numeri (e anche alcuni oltre) tutto ok, è con numeri superiori che si incasina... Per esempio con 21 e 5. Il problema è che mi si incasina anche scrivendolo in C o Java... Secondo voi è giusto questo codice?
public main ()
{
stirling(n,k);
}
int stirling(int n, int k)
{
if (n == 1 && k>1)
{
return 0;
}
if (k == 1 && n >= 1)
{
return 1;
}
return stirling(n-1,k-1)+k*stirling(n-1,k);
}
:?
Non è che va in overflow???? |
Guinan |
:-D :-D :-D certo che si incasina!
con 21 e 5 va in overflow, :climb: povera bestia!
...tranquillo!
il prof Massa mi ha detto che va bene se arriva a n=10 e k = 5
:bubble: |
T_M_P |
Consegnato!
Certo che non sapere se l'ha ricevuto è sempre brutto.... |
yoruno |
Originally posted by T_M_P
Certo che non sapere se l'ha ricevuto è sempre brutto.... io ho chiesto la Read Receipt dalla mail... mi è arrivata :)Originally posted by T_M_P
Anche io ho commentato ogni riga... Anche perchè sennò non ci capivo nulla neppure io! :P |
T_M_P |
Su libero c'è solo la Deliver Receipt.... E quella è arrivata.. Speriamo!!! :) |
yoruno |
Originally posted by T_M_P
Su libero c'è solo la Deliver Receipt.... E quella è arrivata.. Speriamo!!! :) Off-Topic: Io ho usato la mail dell'Università dal sito, in cui ci sono sia la Deliver che la Read... |
Guinan |
beeeeeeeeeeeeeestia , gente, che stresss :climb:
...comunque il prof. Marra vi risponderà se lo ha ricevuto ( a me ha risposto!)
......se lo passiamo........:lode::lode::lode::lode::lode:
pregate, gente, pregate (anche per me...) |
yoruno |
Intervento del moderatore: Ho diviso il thread: uno è questo sul progetto, l'altro è solo riguardo all'orale, così teniamo le due cose staccate per bene ;) |
T_M_P |
A me non ha ancora risposto Marra... Gliel'ho anche rimandato..
Boh!!!! |
yoruno |
Neanche a me ha risposto... :look: ...però penso che ci metta un po' per correggerlo... |
T_M_P |
Originally posted by yoruno
Neanche a me ha risposto... :look: ...però penso che ci metta un po' per correggerlo...
Si, ma poteva anche dire:
"E' arrivato"....
No? |
mark |
inviategli una email per sapere se gli è arrivato e non fatevi problemi ;) |
T_M_P |
Originally posted by mark
inviategli una email per sapere se gli è arrivato e non fatevi problemi ;)
Fatto, ma non ha risposto lo stesso..:? |
Guinan |
il prof Marra ha anche un numero di telefono:
02503.16330 (magari domattina)
....sarà sepolto sotto la marea di progettini .... |
mark |
vi è arrivata l'email di Marra di conferma di avvenuta ricezione del progettino ? |
T_M_P |
yes!!
Grande Marra... |
mark |
si sa nulla di Marra e del progettino ? |
yoruno |
Nada, mi sa che Marra è ancora malato... |
Guinan |
...secondo voi, se quando torna gli telefono per chiedergli come si svolge la sua parte d'esame:
1) mi manda al diavolo
2) mi dice che fa delle domande
3) mi dice che non fa delle domande
4) decide di fare delle domande visto che gli ho messo in testa l'ìdea?
..... o è meglio che non gli telefono?...
:? :pensa:
... si accettano scommesse.....
:whisper: |
mark |
Originally posted by Guinan
...secondo voi, se quando torna gli telefono per chiedergli come si svolge la sua parte d'esame:
1) mi manda al diavolo
2) mi dice che fa delle domande
3) mi dice che non fa delle domande
4) decide di fare delle domande visto che gli ho messo in testa l'ìdea?
..... o è meglio che non gli telefono?...
:? :pensa:
... si accettano scommesse.....
:whisper:
la 4
stiamo zitti e bbooniiiiii...... |
yoruno |
Io gli telefonerò e gli chiedo: "Scusi, quando posso venire per registrare il voto"... e nulla più... ;) |
mark |
Originally posted by yoruno
Io gli telefonerò e gli chiedo: "Scusi, quando posso venire per registrare il voto"... e nulla più... ;)
facci sapere se funziona :) |
yoruno |
Beh, oggi era comunque ancora malato, forse torna domani... :) |
mark |
questa attesa è snervante..... |
yoruno |
Bah, sinceramente una volta eliminato l'orale del progetto mi interessa ben poco... sono tranquillissimo... |
yoruno |
Marra ha mandato una mail a tutti avvisando che entro stasera ci saranno nella nostra cara mail i risultati del progetto con in cc D'Antona e le indicazioni per registrare... Ora basta solo attendere... |
Guinan |
arrivato!
evvai un bel 28! (non ci posso credere) :banana: |
T_M_P |
Originally posted by Guinan
arrivato!
evvai un bel 28! (non ci posso credere) :banana:
27...
Questo esame continua a rivelare notizie negative.. Insomma, non è che faccia schifo, però pensavo meglio..
Sono proprio curioso di sapere cosa ho sbagliato...
Ciauz! |
yoruno |
Originally posted by Guinan
evvai un bel 28! (non ci posso credere) :banana: Anche io! :D :D :D |
^Belzebu^ |
Originally posted by yoruno
Anche io! :D :D :D
eccheiono!??!?!?! :D :-D :D :-D :D |
^Belzebu^ |
voi andate lunedi' a registrare l'esame?
io ieri, dopo aver ricevuto la mail di Marra, ho mandato una mail a D'Antona per chiedergli se e' possibile, ma non ho ricevuto risposta finora.
ByezAll
^Belzebu^ |
yoruno |
Originally posted by ^Belzebu^
voi andate lunedi' a registrare l'esame?
io ieri, dopo aver ricevuto la mail di Marra, ho mandato una mail a D'Antona per chiedergli se e' possibile, ma non ho ricevuto risposta finora. Ho fatto anche io lo stesso, aspetto che il prof risponda.... |
yoruno |
Originally posted by yoruno
Ho fatto anche io lo stesso, aspetto che il prof risponda.... Risposto :)
Io vado lunedì pomeriggio!
:ola: |
yoruno |
Originally posted by yoruno
Risposto :)
Io vado lunedì pomeriggio!
:ola: Fatto :)
Un esame in più sul libretto ;) |
yoruno |
Essendo ormai giunto il termine di consegna del progetto vi propongo il mio (è stato un 28...) :)code: #-----------------------------------------------------------------------------#
# Stirling
#
# Programma sviluppato con MIPSter 1.04, PCSpim 1.0, SPIM 6.5 su Windows 2000
# Il programma calcola la ricorrenza dei numeri di Stirling di seconda specie
#-----------------------------------------------------------------------------#
.data
#-----------------------------------------------------------------------------#
# Stringhe di testo utilizzate dal programma.
#-----------------------------------------------------------------------------#
ask_n:
.asciiz "\nInserisci n per S(n,k): "
ask_k:
.asciiz "\nInserisci k per S(n,k): "
risultato_a:
.asciiz "\nS("
risultato_b:
.asciiz ","
risultato_c:
.asciiz ") e' uguale a "
.text
.globl main
#-----------------------------------------------------------------------------#
# Corpo main del programma.
#-----------------------------------------------------------------------------#
main:
la $a0, ask_n # Richiesta del valore n di S(n,k)
li $v0, 4
syscall
li $v0, 5 # Memorizzazione del valore n in $t1
syscall # ($t1 utilizzato per la visualizzazione finale)
move $t1, $v0
la $a0, ask_k # Richiesta del valore n di S(n,k)
li $v0, 4
syscall
li $v0, 5 # Memorizzazione del valore k in $a1 e $t2
syscall # ($t2 utilizzato per la visualizzazione finale)
move $a1, $v0 # ($a1 utilizzato per il calcolo di S(n,k)
move $t2, $v0
move $a0, $t1 # Memorizzazione del valore n in $a0 per S(n,k)
jal Stirling # Chiamata della procedura di calcolo di S(n,k)
move $t0, $v0 # Memorizzazione di S(n,k) in $t0 (temporaneo)
#-----------------------------------------------------------------------------#
# Visualizzazione del risultato finale della computazione. #
# ( es.: S(5,2) è uguale a 15 ) #
#-----------------------------------------------------------------------------#
la $a0, risultato_a # Visualizzazione della stringa "S("
li $v0, 4
syscall
move $a0, $t1 # Visualizzazione di n inserito inizialmente
li $v0, 1
syscall
li $v0, 4 # Visualizzazione della stringa ","
la $a0, risultato_b
syscall
move $a0, $t2 # Visualizzazione di k inserito inizialmente
li $v0, 1
syscall
li $v0, 4 # Visualizzazione della stringa ") e' uguale a "
la $a0, risultato_c
syscall
move $a0, $t0 # Stampa del valore di S(n,k) calcolato
li $v0, 1
syscall
li $v0, 10 # Uscita dal programma
syscall
#-----------------------------------------------------------------------------#
# Calcolo di S(n,k) = S(n-1,k-1) + kS(n-1,k) tramite ricorsione.
#-----------------------------------------------------------------------------#
Stirling:
subu $sp, $sp, 20 # Allocazione dello stack
sw $ra, 16($sp) # Memorizzazione del return address
sw $s0, 4($sp)
move $s0, $a0 # Memorizzazione di n in $s0
sw $s1, 8($sp)
move $s1, $a1 # Memorizzazione di k in $s1
sw $s2, 12($sp)
#-----------------------------------------------------------------------------#
# Test di controllo dei valori di n e k.
#
# Viene considerato che S(n,k) risulta essere:
#
# S(n,k) = 1 se n = k oppure n > 1 e k = 1.
# S(n,k) = 0 se k > n.
#
# In tutti gli altri casi S(n,k) = S(n-1,k-1) + kS(n-1,k).
#
# Viene inoltre controllato che sia n, k > 0.
#-----------------------------------------------------------------------------#
beq $s0, $zero, zero # Controllo di correttezza dei valori
beq $s1, $zero, zero # Se n,k = 0 allora S(n,k) = 0
beq $s1, $s0, uno # Se k = n allora S(n,k) = 1
beq $s1, 1, k_equal_1 # Se k = 1 allora controlla se n > 1
bgt $s1, $s0, zero # Se k > n allora S(n,k) = 0
j end_check # In tutti gli altri casi fine controllo valori
k_equal_1: # Se k = 1
bgeu $s0, 1, uno # controlla se n > 1 e quindi S(n,k) = 1
j end_check # altrimenti fine del controllo dei valori
uno: # Se k = n oppure k = 1, n > 1
li $v0, 1 # allora S(n,k) = 1
j snk # e salta alla visualizzazione del valore finale
zero: # Se n = 0 oppure k = 0 oppure k > n
li $v0, 0 # allora S(n,k) = 0
j snk # e salta alla visualizzazione del valore finale
#-----------------------------------------------------------------------------#
# Vengono decrementati i valori di n e k secondo la formula di Stirling e si
# procede alla ricorsione di S(n-1,k-1) e kS(n-1,k)
#-----------------------------------------------------------------------------#
end_check:
addu $a0, $s0, -1 # Memorizza n = n - 1 in $a0
addu $a1,$s1,-1 # Memorizza k = k - 1 in $a1
jal Stirling # Chiamata della procedura per S(n-1,k-1)
move $s2,$v0 # Memorizza il risultato di S(n-1,k-1) in $s2
addu $a0,$s0,-1 # Memorizza n = n - 1 in $a0
move $a1,$s1 # Memorizza k in $a1
jal Stirling # Chiamata della procedura per S(n-1,k)
mul $v0,$v0,$a1 # Memorizza il risultato di kS(n-1,k) in $v0
addu $v0,$v0,$s2 # Memorizza S(n-1,k-1) + kS(n-1,k) in $v0
#-----------------------------------------------------------------------------#
# Ripristino dei valori dallo stack.
#-----------------------------------------------------------------------------#
snk:
lw $ra, 16($sp) # Ripristino del return address in $ra
lw $s0, 4($sp) # Ripristino di n in $s0
lw $s1, 8($sp) # Ripristino di k in $s1
lw $s2, 12($sp) # Ripristino di S(n,k) in $s2
addu $sp, $sp, 20 # Deallocazione dello stack
jr $ra # Ritorno al chiamante
#-----------------------------------------------------------------------------#
# FINE DEL PROGRAMMA
#-----------------------------------------------------------------------------#
|
|
|
|
|