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 > Algoritmi e strutture dati
Pages: 1 [2] 3 4 
[Algoritmi] Progetto "CONTROLLO REMOTO"
Clicca QUI per vedere il messaggio nel forum
Teju
Originally posted by Ariok
X teju

In questo punto non manca una parte dopo il printf? non dovresti anche specificare a che variabili fanno riferimento i vari %d %d %c ecc?
case 'a':
scanf("%d%d%d%d", &a, &b, &c, &d);
printf("crea automa: %d %d %c %d\n");<--- intendo qui

Si, hai ragione, mi ero scordato di dire che mi ero accorto dell'errore! :D

Però rimane il dubbio amletico su come leggere i nomi degli automi nuovi!!!
Ditemi per favore dove trovo i famosi esercizi svolti di cui parla il prof!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! :(

Ariok
Originally posted by Teju

Ditemi per favore dove trovo i famosi esercizi svolti di cui parla il prof!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! :(


:clap: :clap: :clap: :clap: :clap: :clap: :clap: :clap: :clap: :clap: :clap:

LoneWolf
All'indirizzo http://homes.dsi.unimi.it/~fiorenti.../lucidi08_4.pdf pagina 5 c'e' un esempio che dovrebbe proprio fare al caso nostro; peccato che se copiate il codice paro paro il compilatore vi spara fuori un bell'errorone.
Infatti, nella dichiarazione dell'array fra le due quadre non c'e' alcun numero, mentre il compilatore si aspetta il numero massimo di elementi. :|

Skilotto83
Originally posted by Ariok
Per chi non fosse ancora sicuro se dare o no il progetto:

Trubian ha confermato che lo scritto dello scorso anno universitario rimarra valido per altri due appelli.

io ci provo comunque anceh se mi sa che mi mancano un po' di nozioni


sikuro??
Ci hai parlato tu???
A me aveva mandato una mail...e diceva proprio cosi'..

Jacoposki
oh che strano un programma di fiorentini che non funziona... :D

vabè, comunque per chi sta seguendo Algoritmi con Torelli/Fiorentini: questo progetto non è per noi, il nostro uscirà l'8 febbraio con orale ai primi di marzo.

Ariok
Originally posted by Skilotto83
sikuro??
Ci hai parlato tu???
A me aveva mandato una mail...e diceva proprio cosi'..


Sicuro 100%

Questa e' la sua risposta

Lo scritto rimane valido ancora per un paio di appelli (oltre a questo).
Cordialmente,
M.T.

mitnik
Ciao a tutti, come vi procede il lavoro?

avete trovato il modo per memorizzare una stringa di lunghezza indefinita? o meglio qual è il modo più efficiente

Dante
Originally posted by mitnik
Ciao a tutti, come vi procede il lavoro?

avete trovato il modo per memorizzare una stringa di lunghezza indefinita? o meglio qual è il modo più efficiente



Se definisci un puntatore a char così:

char ch,d, *n;

e lo leggi così:

scanf ( "%d%d %c %s", &x,&y,&d,n);

e lo stampi così:

printf("\nx= %d, y= %d, d= %c, n= %s", x, y, d, n);


funziona... poi non so ancora se per il progetto sia la soluzione migliore cmq... funziona...

p2p
secondo me basta leggere carattere per carattere il nome,una volta che si termina di leggere si sa quanto è grossa la stringa e quindi la si memorizza normalmente in un array.
Ieri sono andato a lezione dal prof. Fiorentini e proprio lui mi ha detto che basta fare cosi; NON ha parlato pero' di array, mi ha solo detto che basta leggere carattere per carattere e che una volta che si conoscono le dimensioni allocare e memorizzare... pero' l array a quel punto si puo' usare secondo me, anche perchè il C non permette di creare qualcosa di cui non si conoscano le dimensioni...
Inoltre parlando con lui, diceva che gli studenti si fissano ad usare troppe liste,che sono inefficienti,invece gli alberi binari di ricerca sono molto meglio(soprattutto per il discorso prefissi), io infatti usero un albero per gli automi in cui ogni nodo è in realta' un puntatore ad una struttura dati che contiene i dati satellite necessari.
Altra cosa: ha detto che normalmente è difficile che si riesca ad ottenere che tutte le funzioni siano efficienti,ad esempio se devo fare una ricerca su un dato dell' albero che non è chiave ma dato satellite, mi dovro' scorrere tutto l' albero come se fosse una lista(ovv. ineficiente) pero' mi ha fatto trapelare l' idea che andrebbe bene lo stesso ai fini del progetto... certo se si riesce ad ottimizzare tutto è molto meglio.

PS. Se qualcuno potesse andare a lezione dal prof. Aguzzoli e chiedergli qualche dritta...io ho gia' dato e tra l' altro oggi non posso andare.

LoneWolf
Originally posted by p2p
secondo me basta leggere carattere per carattere il nome,una volta che si termina di leggere si sa quanto è grossa la stringa e quindi la si memorizza normalmente in un array.
Ieri sono andato a lezione dal prof. Fiorentini e proprio lui mi ha detto che basta fare cosi; NON ha parlato pero' di array, mi ha solo detto che basta leggere carattere per carattere e che una volta che si conoscono le dimensioni allocare e memorizzare... pero' l array a quel punto si puo' usare secondo me, anche perchè il C non permette di creare qualcosa di cui non si conoscano le dimensioni...

Ma secondo te, mentre leggi carattere per carattere, questi dove li vai a mettere, se non hai ancora creato l'array?

LoneWolf
Volevo aggiungere che inizialmente avevo pensato di scrivere char per char in un riga di un file, poi leggere la riga una volta che l'input da tastiera per la corrente istruzione e' finito.

Chiedendo a mio fratello mi ha detto che lui aveva fatto una lista di char.

Off-Topic:
Scusate, ho trovato la edit solo ora, altrimenti avrei editato il precedente messaggio.

p2p
Originally posted by LoneWolf
Ma secondo te, mentre leggi carattere per carattere, questi dove li vai a mettere, se non hai ancora creato l'array?
leggi la lezione 9 di Aguzzoli le ultime pagine, cè un programma di esempio che parte pa pag.26 dove "L’elenco delle parole viene memorizzato in un array di stringhe
allocato dinamicamente."
potrebbe andare no?

Teju
Originally posted by Dante
scanf ( "%d%d %c %s", &x,&y,&d,n);

e lo stampi così:

printf("\nx= %d, y= %d, d= %c, n= %s", x, y, d, n);

Ho provato, funziona.... più o meno.... nel senso che con input corti è perfetto, ma prova a inserire un numero lungo: a me si chiude male l'applicazione, da errore.... :? Perchè???????

Mi auto quoto! Ora funziona, mi sa che aveva compilato male il GCC! :D

Dante
già, caspio! è vero... cmq a me da errore quando termino il progrmamma con la f... bah... compilatori del cacchio... nn lo so... ci penso... se qlcn lo sa lo dica...

LoneWolf
Originally posted by p2p
leggi la lezione 9 di Aguzzoli le ultime pagine, cè un programma di esempio che parte pa pag.26 dove "L’elenco delle parole viene memorizzato in un array di stringhe
allocato dinamicamente."
potrebbe andare no?

Non lo so, hai provato a farlo?

Comunque gli altri hanno suggerito una soluzione che sembra funzionare.

LoneWolf
Se siete in Silab e volete fare due chiacchiere sul progetto, io e Teju siamo in SILAB, vicino all'aula Delta, nell'angolo verso il cortile interno.
Ci riconoscete vedendo i manuali di C tutt'attorno.

joe.satriani
scusate ragazzi, ma per fare l'appello di torelli non è indispensabile fare lo scritto, vero?

andrea
No, con Torelli no.

luca8684
Col torelli c'è solo l'orale dopo il progetto!!

Originally posted by joe.satriani
scusate ragazzi, ma per fare l'appello di torelli non è indispensabile fare lo scritto, vero?

andrea
ciao ragazzi,
ho scritto anche io a Fiorentini per chiedergli se la stringa dell'automa poteva essere limitata da una dimensione massima. Questa è la risposta:
...
La specifica dice che il nome e' una sequenza finita.

La frase ha un'unica interpretazione, ossia (come e' poi scritto
esplicitamente) il nome e' una sequenza di 0 e di 1
di lunghezza n>=1 non definita a priori
...

A questo punto mi pare chiaro che non si può usare la scanf con array. Credo proprio che le stringhe vadano gestite con la getchar.

Teju
Originally posted by andrea
Credo proprio che le stringhe vadano gestite con la getchar.

Ok, lì ci siamo: dunque van salvate in una lista di char i vari caratteri del nome... oppure no?

andrea
Sì, credo proprio che l'unica strada sia questa. Anche se diventa veramente tutto molto macchinoso.

p2p
Originally posted by Teju
Ok, lì ci siamo: dunque van salvate in una lista di char i vari caratteri del nome... oppure no?
scsate se mi ripeto, ma sopra avevo detto che lo stesso Fiorentini mi ha detto di leggere carattere per carattere e che una volta finito sappiamo la dimensione per memorizzare il nome....
quindi secondo me come l esempio che avevo riportato prima, cioe' alloco tot spazio e continuo a leggere se vedo che non mi basta uso un realloc(), alla fine sapro' quanto spazio mi serve per aggiungere sto automa allastruttura che uso...
almeno credo, adesso vado a lezione,stasera lo provo e vi faccio sapere
ciao

mitnik
io provo così: leggo l'input e il nome dell'automa lo metto in un array tipo:

char nome[N]; con N che indica la massima lunghezza che può avere il nome; lo so che non è definita però è finita quindi N lo si può porre anche molto grande.

poi uso strlen e strcpy per sapere la lunghezza del nome e allocare quindi lo spaxio necessario ad un array di char che contiene il nome dell'automa.

Teju
Originally posted by p2p
realloc()

Cioè mi vuoi dire che se dichiaro un array di dimensione N definito, posso, tramite la realloc, aumentare lo spazio disponibile??
Come si usa questa funzione?

andrea
mitnik, credo che non possa fare come tu dici, perchè N può essere grande finchè vuoi, ma è pur sempre limitato

Freddy3
Originally posted by p2p
leggi la lezione 9 di Aguzzoli le ultime pagine, cè un programma di esempio che parte pa pag.26 dove "L’elenco delle parole viene memorizzato in un array di stringhe
allocato dinamicamente."
potrebbe andare no?



quale lezione dici? quella del 16 dicembre?

mitnik
ma scusa il testo dice: ogni automa è identificato da un nome che è una stringa finita sull'alfabeto (0,1)....
...La sorgente remota può emettere segnali rappresentati da stringhe finite del tio a,B..

allora pongo per esempio N=65536; tale valore dovrebbe essere abbastanza grande. Certo la stringa potra essere più lunga ma non infinitamente lunga. che dici?

andrea
Anche io avevo interpretato così, ho chiesto a fiorentini che mi ha risposto che non va bene. La stringa è finita, ma non c'è limite superiore. Leggi la sua mail di risposta che ho postato qualche messaggio fa.

Freddy3
ideina:-D :
se facciamo leggere la stringa e la memorizziamo in un puntatore a char (come diceva dante) e poi dichiariamo un array di dimensione di quello che è puntato da questo puntatore e ce lo copiamo dentro?

potrebbe funzionare!!! :?

andrea
Non credo, perchè con un puntatore a char puoi leggere solo un char. Come fai a capire dove finisce la stringa che hai letto?

mitnik
sia utilizzando i puntatori a char sia utilizzando altri metodi come per esempio la lettura con getchar è necessario allocare dello spazio in memoria per contenere il tutto. Per fare cio è necessario dare una dimensione finita (considerato anche che la memoria lo è). Quindi io penso di proseguire con la mia idea di allocare uno spazio in memoria di supporto per contenere la stringa; poi in base alle dimensioni di questa alloco spazio definitivo per contenere il bone dell'automa, liberando quello utilizzato come supporto. Non sarà sicuramente il metoso più corretto ma sinceramente non trovo altre soluzioni per poter esaminare una stringa di lunghezza arbitraria. Se continup a sbattere la testa su questo problema il 30 gennaio sarò qui ancora a pensare a come e dove memorizzare una cazzo di stringa.

thetheus
ciao a tutti provate a consultare questo esempio utilizza realloc()
http://programmazione.html.it/c/c_32.htm

andrea
Scusa, mitnik, ma non è più semplice se allochi lo spazio in memoria elemento per elemento della lista invece che allocare all'inizio lo spazio di una lista intera? Mi spiego: se fai un ciclo sulla getchar, ti arriva il carattere, a questo punto allochi il nodo e lo inserisci nella lista. Poi vai a leggere il carattere successivo, allochi il nodo e lo inserisci. Continui così fino a quando il carattere non è un new line.

Skilotto83
Originally posted by andrea
Scusa, mitnik, ma non è più semplice se allochi lo spazio in memoria elemento per elemento della lista invece che allocare all'inizio lo spazio di una lista intera? Mi spiego: se fai un ciclo sulla getchar, ti arriva il carattere, a questo punto allochi il nodo e lo inserisci nella lista. Poi vai a leggere il carattere successivo, allochi il nodo e lo inserisci. Continui così fino a quando il carattere non è un new line.

infatti sekondo me questo è il metodo corretto..
essendo in un while è potenzialmente infinita la stringa...

mitnik
ok questo modo è giustissimo però cio vuol dire che utilizzi una lista per contenere ogni nome dell'automa? ad ogni elemento della lista corrisponde un carattere?

Potrebbe essere giusto ma considera che probabilmente del nome di un automa utilizzerai solo i primi caratteri pre verificare che un segnale influenzi un automa, quindi parte della lista non verrà mai usata e questo è uno spreco doppio rispetto all'utilizzo di un puntatore ad un array di char

joe.satriani
qualcuno mi sa indicare un buon editor magari da scaricare?

p2p
Originally posted by joe.satriani
qualcuno mi sa indicare un buon editor magari da scaricare?

io uso ConTEXT http://www.context.cx/


x chi mi aveva chiesto la lezione con l esempio della lettura e allocazione dinamica di memoria è qui:
http://homes.dsi.unimi.it/~aguzzoli...lgo/lucidi9.pdf

l esempio parte da pag.25 nelle pagine successive viene spiegato tutto

Dav83
qualcuno ha idea di come si faccia a verificare la presenza di un prefisso nel campo char *nome della struttura di automa???

Una buona soluzione strutturale potrebbe essere quella degli alberi binari sia per automi che per ostacoli...a proposito ci dovrebbe essere da qualche parte nella sezione Filez il progetto Banchetto. ALtrimenti sulla pagina di fiorentini la lezione 12 ci può aiutare!

mitnik
quindi tu Andrea utilizzi una lista anche per contenere il segnale dato in ingresso?

andrea
uso la lista per prendere il parametro in input (la stringa binaria), ma poi secondo me mantenere una lista per ogni automa è troppo. Bisogna pensare a qualcosa di diverso.

mitnik
so potrebbe leggere l'input e metterlo in una stringa, contare gli elementi, allocare lo spazio per un array di char (relativo all'automa inserito ) copiare il cotenuto della lista in tale array, svuotare la lista. E' un po lungo ma effettivamente si può inserire una stringa di qualsiasi dimensione.


Il problema rimane esaminare in modo corretto il segnale. avete qualche idea?

LoneWolf
Originally posted by Dav83
qualcuno ha idea di come si faccia a verificare la presenza di un prefisso nel campo char *nome della struttura di automa???

Una buona soluzione strutturale potrebbe essere quella degli alberi binari sia per automi che per ostacoli...a proposito ci dovrebbe essere da qualche parte nella sezione Filez il progetto Banchetto. ALtrimenti sulla pagina di fiorentini la lezione 12 ci può aiutare!


Puoi mettere in AND il prefisso e il nome dell'automa, considerando nel risultato soltanto un numero di bit pari alla lunghezza del prefisso.
Se sono tutti 1 il prefisso è contenuto nell'automa.

andrea
non credo proprio in AND (0 AND 0 fa 0, non 1). Magari in EXOR per vedere i bit diversi e quelli uguali.

LoneWolf
Originally posted by andrea
non credo proprio in AND (0 AND 0 fa 0, non 1). Magari in EXOR per vedere i bit diversi e quelli uguali.


Hai ragione anche tu, ma non essendo arrivato ancora a quel punto non avevo approfondito l'idea.:-o
Comunque la strada a mio parere è quella.

dirkpitt
Qualcuno sa cosa significa questo messaggio di errore che compare all'atto della compilazione:
C:/Programmi/cs1300/bin/../lib/gcc-lib/mingw32/3.3.1/../../../libmingw32.a(main.o)(.text+0x97):main.c: undefined reference to `WinMain@16'

:? :? :?


Edit:
--> PROBLEMA RISOLTO... nel file non è presente la funzione main... cosa normale visto che lo uso semplicemente come file contentente l'implementazione della lista...

LoneWolf
Originally posted by dirkpitt
Qualcuno sa cosa significa questo messaggio di errore che compare all'atto della compilazione:
C:/Programmi/cs1300/bin/../lib/gcc-lib/mingw32/3.3.1/../../../libmingw32.a(main.o)(.text+0x97):main.c: undefined reference to `WinMain@16'

:? :? :?

Guarda, ieri sera mi è saltato fuori un errore del genere; non ricordo che errore avessi fatto di preciso, comunque era qualcosa del tipo errore di sintassi, punto e virgola saltato o simili.

LoneWolf
Ragazzi, qualcuno ha avuto come me e Teju la malsana idea di utilizzare gli alberi?
Abbiamo trovato due implementazioni differenti di alberi che potrebbero andare bene.

Altro quesito: ricordate se a lezione hanno sconsigliato l'utilizzo degli alberi radicati con un numero illimitato di figli (pagina 201 di Introduzione agli Algoritmi)?

Teju
......

mitnik
ma avete risolto il problema della lettura dell'input? come suddividete per esempio il comando

a 12 6 N 010101

dove memorizzate il tutto?

Teju
Io invece pensavo ad un albero binario in cui ho un nodo e il figlio sinistro è un automa di nome più lungo con almeno uno 0 dopo il nome del nodo padre e con un 1 il figlio destro...
NON occupo ovviamente tutto l'albero, ma purtroppo alcuni nodi vuoti mi capiteranno....

PHP:

-------------------------- 000n -------------------------------------
------------------- 0000a --- 000111111111a -----------------


dove c'è a = è un automa, n = non è un automa

dirkpitt
Una domanda forse stupida, ma che è meglio avere capito chiaramente. Il rettangolo R(x0,y0,x1,y1) che rappresenta un ostacolo, graficamente è così:

----------------------- (x1,y1)
| |
| |
(x0,y0) -----------------------

vero? Cioè, le coordinate rappresentano i vertici giusti o l'avete interpretato in un modo differente?

Edit:
cavolo, esce uno schifo. In parole povere, il punto (x0,y0) equivale al vertice in basso a sinistra del rettangolo e il punto (x1,y1) equivale a quello in alto a destra, giusto?

LoneWolf
x0,y0 indicano l'angolo in basso a sinistra del rettangolo, x1,y1 l'angolo in alto a destra, proprio come hai detto tu.

Dav83
si dovrebbe essere proprio così...
per quanto riguarda l'input io memorizzo la riga di comando in un vettore [512]. Se controllate l'input non può essere più lungo di 330 e spiccioli caratteri...dopodichè ho trovato un funzione strtok che separa i caratteri letti con gli spazi e li memorizzo...

LoneWolf
Originally posted by Dav83
si dovrebbe essere proprio così...
per quanto riguarda l'input io memorizzo la riga di comando in un vettore [512]. Se controllate l'input non può essere più lungo di 330 e spiccioli caratteri...dopodichè ho trovato un funzione strtok che separa i caratteri letti con gli spazi e li memorizzo...

Scusa, ma così poni un limite massimo alla lunghezza della stringa letta da tastiera, e quindi alla lunghezza del nome (prefisso) dell'automa e alle operazioni di movimento.
Pur essendoci un limite di sistema come hai detto tu, il prof vuole che non lo si consideri...

p2p
Originally posted by LoneWolf
Ragazzi, qualcuno ha avuto come me e Teju la malsana idea di utilizzare gli alberi?
Abbiamo trovato due implementazioni differenti di alberi che potrebbero andare bene.

Altro quesito: ricordate se a lezione hanno sconsigliato l'utilizzo degli alberi radicati con un numero illimitato di figli (pagina 201 di Introduzione agli Algoritmi)?


Io sto facendomi qualche conto ancora, e sto valutando le seguenti alternative:
1)Albero binario di ricerca con una funzione che ad ogni inserimento/cancellazione mi verifica se l' albero è bilanciato in altezza, se si ok se no, lo bilancia;
2)Alberi RB, che sinceramente vorrei evitare...
3)B-alberi

ancora sto cercando di capire quale di queste potrebbe essere la migliore...

joe.satriani
per quel che riguarda le stringhe io (anche se con pochi esempi) non ho problemi a dichiararle char *n e a scorrerle con cicli del tipo:
for(k = 0;k != strlen(n);k++){
printf("%c\n", n[k]);
}*/
la mia idea per quanto riguarda la struttura degli automi è di utilizzare una lista ordinata lessicograficamente (con la funzione strcmp(s1, s2) )anche se si parla solo di uni e zeri. questo mi consente di avere una lista che ha i nomi con uno stesso prefisso tutti consecutivi.
qualcuno mi sa dare un straccio di codice per inserimento ordinato in lista uni-direzionale?

LoneWolf
Originally posted by p2p
Io sto facendomi qualche conto ancora, e sto valutando le seguenti alternative:
1)Albero binario di ricerca con una funzione che ad ogni inserimento/cancellazione mi verifica se l' albero è bilanciato in altezza, se si ok se no, lo bilancia;
2)Alberi RB, che sinceramente vorrei evitare...
3)B-alberi

ancora sto cercando di capire quale di queste potrebbe essere la migliore...

1) Ad ogni inserimento però devi controllare l'albero e se è sbilanciato ribilanciarlo, che ti costa parecchio tempo di calcolo, soprattutto su input molto grandi (tanti automi).
2) :sbocco: Che sbattimento!
3) Un B-albero si avvicina molto alla struttura a cui ho pensato io, cioé nodi con più figli, ma senza tenere i puntatori a ciascun figlio...

p2p
Originally posted by LoneWolf
1) Ad ogni inserimento però devi controllare l'albero e se è sbilanciato ribilanciarlo, che ti costa parecchio tempo di calcolo, soprattutto su input molto grandi (tanti automi).
2) :sbocco: Che sbattimento!
3) Un B-albero si avvicina molto alla struttura a cui ho pensato io, cioé nodi con più figli, ma senza tenere i puntatori a ciascun figlio...


1) Si infatti tale operazione richiede tempo lineare alle dimensioni dell' albero(che se l' albero è piccolo non andrebbe neanche male...ma se è grande non va bene), ma,se non erro, puo' addirittura diventare quadratico,nel caso incui inserisco una sequenza di chiavi tra due bilanciamenti....;scartato!
2)Quoto!!!
3)mi concentro su questo.

p2p
stavo valutando i costi di un po' tutto quello che possiamo usare, e ho letto su un libro(non il nostro di testo)un interessante paragone tra alberi bin, alberi bin con inserimento allar adice,alberi randomizzati,RB alberi e tanti altri...
risultato:gli RB sono in asoluto i piu' performanti...
azz...

LoneWolf
Originally posted by joe.satriani
per quel che riguarda le stringhe io (anche se con pochi esempi) non ho problemi a dichiararle char *n e a scorrerle con cicli del tipo:
for(k = 0;k != strlen(n);k++){
printf("%c\n", n[k]);
}

Scusa, ma io continuo a non capire come si possa implementare una lettura da tastiera simile; all'n che hai scritto tu devi dare per forza un valore, limitando quindi l'input.
Peraltro, devi prima allocare memoria per scrivere i char che ricevi da tastiera, e controllare di non averla esaurita se stai ancora leggendo, nel qual caso devi allocarne altra.

LoneWolf
Originally posted by p2p
stavo valutando i costi di un po' tutto quello che possiamo usare, e ho letto su un libro(non il nostro di testo)un interessante paragone tra alberi bin, alberi bin con inserimento allar adice,alberi randomizzati,RB alberi e tanti altri...
risultato:gli RB sono in asoluto i piu' performanti...
azz...


In assoluto sono anche i più difficili da implementare!

:sbocco:

Comunque stasera mi rileggo la teoria sugli RB-alberi e valuto se abbandonare i B-alberi moddati che avevo pensato di utilizzare.

p2p
Originally posted by LoneWolf
In assoluto sono anche i più difficili da implementare!

:sbocco:

Comunque stasera mi rileggo la teoria sugli RB-alberi e valuto se abbandonare i B-alberi moddati che avevo pensato di utilizzare.


Si si concordo con te che sono un casino... infatti stavo valutando anche altro, ad esempio ho guardato gli alberi randomizzati,che comunque sembra garantiscano prestazioni medie molto buone, non credo che se mi faccio il culo sugli RB avro' un voto molto piu' alto che se implementassi un albero randomizzato o un B-albero fatto bene... quindi..

marchinkus
partendo dall'input " N20W40": come diavolo fate a suddividere il primo comando N20 dal secondo W40??????????

marchinkus
se non risolvete il problema del segnale, è inutile partire in quarta pensando già alle strutture da implementare...non farete molta strada

p2p
Originally posted by marchinkus
partendo dall'input " N20W40": come diavolo fate a suddividere il primo comando N20 dal secondo W40??????????

non so ma intuitivamente divido i numeri dalle lettere...

Teju
Originally posted by p2p
non so ma intuitivamente divido i numeri dalle lettere...

io ho provato con la doppia scanf (prima su un char e poi su un int) in un ciclo fino a fine riga, ma mi da ancora qualche piccolo problemino, ma lo risolverò! :D
Altrimenti lo si legge come stringa e lo si scorre cercando se il contenuto è carattere o numero e fare un po' di moltiplicazioni per 10 dei numeri se i successivi sono ancora numeri....

Ma te l'ho detto, queste sono idee buttate giù veloci, avevo altri problemi prima da risolvere! :D :D

p2p
scusate, ma voi alla crea() le fate inizializzare la struttura che conterra gli automi?o le fate fare altro?

Teju
Originally posted by p2p
scusate, ma voi alla crea() le fate inizializzare la struttura che conterra gli automi?o le fate fare altro?

Io credo debba inizializzare anche la struttura degli ostacoli, no?

p2p
Originally posted by Teju
Io credo debba inizializzare anche la struttura degli ostacoli, no?

si... anche secondo me....
ancora una cosina... voi come vi state organizzando con i file? nel senso, state facendo un file unico con funzioni, main ecc... o fate dei file.h che importate....?

EDIT. guardando qualche vecchio progetto sono effettivamente tutti in un file... va beh faro' cosi anch io ma era solo per avere un ordine migliore...

LoneWolf
Credo che questo possa tornare molto utile a tutti:
http://wwwwbs.cs.tu-berlin.de/user-..._Utilities.html

EDIT: Aggiungo un altro link, ma fate attenzione perché è una pagina HTML da 4 mega, contenente un manuale in inglese sulle librerie C
http://www.gnu.org/software/libc/ma..._mono/libc.html

Teju
Piccola curiosità...
Il dato "direzione" dentro l'automa serve solamente se il segnale comincia per "A" oppure se direzione=W segnale=E11 conto come un movimento il cambiare da W a E?!?

andrea
Teju, non ho capito bene la domanda...

Io ne ho una: ma l'output a video deve apparire quando si digita f per la fine dei comandi o subito dopo che si dà un comando p?

Teju
Originally posted by andrea
Teju, non ho capito bene la domanda...

Esempio pratico: ho l'automa 001 con x=1 y=2 D=W.
Arriva il segnale "s 00 E23".
Devo muovermi verso E per 23 oppure il fatto che cambia W in E mi fa perdere un passaggio, dunque mi devo muovere a E di 22?? E' più chiara così?

Originally posted by andrea
Io ne ho una: ma l'output a video deve apparire quando si digita f per la fine dei comandi o subito dopo che si dà un comando p?

Bel quesito... :D Prova a chiederlo a Fiorentini, magari ti risponde in maniera più simpatica che a LoneWolf! :D

andrea
Sì, è più chiara. Onestamente non saprei, forse facendo i conti dell'esmpio fatto da lui nel test del progetto si riesce a capire. Stasera ci provo.

p2p
Originally posted by Teju
Esempio pratico: ho l'automa 001 con x=1 y=2 D=W.
Arriva il segnale "s 00 E23".
Devo muovermi verso E per 23 oppure il fatto che cambia W in E mi fa perdere un passaggio, dunque mi devo muovere a E di 22?? E' più chiara così?


secondo me devi muoverti di 23;guarda l' esempio a pag4 se noti l' automa 010 è 12 3 N , + sotto cè il 1° comando,cioe' s 01 A3, poi ancora stampa (p 0) se vai a vedere l' output vedrai 010: 12, 6, N

Originally posted by andrea
Io ne ho una: ma l'output a video deve apparire quando si digita f per la fine dei comandi o subito dopo che si dà un comando p?

secondo me subito dopo ogni comando va eseguita l' azione corrispondente(pag 3 "Quando una linea è letta, viene eseguita l' operazione associata: ...")

LoneWolf
X Teju:
Credo che ci si perda uno spostamento solo se il cambio di direzione avviene in movimento, non se cambia da fermo.

X andrea:
L'output viene generato solo dall'operazione p, quando inserisci f il programma si interrompe senza output.

X p2p:
Nella crea() devi svuotare/inizializzare tutte le strutture dati che utilizzi per organizzare il piano, gli automi e gli ostacoli; ovviamente, saranno vuote, quindi avrai dei puntatori a NULL.

p2p
scusate se ripeto la domanda... ma voi inserite tutto in un unico file o suddividete?

andrea
a me non piace tanto, ma io inserisco tutto in un solo file, mi pare che il testo parli di due files, uno il programma e l'altro la relazione

mitnik
come avete risolto la divisione della stringa in input segnale? (tipo s 1001 N10S4)
mi dareste qualche indicazione

grazie

joe.satriani
ragazzi, ma voi che strutture state usando visto che le liste sono le più sconsigliate?

andrea
visto che la cosa ha lasciato parecchi dubbi a tutti, io gestisco le stringhe i cui parametri hanno formati diversi con la getchar. Prendo un carattere alla volta, lo metto in una lista. Quando c'è uno spazio significa che il parametro è terminato. Questa cosa dovrebbe consentire, se uno vuole, di fare tutti i controlli che si vogliono (anche se non sono richiesti) sulle stringhe in input.

p2p
Originally posted by joe.satriani
ragazzi, ma voi che strutture state usando visto che le liste sono le più sconsigliate?

io sto usando un RB albero per gli automi e penso usero' una lista per gli ostacoli... è vero che la lista non è efficiente,xò gia' mi sto faceno un mazzo per cercar di tirar fuori qualcosa dall rb, figuriamoci mettersi ad usare tabelle hash o altro...non vorrei incasinarmi piu' di quello che son gia' :)

joe.satriani
ma il problema è che se si vuole sapere se un punto è in uno o più ostacoli bisogna valutarli tutti, o quasi perche io credo che si possono non considerare solo ostacoli completamente inclusi in altri che credo sia un caso molto raro...

LoneWolf
Un dubbio tremendo mi attanaglia: sto scrivendo lo pseudo codice dell'operazione posizione().
Ho notato che nell'esempio del progetto l'output è ordinato in base al nome dell'automa; il problema è che se usiamo una lista per gli automi è ovvio che ci verranno ordinati in output, ma se utilizziamo un albero (di qualsiasi tipo) non lo saranno.

Per cui, l'output deve essere ordinato?
Se si, è un invito implicito ad usare le liste o un ennesimo tentativo di incasinarci la vita?

LoneWolf
Originally posted by p2p
io sto usando un RB albero per gli automi [...]

Non so se considerarti un temerario o un folle!:D

LoneWolf
Originally posted by joe.satriani
ma il problema è che se si vuole sapere se un punto è in uno o più ostacoli bisogna valutarli tutti, o quasi perche io credo che si possono non considerare solo ostacoli completamente inclusi in altri che credo sia un caso molto raro...

E' una situazione talmente rara che non la considero nemmeno, inoltre è possibile che ti venga richiesto di rimuovere un ostacolo grande, pur mantenendo il piccolo.

Io scorro tutta la lista di ostacoli alla ricerca di almeno uno che contenga l'automa, nel qual caso non creo l'automa.

LazerPhEa
Mah... io seguirei il consiglio di Torak... provate il prossimo appello! :D :D

:ciaoo:

LoneWolf
Originally posted by LazerPhEa
Mah... io seguirei il consiglio di Torak... provate il prossimo appello! :D :D

:ciaoo:

Aveva ragione la tua tipa, sei troppo irritante!:D :D :D

:ciaoo: Paolo!

p2p
Originally posted by LoneWolf
Non so se considerarti un temerario o un folle!:D


un folle :)
guarda, se non riesco, uso un albero binario di ricerca con una funzione per ribilanciarlo ad ogni cancellazione/inserimento e pace! + lista x ostacoli ovviamente!

LoneWolf
Originally posted by p2p
un folle :)
guarda, se non riesco, uso un albero binario di ricerca con una funzione per ribilanciarlo ad ogni cancellazione/inserimento e pace! + lista x ostacoli ovviamente!

Visto che anche tu stai utilizzando un albero, che mi dici sulla mia domanda dell'ordinamento dell'output?

LazerPhEa
Originally posted by LoneWolf
Aveva ragione la tua tipa, sei troppo irritante!:D :D :D

:ciaoo: Paolo!

:asd:

Ok, dai... vi lascio all'ingrato compito! :)
:ciaoo:

p2p
Originally posted by LoneWolf
Visto che anche tu stai utilizzando un albero, che mi dici sulla mia domanda dell'ordinamento dell'output?

perchè non vengono ordinati con un albero ? scusa se non mi è chiaro, ma ancora non sono li e devo ancora rivedermi la parte di ricerca ...

LoneWolf
Originally posted by p2p
perchè non vengono ordinati con un albero ? scusa se non mi è chiaro, ma ancora non sono li e devo ancora rivedermi la parte di ricerca ...

Immagina l'albero così:

--------- 0 ------------
-- 00 -------- 01 ----
000 001 --- 010 011

Se fai una ricorsiva che attraversa prima il figlio sinistro, poi la radice, infine il figlio destro, l'ordinamento finale sarà:
000
00
001
0
010
01
011

Ovviamente non sono ordinati.
Facciamo pure che il prefisso sia 01, l'output sarà:
010
01
011

L'unico sistema per avere l'output ordinato sarebbe sfogliare ciascun livello dell'albero da sinistra a destra, poi procedere al livello successivo.

Che ne dici?

LoneWolf
Se invece ordini nel seguente modo:
radice->figlio sinistro->figlio destro, l'output è:
0
00
000
001
01
010
011

No, in effetti così i conti tornano...:shock:
Mi sono fatto ingannare dalla lunghezza delle stringhe!

OK, parte il coro!
Poro poro poro poro poroporopopo figur de ...!

X Teju: Per caso hai già scritto al prof? :oops:

p2p
Originally posted by LoneWolf
Immagina l'albero così:

--------- 0 ------------
-- 00 -------- 01 ----
000 001 --- 010 011

Se fai una ricorsiva che attraversa prima il figlio sinistro, poi la radice, infine il figlio destro, l'ordinamento finale sarà:
000
00
001
0
010
01
011

Ovviamente non sono ordinati.
Facciamo pure che il prefisso sia 01, l'output sarà:
010
01
011

L'unico sistema per avere l'output ordinato sarebbe sfogliare ciascun livello dell'albero da sinistra a destra, poi procedere al livello successivo.

Che ne dici?

capito... ma con un ordine anticipato(sottoalbero sinistro,redice,sottoalbero destro) mi pare venga ordinato, no?


EDIT: ho visto adesso che ti eri gia' risposto...

LoneWolf
Originally posted by p2p
capito... ma con un ordine anticipato(sottoalbero sinistro,redice,sottoalbero destro) mi pare venga ordinato, no?


EDIT: ho visto adesso che ti eri gia' risposto...


Con l'ordine anticipato non viene.
Viene con radice, sottoalbero sinistro, sottoalbero destro.

Off-Topic:
Sto cominciando a fondere e dico scemenze! :D

Teju
Originally posted by LoneWolf
Off-Topic:
Sto cominciando a fondere e dico scemenze! :D

A dire il vero al telefono mi avevi quasi pure convinto xkè non avendo sotto il disegno non riuscivo a immaginarmelo bene, ma dunque, alla luce di tutto ciò, dico che l'albero binario è la soluzione migliore! :D :D

LoneWolf
Originally posted by Teju
A dire il vero al telefono mi avevi quasi pure convinto xkè non avendo sotto il disegno non riuscivo a immaginarmelo bene, ma dunque, alla luce di tutto ciò, dico che l'albero binario è la soluzione migliore! :D :D

Anche il mio B-albero funziona alla grande, solo che non me n'ero accorto! :D

andrea
Ho scritto a Fiorentini per essere sicuro di quando produrre l'output del comando p. Posto la risposta:

"
come scritto nel testo, ogni comando va eseguito subito dopo essere
stato letto da standard input (e quindi prima di leggere il successivo
comando)

Percio', subito dopo la lettura letto

p ...

deve essere stampato il corrispondente output (nell'esempio a pag. 5 le
righe su standard output sono riportate una di seguito all'altra)
"

questa cosa è chiarita.

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