Newsgroup: it.comp.lang.pascal
Titolo: Code by Stack

Devo realizzare una struttura coda tramite due stack... una cosa semplice 
semplice.. ma onestamente non ricordo come i due stack devono essere 
dimensionati, so che non devono avere la stessa dimensione ma...
Chi mi da una mano ?
ReDiCuori
-- 
-- 
L'uomo non sa perchè si innamora, l'uomo viene travolto e basta
---------------------------------------------------------
www.giordanoemilio.altervista.org
---------------------------------------------------------
www.securitygroup.it
Società di servizio che opera nel campo
della sicurezza aziendale
---------------------------------------------------------
www.pascallike.too.it
http://utenti.lycos.it/pascallike
il sito sulla programmazione pascal
sorgenti, tutorial ed utility
------------------------------------------------------------
www.treves-srl.com
Libreria Internazionale Treves
Via Toledo 249/250 Napoli
------------------------------------------------------------
www.alphalibri.com
Vendita ingrosso di libri
Via S.Anna dei Lombardi 10 , Napoli
------------------------------------------------------- 

Dimenticavo il tutto con strutture statiche (Array)
-- 
-- 
L'uomo non sa perchè si innamora, l'uomo viene travolto e basta
---------------------------------------------------------
www.giordanoemilio.altervista.org
---------------------------------------------------------
www.securitygroup.it
Società di servizio che opera nel campo
della sicurezza aziendale
---------------------------------------------------------
www.pascallike.too.it
http://utenti.lycos.it/pascallike
il sito sulla programmazione pascal
sorgenti, tutorial ed utility
------------------------------------------------------------
www.treves-srl.com
Libreria Internazionale Treves
Via Toledo 249/250 Napoli
------------------------------------------------------------
www.alphalibri.com
Vendita ingrosso di libri
Via S.Anna dei Lombardi 10 , Napoli
-------------------------------------------------------
"ReDiCuori" <redicu...@NOSPAMlibero.it> ha scritto nel messaggio 
news:WOz6e.44056$Of5....@nntpserver.swip.net...


ciao Re di cuori....
allora.. cosi da come lo scrivi.. sembra che all'interno di un tuo programma 
di debba gestire due strutture di tipo stack... non è chiarissimo..
lo stack.. è un LIFO.. un tubo chiuso dove metti dentro da un lato e prendi 
sempre da quello...
l'array ... è perfetto... anche se .. la sua morte potrebbe essere un 
oggetto.. con i sue metodi... di push e pop ...
torniamo a noi.. allora... LIFO -> LAST IN FIRST OUT.. ultimo ad entrare è 
il primo a uscire...
se cerchi on line il manuale di Java... "JAVA mattone dopo mattone" c'è 
tutta la teoria..e la realizzazione come oggetto.. è molto carino.. visto 
che ne devi realizzare.. 2 ....potrebbe fare sempre al tuo caso...
comunque se lo vuoi fare in modo procedurale... la cosa è banale...
crei il tuo array di ... byte, word, bla bla bla... quello che preferisci...
per ogni array ti gestisci una variabile che è il puntatore al record 
corrente, diciamo che all'inizio vale 0.
quando devi inserire un valore, incrementi di 1 il puntatore all'array e 
inserisci nella posizione mio_array[puntatore_array] il valore che devi 
inserire..
quando devi leggerlo... al contrario.. 
mia_variabile:=mio_array[puntarore_array]  e poi decrementi il puntaore di 
array..
occhio a gestirti i limiti minimi e massimi...
comunque .. cerca quell'esempio... perchè è chiaro e semplice..  e potrebbe 
aiutarti molto ad entrare nel mondo della programmazione ad oggetti...
Dasvidania
m@
"ReDiCuori" <redicu...@NOSPAMlibero.it> ha scritto nel messaggio 
news:eTz6e.44060$Of5....@nntpserver.swip.net...


 ha scritto nel messaggio 
news:G%A6e.44112$Of5....@nntpserver.swip.net...


 dati ecc. Ripeto farlo dinamico è molto meglio... 

 dalla coda.
Scusa la domanda banale... ma


 ricordo la proporzione. 
uh, io l'implementazione della coda con due stack non l'ho mai vista :\
per uno stack userei UN array, piu' un indice per la posizione raggiunta,
ma due non so' proprio...
-- 
Dreadnaut - 
http://dreadnaut.servebeer.com/
(Life would be easier if I had the source code)

 
quello che dico anch'io.... non capisco perchč 2...

Mmmm...
Allora realizzare una coda di 100 elementi dati due stack definiti tramite 
un array
uno stack lo si una per togliere dalla coda uno per aggiungere
Head 1 2 3 4
                  ^
Tail  34 12 13
                   ^
Se devo prelevare effettuo un pop su Head se devo aggiungere effetto un push 
su Tail (lo so è na cosa idiota ma se DEVI DEVI) quando Head è vuoto riverso 
Tail in Head e continuo ad operare.
Ora se la coda è di 100 elementi in che modo dimensiono gli array in modo da 
non avere sprechi di spazio ? (gli array di pari dimensioni sono la risposta 
errata)
Inoltre le varie prove che ho fatto, dim(H)=dim(T) dim(H)<dim(T) in tutte le 
salse possibili, mi possono portare ad una situazione del genere (almeno 
teoricamente)
Head ha 4 elementi e n caselle vuote
Tail è pieno
Devo inserire un elemento come lo inserisco in modo da rispettare il 
principio di FIFO


 errata)
Se dicessi che non ne ho la + pallida diea perderei punti all'interno di 
questo NG?
Dread ti lascio la palla :D

 [snip]
oddio, ho capito. Brrrrrr, e' il modulo di Seghe Mentali Avanzate II ?
Da come lo vedo le primitive della tua coda dovrebbero essere:
- Insert(x)
 push(tail, x)
- Get()
 if (empty(head))
   while !empty(tail)
     push( head, pop(tail) )
 return pop( head )
queste dovrebbero mantenere il fifo.  se provi a non spostare -tutti- i 
valori da uno stack all'altro rischi di sbagasciare l'ordine.
Per quanto riguarda le dimensioni, non saprei.  Mi viene in mente:
- faccio 100 push e riempio tail -> tail dovrebbe essere grosso 100 se
  lo faccio piu' piccolo e provo a spostare un po' di roba in head,
  l'ordine esplode! esempio:
T> 1 2 3 4 5 6 7 8 9 10
H>
muovo i primi 5, posso farlo solo con le operazioni push e pop ricorda
T> 1 2 3 4 5
H> 10 9 8 7 6
casino, perche' io vorrei che la prima get mi recuperasse 1 e non 6... 
se inserisco degli altri valori, panico:
T> 1 2 3 4 5 11 12 13 14 15
H> 10 9 8 7 6
aaargh, come li rimetto in ordine adesso ?
T> 1 2 3 4 5 
H> 10 9 8 7 6 15 14 13 12 11
pazzia, no, non si puo'.  quindi devo spostare tutti per recuperarlo!
T> 11 12 13 14 15
H> 10 9 8 7 6 5 4 3 2 1
e quindi a questo punto anche H deve essere 100...
Questo se i due stack sono scatole nere. Ovvio che se ci posso mettere 
le mani dentro e girare qualcosa o se ho una terza struttura di appoggio 
allora si puo' fare di meglio, ma con le scatole nere direi di no.
Adesso ho trovato questa implementazione in giro
http://www.cs.cornell.edu/courses/cs312/2005sp/lectures/rec07.html
in cui "invertono" e "scambiano" gli stack se Head e' vuoto, ma equivale 
alla mia versione in cui pop-pusho tutto.  Pero' loro banfoni delle 
dimensioni degli stack se ne fregano...
Forse, idea dell'ultimo momento perche' ho sonno, posso fare 50 e 50:
se riempio T, sposto in H
T> 1 2 3 4 5
H>
T>
H> 5 4 3 2 1
T> 6 7 8 9 10
H> 5 4 3 2 1
e allora funziona... se pero' faccio insert e get in ordine sparso non 
so'... proviamo 
-> insert 1 2 3 4 5 6 7 8 get get get insert 9 10 11 12 13
T> 1 2 3 4 5 
H> 
T pieno, sposto e poi inserisco gli altri numeri
T> 6 7 8
H> 5 4 3 2 1
poi tre get
T> 6 7 8
H> 5 4
poi le altre insert
T> 6 7 8 9 10
H> 5 4
T e' pieno, ed ecco che tutto si incasina di nuovo:  se sposto, mi 
ritrovo un 10 davanti al 4, che e' male.  no...  Adesso ho molto sonno, 
ma sono in dubbio fra "qualcosa si puo' fare, forse" e "no no no"...
Ci penso :)
saluti


 ha scritto nel messaggio 
news:Xns963735659944ether@casa...


 la coda è ha detto una...
spe' spe', cos'era sbagliato?  racconta :)


> la coda č ha detto una...


 Mi ha fatto perdere 4 gg per 10 minuti di codice !
E la mia preziosa banda dove la metti?