Homepage  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


.dsy:it. .dsy:it. Archive > Didattica > Corsi A - F > Architettura degli elaboratori e delle reti
 
[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

yoruno
E' scritto sul sito: http://homes.dico.unimi.it/~dantona/

luca71
grazie:)

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 ?

yoruno
Yes! :D

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 #-----------------------------------------------------------------------------#

Powered by: vbHome (lite) v4.1 and vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento |Licenze | Thanks | Syndacate