Forum by laureateci.it
[ Home | REGOLE FORUM | Tutti i blog | Profilo | Registrati | CHAT | Discussioni Attive | Discussioni Recenti | Segnalibro | Msg privati | Sondaggi Attivi | Utenti | Download Informatica | Download ICD | Download TPS | Download Magistrale | Download Specialistica | Giochi | Cerca nel web | cerca | faq | RSS ]
Nome Utente:
Password:
Salva Password
Password Dimenticata?

 Tutti i Forum
 ITPS - Secondo Anno
 Algoritmi e Strutture Dati + Lab.
 Dubbio specifiche algebriche di Pila
 Nuova Discussione  Nuovo Sondaggio Nuovo Sondaggio
 Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
I seguenti utenti stanno leggendo questo Forum Qui c'è:
Autore Discussione Precedente Discussione Discussione Successiva  

hunter32
Utente giovane



Inserito il - 14/01/2011 : 13:32:39  Mostra Profilo  Visita l'Homepage di hunter32 Invia a hunter32 un Messaggio Privato  Rispondi Quotando
Vorrei sapere se le seguenti specifiche algebriche di Pila sono corrette o no.
Le relative specifiche sintattiche si trovano a pag.3 del pdf che trovate al link:
http://www.di.uniba.it/~malerba/courses/asd/2010-11/stack-queue.pdf


declare s, s':stack; i:item

+--------------+-----------------------------------------------------------+
| osservazioni | costruttore di s'                                         |
+--------------+-----------------------------------------------------------+
|              | newstack | push(s, i)                                     |
+--------------+----------+------------------------------------------------+
| isnew(s')    | TRUE     | FALSE                                          |
| top(s')      | ERROR    | if isnew(s) then i else top(s)                 |
| pop(s')      | ERROR    | if isnew(s) then newstack else push(pop(s), i) |
+--------------+----------+------------------------------------------------+


Grazie.

pier_IP
Utente giovane


Regione: Puglia
Prov.: Bari
Città: Triggiano


Inserito il - 14/01/2011 : 15:27:08  Mostra Profilo  Visita l'Homepage di pier_IP Invia a pier_IP un Messaggio Privato  Rispondi Quotando
La soluzione e' sulle slide stesse:

pop(push(stk, i)) = stk
top(push(stk, i)) = i
isnew(newstack) = true
isnew(push(stk, i)) = false

top(newstack) = error
pop(newstack) = error


Che riportata in tabella e':


+--------------+------------------------------+
| osservazioni | costruttore di s'            |
+--------------+------------------------------+
|              | newstack | push(s, i)        |
+--------------+----------+-------------------+
| isnew(s')    | TRUE     | FALSE             |
| top(s')      | ERROR    | i                 |
| pop(s')      | ERROR    | s                 |
+--------------+----------+-------------------+


Aiuto Ubuntu per neofiti
http://piersprogramming.blogspot.com

Modificato da - pier_IP in data 14/01/2011 15:37:13
Torna all'inizio della Pagina

hunter32
Utente giovane



Inserito il - 14/01/2011 : 16:09:14  Mostra Profilo  Visita l'Homepage di hunter32 Invia a hunter32 un Messaggio Privato  Rispondi Quotando
Quello che ho scritto dovrebbe essere errato perché sulle slide c'è scritta, come giustamente hai riportato, un'altra cosa.
Ho lasciato "dovrebbe" perché nello stesso pdf, ma a pag.14, ci sono le specifiche di Coda che riporto in basso:


declare q, q':queue; i:item

+--------------+-----------------------------------------------------------+
| osservazioni | costruttore di q'                                         |
+--------------+-----------------------------------------------------------+
|              | newq     | addq(q, i)                                     |
+--------------+----------+------------------------------------------------+
| isnew(q')    | TRUE     | FALSE                                          |
| frontq(q')   | ERROR    | if isnew(q) then i else frontq(q)              |
| deleteq(q')  | ERROR    | if isnew(q) then newq else addq(deleteq(q), i) |
+--------------+----------+------------------------------------------------+


In pratica, la differenza consiste nell'aggiunta di un controllo su q (immagino), ma perché in Coda dovrebbe essere inserito e in Pila no?
Torna all'inizio della Pagina

SD83
Utente assiduo


Regione: Puglia
Prov.: Foggia


Inserito il - 14/01/2011 : 17:07:53  Mostra Profilo  Visita l'Homepage di SD83 Invia a SD83 un Messaggio Privato  Rispondi Quotando
if isnew(s) then i else top(s)
if isnew(s) then newstack else push(pop(s), i)
non hanno senso perché nella pila in ogni caso top(push(s, i)) è i e pop(push(s, i)) è la pila che avevi prima del push

es. hai una pila s = 1 2 3 4 se fai push 5 hai 1 2 3 4 5 se fai pop hai di nuovo s = 1 2 3 4
nella coda no coda q = 1 2 3 4 add 5 hai 1 2 3 4 5 se delete hai 2 3 4 5 che non è la stessa q

Modificato da - SD83 in data 14/01/2011 17:08:50
Torna all'inizio della Pagina

pier_IP
Utente giovane


Regione: Puglia
Prov.: Bari
Città: Triggiano


Inserito il - 14/01/2011 : 17:10:56  Mostra Profilo  Visita l'Homepage di pier_IP Invia a pier_IP un Messaggio Privato  Rispondi Quotando
Le politiche di coda e pila sono diverse.

PILA

push(s, i) = s'       L'oggetto viene inserito al primo posto shiftando tutti gli altri
pop(s) = s'           Elimina il primo elemento dalla pila
top(s)=i              Restituisce(senza modificare la pila) il primo elemento della pila

pop( push(s,i) ) = s      La pop elimina il primo elemento della pila, cioè quello che è stato appena inserito!
top( push(s,i) ) = i      La top restituisce il primo elemento della pila, cioè quello che è stato appena inserito!
Quindi e' inutile chiedersi se s e' vuoto o no!




CODA

addq(q, i) = q'       L'oggetto viene inserito in ultima posizione, cioe' viene accodato alla coda
deleteq(q) = q'       Viene eliminato l'elemento in prima posizione
frontq(q) = i         Viene restituito l'elemento in prima posizione
isnewq(q) = b         Predica se la coda e' vuota

Se la q e' vuota allora q' avra' solo l'elemento i, altrimenti si evoca frontq su q
frontq( addq(q,i) ) = if isnewq(q) then i else frontq(q)

Se la q e' vuota allora q' avra' solo l'elemento i quindi deleteq cancellera' l'unico elemento, altrimenti bisogna rimuovere il primo elemento di q ed aggiugerli i
deleteq( addq(q,i) ) = if isnew(q) then newq else addq(deleteq(q), i)       

Spero di essere stato chiaro....

Aiuto Ubuntu per neofiti
http://piersprogramming.blogspot.com
Torna all'inizio della Pagina

hunter32
Utente giovane



Inserito il - 14/01/2011 : 17:54:37  Mostra Profilo  Visita l'Homepage di hunter32 Invia a hunter32 un Messaggio Privato  Rispondi Quotando
Grazie a tutti!
Torna all'inizio della Pagina
  Discussione Precedente Discussione Discussione Successiva  
 Nuova Discussione  Nuovo Sondaggio Nuovo Sondaggio
 Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
Vai a:
Forum by laureateci.it © 2002 - 2012 Laureateci Communications Torna all'inizio della Pagina
Il DB ha risposto in 0,19 secondi.

TargatoNA.it | SuperDeejay.Net | Antidoto.org | Brutto.it | Equiweb.it | Snitz Forum 2000