 | |
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 |
[Algoritmi] Progetto "CONTROLLO REMOTO" Clicca QUI per vedere il messaggio nel forum |
joe.satriani |
qualcuno saprebbe aiutarmi sull'inserimento dell'albero binario? |
Dante |
Originally posted by 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.
Ma come si fa a farterminare getchar? come faccio a dirgli "leggi un carattere alla volta fino a che è finita la riga"?una roba tipo eol? com'è in C? |
Dante |
Ho risolto con 'sta porcheria e funziona...
while (( c = getchar() ) != '\n')
printf("%c", c); |
andrea |
non è una porcheria, è giusto così |
joe.satriani |
Originally posted by 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:
scusami LONEWOLF ti chiederei una piccola cortesia, non riesco a capire come inserire i nodi nell' albero, se mi aiutassi te ne sarei molto grato.:cry: |
andrea |
io volevo chiedervi una cosa. Ma quando dovete spostare un automa, cosa fate, scorrete la lista degli ostacoli per ogni cella che l'automa deve attraversare? |
lorybu |
Quindi l'output del professore è sbagliato!! :
(
001: 12, 6, S
010: 12, 6, N
011: 12, 6, W
0101: 12, 6, E
)
A me esce così:
(
001: 12, 6, S
010: 12, 6, N
0101: 12, 6, E
011: 12, 6, W
)
Perchè chiaramente non controllo la lunghezza della stringa quando inserisco le cfr. e basta!!
A questo punto...
L'ordine dell'output è indifferente?? |
LoneWolf |
Originally posted by lorybu
Quindi l'output del professore è sbagliato!! :
(
001: 12, 6, S
010: 12, 6, N
011: 12, 6, W
0101: 12, 6, E
)
A me esce così:
(
001: 12, 6, S
010: 12, 6, N
0101: 12, 6, E
011: 12, 6, W
)
Perchè chiaramente non controllo la lunghezza della stringa quando inserisco le cfr. e basta!!
A questo punto...
L'ordine dell'output è indifferente??
Questa mi era sfuggita.
A sto punto effettivamente l'ordine non conta!
Cavolo, ho già scritto il codice per l'inserimento degli automi in ordine! :x
Vabbé... :sad: |
LoneWolf |
Originally posted by joe.satriani
scusami LONEWOLF ti chiederei una piccola cortesia, non riesco a capire come inserire i nodi nell' albero, se mi aiutassi te ne sarei molto grato.:cry:
Non è molto semplice da spiegare, prova a postarmi la struct dei nodi del tuo albero e vedo se riesco a darti una mano.
In alternativa, ci troviamo domani mattina o giovedì in università in SILAB e ti spiego.
PS. Comunque non sono sicuro che il mio programma funzioni e che gli automi vengano disposti correttamente nell'albero.
In compilazione ed esecuzione non ricevo errori, ma non ho ancora provato a fare interrogazioni e vedere se l'albero contiene i nodi.
PS2. Dimenticavo, prendi un progetto degli anni scorsi, in cui qualcuno abbia utilizzato un albero, e troverai interessanti spunti. |
Teju |
Originally posted by lorybu
A me esce così:
Vuol dire che sei già così avanti che sei già all'output?!?
Che struttura hai usato?!? ...io non capisco come mai non riesco a riempire il mio albero, riesco a creare il primo nodo, magicamente il secondo pure e dal terzo in poi nada, non lo aggiungie in lista.... :? :? boh.... :D |
andrea |
Scusate ragazzi, ho letto che siete arrivati alla conclusione che l'ordine dell'output non conta. Me lo confermate? Perchè se è così a me funziona abbastanza bene, altrimenti devo sbattermi ancora e non so se è una cosa facile trovare una soluzione.
Effettivamente il testo non dice che l'output deve essere in ordine dall'automa con nome più piccolo a quello più grande. Voi che dite? Non so neppure se chiederlo a Fiorentini, perchè se mi risponde che l'ordine è importante mi devo adeguare, mentre così, se mi facesse l'obiezione, posso sempre dire che il testo non specificava. |
andrea |
... riprendo il discorso..
ha ingannato anche a me l'esempio del professore, cavolo. Ma siete sicuri che la lunghezza della stringa non conti? |
mitnik |
Considerato che qualcuno di voi è gia quasi alla conclusione, chiderei gentilmente qualche consiglio su come valutare gli spostamenti degli automi. Io gli ostacoli li ho memorizzati in una lista. |
andrea |
Io non sono alla soluzione, nel senso che la questione relativa agli ostacoli la devo ancora fare. Finora ho fatto il comando a e il p (sempre che vada bene non rispettare la lunghezza della stringa...)
Per quanto riguarda gli ostacoli, anche io penso di usare una lista, altrimenti ci impiego troppo e non so se ho tempo. |
joe.satriani |
Originally posted by LoneWolf
Non è molto semplice da spiegare, prova a postarmi la struct dei nodi del tuo albero e vedo se riesco a darti una mano.
In alternativa, ci troviamo domani mattina o giovedì in università in SILAB e ti spiego.
PS. Comunque non sono sicuro che il mio programma funzioni e che gli automi vengano disposti correttamente nell'albero.
In compilazione ed esecuzione non ricevo errori, ma non ho ancora provato a fare interrogazioni e vedere se l'albero contiene i nodi.
PS2. Dimenticavo, prendi un progetto degli anni scorsi, in cui qualcuno abbia utilizzato un albero, e troverai interessanti spunti.
GRAZIE MILLLE lonewolf, se domani sei in silab ci facciamo una chiacchierata e mi spieghi in linea di massima come fare.:razz: :razz: (non ti ruberò molto tempo) |
LoneWolf |
Originally posted by joe.satriani
GRAZIE MILLLE lonewolf, se domani sei in silab ci facciamo una chiacchierata e mi spieghi in linea di massima come fare.:razz: :razz: (non ti ruberò molto tempo)
Domani dovrei essere tutto il giorno in Silab, poi ti confermo, per cui vada per la chiacchierata.
Per quanto riguarda la questione dell'ordinamento, io ho pensato che possono esisterne di due tipi:
- ordini in base alla lunghezza del nome, se la lunghezza è uguale il minore dei due va prima
- ordini in base al valore, se i due valori confrontati sono uguali (ad es. 01 e 1) ordini in base alla lunghezza
L'esempio del prof. ricade nel primo tipo di ordinamento, ma può essere un semplicissimo caso, e comunque il testo non specifica che l'output deve essere ordinato.
Comunque, implementa almeno uno di questi due ordinamenti e hai possibilità che su input piccoli (tipo quelli del testo del progetto) il tuo risultato sia ordinato e che il prof. non dica nulla. |
andrea |
Scusa LoneWolf, ma questa frase:
- ordini in base al valore, se i due valori confrontati sono uguali (ad es. 01 e 1) ordini in base alla lunghezza
la capisco solo in parte. I due valori non possono essere uguali, perchè un automa non può essere creato se ne esiste uno uguale. O sbaglio?
Comunque io ordino per valore. La lunghezza non mi interessa. Il testo non specifica la modalità di ordinamento, lo tengo buono. |
LoneWolf |
Originally posted by andrea
Scusa LoneWolf, ma questa frase:
- ordini in base al valore, se i due valori confrontati sono uguali (ad es. 01 e 1) ordini in base alla lunghezza
la capisco solo in parte. I due valori non possono essere uguali, perchè un automa non può essere creato se ne esiste uno uguale. O sbaglio?
Comunque io ordino per valore. La lunghezza non mi interessa. Il testo non specifica la modalità di ordinamento, lo tengo buono.
Semplicemente, intendo che fai una conversione della stringa considerandola un numero binario e portandolo in integer, a quel punto 1 e 01 valgono in integer 1, per cui li considero come se fossero uguali, e li ordini in base alla lunghezza della stringa. |
andrea |
Lonewolf, sei sicuro di poter fare così? Se fai la conversione della stringa in integer, automaticamente limiti il numero di automi al massimo valore dell'integer. O sbaglio? |
mitnik |
scusate, forse mi sono perso parte della discussione sull'output del comando p.
Ma il testo, leggendo le specifiche di implementazione, non dice che l'output deve essere ordinato, dice solo come deve essere visualizzato quindi seconfo me anche un uot del genere viene accettato;
(
1101: 12, 5, S
1101101: 19, 19, W
110: 1, 1, W
)
o no? |
andrea |
Sì, il testo non dice nulla. Anche a me stampa un output come il tuo e non ho intenzione di cambiare, proprio perchè il testo non dice nulla sull'ordine in cui gli automi sono stampati. |
mitnik |
Ecco.
Ora ho un altro problema. Il segnale l'ho memorizzato in un array. Suppiniamo sia
01 N10S1W145
come fate a dividere le lettere dai caratteri?
Io ho trovato un modo ma è un po incasinato e non mi sembra molto efficiente.
Poi vorrei memorizzare il segnale in un alista in cui ogni elemento contenga una lettera per la direzione e il numero di passi ad essa associata. Che dite? |
andrea |
Sei sicuro che va bene memorizzarlo in un array? Così devi dare un limite massimo. Secondo te è corretto? |
mitnik |
leggo la riga di input e con realloc mano a mano che trovo nuovi caratteri alloco lo spazio necessario per contenerli.
funziona ho provato ad inserire stringhe di svariata lunghezza e non ho avuto problemi.
qiundi ottengo un array con il segnale. Per trovare la stringa di bit è semplice uso la strtok con lo spazio come token e riesco a ricavare quindi il segnale tipo [11010101]
a questo punto ho il problema di trovare un modo per dividere le NESWA dai valori decimali |
andrea |
Ok, la realloc non la conosco e non mi sono azzardato ad usarla. Io uso liste per prendere i comandi dall'input.
Per quanto riguarda la distinzione tra NESWA e valori decimali, fossi in te scorrerei tutto l'array e verifico se ho una lettera o una cifra. Non sarà efficiente ma credo funzioni, io farò così con la lista. |
LoneWolf |
Originally posted by andrea
Lonewolf, sei sicuro di poter fare così? Se fai la conversione della stringa in integer, automaticamente limiti il numero di automi al massimo valore dell'integer. O sbaglio?
Avresti ragione tu se utilizzassi la conversione come unico parametro di ordinamento.
Ma se ne utilizzi due come ho scritto qualche post fa, viene tutto fuori ordinato alla perfezione. |
LoneWolf |
Non ricordo a chi avessi detto di trovarci giovedì (oggi, praticamente, visto che la mezzanotte è passata), ma oggi non riesco a venire, mentre sarà in uni venerdì, perché di pomeriggio ho l'FSE di Windows in aula delta.
Ci si vede venerdì. |
joe.satriani |
l'avevi detto a me, no problema a domani! |
Teju |
Ma... ma...
Come mai l'istruzione
if (a <= automa_corrente->x <= c)
non funziona, mentre la
if (automa_corrente->x >= a && automa_corrente->x <= c)
funziona?!?
In qualunque linguaggio che uso di solito funzionano entrambe, che il C sia così indietro?!? ...e pensare che ci ho sbattuto la testa per taaaaaanto tempo xkè non trovavo l'errore...
Mah........ :-) |
andrea |
Scusa Lonewolf, ma non riesco a capire cosa intendi...
Se converti la stringa secondo me la limiti al numero di bit del più grande intero. |
LoneWolf |
Originally posted by andrea
Scusa Lonewolf, ma non riesco a capire cosa intendi...
Se converti la stringa secondo me la limiti al numero di bit del più grande intero.
Allora, io prima controllo se due stringhe sono di diversa lunghezza; se sono di pari lunghezza, le trasformo in integer e le ordino.
Per cui, non sto limitando nulla, non esisteranno mai due stringhe di pari lunghezza e valore.
Capito? |
LoneWolf |
Originally posted by Teju
Ma... ma...
Come mai l'istruzione
if (a <= automa_corrente->x <= c)
non funziona, mentre la
if (automa_corrente->x >= a && automa_corrente->x <= c)
funziona?!?
In qualunque linguaggio che uso di solito funzionano entrambe, che il C sia così indietro?!? ...e pensare che ci ho sbattuto la testa per taaaaaanto tempo xkè non trovavo l'errore...
Mah........ :-)
Ma dai, Teo, ti ho detto ieri quale funzione usare, proprio perché aveo provato anche io e funzionava male.
Comunque funziona quella sintassi sugli integer... |
Teju |
Originally posted by LoneWolf
Ma dai, Teo, ti ho detto ieri quale funzione usare, proprio perché aveo provato anche io e funzionava male.
No, ormai per gli inserimenti e i controlli di inserimento ci sono arrivato, la mia era solo una considerazione sul fatto che un'istruzione molto comune in tutti i linguaggi di programmazione quale (a <= b <= c) non restituisca il corretto valore! :D |
andrea |
Quando parlo di limitare intendo dire che se trasformi una stringa in un integer e un integer ha al massimo 32 bit, significa che la stringa può essere al massimo di 32 bit. Se hai un automa la cui stringa è 1 seguito da 32 zeri, come fai a convertirlo in integer? |
LoneWolf |
Originally posted by andrea
Quando parlo di limitare intendo dire che se trasformi una stringa in un integer e un integer ha al massimo 32 bit, significa che la stringa può essere al massimo di 32 bit. Se hai un automa la cui stringa è 1 seguito da 32 zeri, come fai a convertirlo in integer?
Su questo hai ragione, ma il mio voleva essere solo un suggerimento, poi lo implementate come volete gestendo questo tipo di eccezioni.
Io ho usato la funzione strcmp.
http://digilander.libero.it/uzappi/...oni/strcmp.html |
mitnik |
Avete gia ragionato sui movimenti di un automa? intendo dire come incrementate e decrementate la x o la y in base alla presenza degli ostacoli? a me sembra un po un casino. |
p2p |
domandina x chi usa le liste per gli ostacoli: avete definito un puntatore alla testa e alla coda della lista oppure no? |
LoneWolf |
Originally posted by p2p
domandina x chi usa le liste per gli ostacoli: avete definito un puntatore alla testa e alla coda della lista oppure no?
Al momento ancora no, ma se finisco in tempo forse faccio una lista bidirezionale al posto di quella unidirezionale attuale.
In quel modo la ricerca degli ostacoli potrebbe diventare più veloce, ma si spreca spazio tenendo un puntatore in più in ogni record della lista. |
p2p |
capito.. è vero l' uso della memoria è > vedro' se conviene tenerla o se l uso della coda è marginale...
cavolo ho fatto questa dichiarazione nella mia crea_lista() :
lnodo *p = malloc(sizeof(lnodo));
dove lnodo l avevo dichiarato prima con un typdef alla struttura della lista....
mi viene fuori a quella riga il seguente warning:
ISO C89 forbids mixed declaration and code
ne sapete qualcosa???boh
EDIT: Risolto.... non chiedetemi xchè lo faceva!:? |
dirkpitt |
Originally posted by p2p
domandina x chi usa le liste per gli ostacoli: avete definito un puntatore alla testa e alla coda della lista oppure no?
solo alla testa |
luca8684 |
La prima istruzione non funziona perchè tu fai il primo confronto
a<=automa_corrente->x
e questo restituisce un valore che può essere 1 se è vera o 0 se è falsa.
Poi tutto questo viene confrontato con c, ma non confronti automa_corrente->x ma il risultato del primo confronto!!
Mentre la
if (automa_corrente->x >= a && automa_corrente->x <= c)
funziona perchè prima lo confronti con a, poi con c e poi viene fatto un end logico tra i risultati dei due!!
Originally posted by Teju
Ma... ma...
Come mai l'istruzione
if (a <= automa_corrente->x <= c)
non funziona, mentre la
if (automa_corrente->x >= a && automa_corrente->x <= c)
funziona?!?
In qualunque linguaggio che uso di solito funzionano entrambe, che il C sia così indietro?!? ...e pensare che ci ho sbattuto la testa per taaaaaanto tempo xkè non trovavo l'errore...
Mah........ :-) |
LoneWolf |
Originally posted by p2p
capito.. è vero l' uso della memoria è > vedro' se conviene tenerla o se l uso della coda è marginale...
cavolo ho fatto questa dichiarazione nella mia crea_lista() :
lnodo *p = malloc(sizeof(lnodo));
dove lnodo l avevo dichiarato prima con un typdef alla struttura della lista....
mi viene fuori a quella riga il seguente warning:
ISO C89 forbids mixed declaration and code
ne sapete qualcosa???boh
EDIT: Risolto.... non chiedetemi xchè lo faceva!:?
A me ieri dava errore se in fase di dichiarazione delle variabili assegnavo direttamente un valore.
Per cui, se il motivo è questo, avresti dovuto fare:
lnodo *p; // Nella dichiarazione delle variabili
p = malloc(sizeof(lnodo)) // Tra le varie istruzioni della funzione |
Teju |
Originally posted by luca8684
La prima istruzione non funziona perchè tu fai il primo confronto
a<=automa_corrente->x
e questo restituisce un valore che può essere 1 se è vera o 0 se è falsa.
Poi tutto questo viene confrontato con c, ma non confronti automa_corrente->x ma il risultato del primo confronto!!
Mentre la
if (automa_corrente->x >= a && automa_corrente->x <= c)
funziona perchè prima lo confronti con a, poi con c e poi viene fatto un end logico tra i risultati dei due!!
Si, ok, c'ero arrivato anch'io che il C fa così, ma solo dopo che ho provato a mettere gli &&... non serve un genio!
Però quello che continua a non capire è perchè invece in praticamente tutti gli altri linguaggi funzioni correttamente... ma va beh, non volevo aprire un dibattito, era solo una considerazione la mia! :D |
LoneWolf |
X joe.satriani:
Io sono in silab, nella zona dove ci sono i vecchi pc, macchina pc2-02.
Quando vuoi passa di qua (prima di pranzo!). |
joe.satriani |
Originally posted by LoneWolf
X joe.satriani:
Io sono in silab, nella zona dove ci sono i vecchi pc, macchina pc2-02.
Quando vuoi passa di qua (prima di pranzo!).
io sono lì per le 11, a dopo... |
Skilotto83 |
La notizia della durata dello scritto per altri 2 appelli è ufficiale...
http://homes.dsi.unimi.it/~trubian/studenti.htm
ma voi kapite cosa significa "(al quale comunque deve iscriversi)"???
cioè..nel caso..per fare il progetto mi iscrivo con goldwurm e poi?? Nn mi presento e faccio il progetto?
Mi sfugge quaolkosa... |
Dante |
ah... e chi l'ha passato con i compitini a fine corso...? |
Skilotto83 |
quelli credo che scadano a gennaio... |
mitnik |
Correggetemi se sbaglio, ma l'output è prodotto solo dalla funzione posizione vero?
le altre agiscono "internamente" al programma la situazione del piano viene stampata solo chiamando la funzione p |
andrea |
Sì, è così. Solo p produce un output |
Dante |
ho messo l'input di a (es: a 12 34 E 0011) in una lista, in cui ogni nodo contiene un carattere, cioè: Punt_lista -->1-->2--> -->3-->4--> -->E--> -->0-->0-->1-->1-->NULL
Ora dovrei memorizzare 1 e 2 in una variabile int come il valore int 12, così per 34, E in una variabile char e 0011 in una stringa... come si fa? |
mitnik |
scorri la lista finche trovi il primo spazio. Sai qundi quanti caratteri hai letto. Allochi uno spazio sufficiente per contenerli e li memorizzi in tale spazio (per esempio un *array) a questo punto per convertire il valore della stringa in un numero usi la funzione strtod.
dovrebbe funzionare.
Io invece ho il problema di dividere il segnale (contenuto in un array) tipo
N4S11W1A3. |
Dante |
Anche chi ha passato la teoria con i compitini ha a disposizione ancora 2 appelli! Confermato dal prof! |
Skilotto83 |
Originally posted by Dante
Anche chi ha passato la teoria con i compitini ha a disposizione ancora 2 appelli! Confermato dal prof!
meglio....
Dicevo kosi' perkè nell'avviso parla solo di appelli... :shock: |
LoneWolf |
Scusate ragazzi, ma come è possibile che nell'esempio del progetto venga creato un ostacolo con l'istruzione
o -2 -1 7 8
e che poi nei suoi output l'outoma 011 si trova in 7, 6?
L'automa ha scalato l'ostacolo e ci è entrato?
Inoltre, nel secondo output 001 dovrebbe trovarsi in 13,2 con direzione E, non in 12,2 con direzione W.
:? |
alessiolennon |
ciao raga,1 domanda.
cosa devo fare quando mi viede detto di inserire un ostacolo che compre un automa?
y ostacolo
| _________________
| |________________|
| |________________|
| |________________|
| |______automa____|
| |______°_________|
| |________________|
| |________________|
|
|_______________________x
voglio dire,prima mi viene detto di inserire l'automa,poi dopo di inserire l'ostacolo.che devo fare,inserisco o no l'ostacolo?? |
dirkpitt |
Originally posted by alessiolennon
voglio dire,prima mi viene detto di inserire l'automa,poi dopo di inserire l'ostacolo.che devo fare,inserisco o no l'ostacolo??
NO.. c'è scritto anche sul testo, a pagina 3, nella descrizione di ostacolo(xo,y0,x1,y1)
Credo anch'io che l'esempio non sia corretto.... o sbaglio? :? |
LoneWolf |
Originally posted by dirkpitt
NO.. c'è scritto anche sul testo, a pagina 3, nella descrizione di ostacolo(xo,y0,x1,y1)
Credo anch'io che l'esempio non sia corretto.... o sbaglio? :?
Io sto facendo una tabella excel con tutti gli spostamenti; inoltre, sto facendo diversi fogli con le diverse "interpretazioni" del testo del progetto, ma fino ad ora il risultato non è MAI stato uguale a quello del professore.
Per cui, che si fa?
Consideriamo errato il risultato dell'esercizio del prof?
Ovviamente deve esserci detta da una professore una cosa del genere, altrimenti all'esame Fiorentini ci dice che sbagliamo noi e siamo fregati... |
dirkpitt |
Ho fatto anch'io la stessa cosa, ovvero un foglio in Excel e i calcoli del prof risultano errati... non so che dire.... :? |
dirkpitt |
Oltretutto ho svolto (sia con il mio programma, sia a mano con l'aiuto di Excel) l'esempio a pagina 2 del testo, quello con i quattro automi, e il risultato è corretto. Credo quindi che il mio modo di calcolare non sia da considerare sbagliato.
Inoltre, come ha detto LoneWolf, già solo il fatto che secondo l'esempio del prof, l'automa 011 viene spostato in una posizione occupata da un ostacolo, è sintomo che l'esempio non è corretto.
Stando ai miei calcoli, il risultato della seconda istruzione p 0 dovrebbe essere:
(
0101: 14, 6, E
011: 9, 6, E
010: 2, 9, W
001: 13, 2, E
) |
LoneWolf |
Originally posted by dirkpitt
Ho fatto anch'io la stessa cosa, ovvero un foglio in Excel e i calcoli del prof risultano errati... non so che dire.... :?
Mi scrivi i tuoi 4 output?
Per vedere se ci ritroviamo.
Adesso reperisco i miei e li inserisco. |
LoneWolf |
Originally posted by dirkpitt
Oltretutto ho svolto (sia con il mio programma, sia a mano con l'aiuto di Excel) l'esempio a pagina 2 del testo, quello con i quattro automi, e il risultato è corretto. Credo quindi che il mio modo di calcolare non sia da considerare sbagliato.
Inoltre, come ha detto LoneWolf, già solo il fatto che secondo l'esempio del prof, l'automa 011 viene spostato in una posizione occupata da un ostacolo, è sintomo che l'esempio non è corretto.
Stando ai miei calcoli, il risultato della seconda istruzione p 0 dovrebbe essere:
(
0101: 14, 6, E
011: 9, 6, E
010: 2, 9, W
001: 13, 2, E
)
Sono i risultati uguali spiaccicati ai miei. |
dirkpitt |
Originally posted by LoneWolf
Mi scrivi i tuoi 4 output?
- prima p 0 --> come prof
(
0101: 12, 6, E
011: 12, 6, W
010: 12, 6, N
001: 12, 6, S
)
- seconda p 0
(
0101: 14, 6, E
011: 9, 6, E
010: 2, 9, W
001: 13, 2, E
)
gli altri non li ho ancora calcolati... ho un qualche problema in qualche punto del progetto... :sad: |
dirkpitt |
Originally posted by LoneWolf
Sono i risultati uguali spiaccicati ai miei.
Beh, è già qualcosa di positivo :D ma rimane sempre il problema di vedere se sono questi quelli corretti o se sono quelli del testo... |
LoneWolf |
Vi posto i miei risultati, che ho calcolato con la tabella excel facendo più volte i calcoli per evitare ogni possibile errore:
p 0 (
001: 12 6 S
010: 12 6 N
011: 12 6 W
0101: 12 6 E
)
p 0 (
001: 13 2 E
010: 2 9 W
011: 9 6 E
0101: 14 6 E
)
p 001 (
001: 22 -2 W
0010: 15 3 W
)
p 011 (
011: 9 6 E
) |
LoneWolf |
Comunque, propongo di andare a parlare di persona con i prof (Torelli, Aguzzoli, Fiorentini) tutti insieme.
Se va uno solo, possono pensare che il testo dell'esercizio sia stato frainteso/non compreso; se andiamo in tanti, allora non possono nascondere la presenza di errori/ambiguità nel testo dell'esercizio.
A me basterebbe che pubblicassero il risultato CORRETTO dell'output sulle istruzioni di pagina 4 e 5, per il resto il mio progetto è quasi completo (devo solo finire la parte di spostamento degli automi). |
dirkpitt |
X LoneWolf
Il mio output finale è lo stesso identico del tuo... |
mitnik |
A me le prime due p 0 risultano come quelle del testo del progetto. Ho un dubbio invece sulla prima p 001. A me risultano presenti sul piano tre automi con prefisso 001. Il primo inserito, il quinto e il sesto. |
LoneWolf |
Originally posted by mitnik
A me le prime due p 0 risultano come quelle del testo del progetto. Ho un dubbio invece sulla prima p 001. A me risultano presenti sul piano tre automi con prefisso 001. Il primo inserito, il quinto e il sesto.
Svelaci in quale arcano modo sei riuscito a far venire i risultati uguali.
Comunque, il tuo quinto elemento non dovrebbe esistere, poiché non puoi creare due automi con lo stesso nome (001).
Aspettiamo la tua illuminante spiegazione! :-D |
dirkpitt |
Originally posted by mitnik
A me le prime due p 0 risultano come quelle del testo del progetto.
Ma come può, nella seconda p 0 l'elemento 011 essere sovrapposto ad un ostacolo???? |
LoneWolf |
Originally posted by dirkpitt
Ma come può, nella seconda p 0 l'elemento 011 essere sovrapposto ad un ostacolo????
Mi stai troppo simpatico! Mi hai letto nel pensiero! :-D |
dirkpitt |
Forse ha ragione mitnik, l'errore è nostro. Una mezza idea ce l'avrei... ci penso su e poi ti faccio sapere.... |
LoneWolf |
Originally posted by dirkpitt
Forse ha ragione mitnik, l'errore è nostro. Una mezza idea ce l'avrei... ci penso su e poi ti faccio sapere....
Io di mezze idee ne ho avute tante, ma i risultati vengono sempre sbagliati (almeno di un paio di automi).
Ho provato a considerare che l'ostacolo si ferma sull'angolo di coordinate 7,8 (per cui la sua superficie sarà di una riga e una colonna in meno), ma anche in quel caso il risultato è errato.
Comunque, facendo una supposizione del genere, allora è anche possibile creare l'ostacolo 3 -5 10 6 che copre abbondantemente la cella 7,6 dove va poi a collocare l'automa 011.
Per cui, anche nei modi più fantasiosi è impossibile far tornare i risultati del prof. |
Teju |
Originally posted by LoneWolf
Io di mezze idee ne ho avute tante, ma i risultati vengono sempre sbagliati (almeno di un paio di automi).
Mezze idee a quantità industriali pure io, peccato che i risultati scarseggino... anche secondo me già il fatto che 011 si fermi in 7,6 con un ostacolo dichiarato in -2,-1 7,8 non quadra..... :sad: |
dirkpitt |
Il nodo del problema, è capire se negli ostacoli, il punto (x1, y1) appartiene o meno all'ostacolo.
Il testo dice:
R(x0,y0,x1,y1) = {(x,y) € RxR | x0<=x<=x1,y0<=y<=y1}
quindi tale punto dovrebbe appartenervi, però provando il contrario, i risultati escono (quasi) corretti... che rabbia!!! |
LoneWolf |
Originally posted by dirkpitt
Il nodo del problema, è capire se negli ostacoli, il punto (x1, y1) appartiene o meno all'ostacolo.
Il testo dice:
R(x0,y0,x1,y1) =
= {(x,y) € RxR | x0<=x<=x1,y0<=y<=y1}
quindi tale punto dovrebbe appartenervi, però provando il contrario, i risultati escono corretti... che rabbia!!!
Abbiamo provato come dici (Teju e io, siamo in telefonoconferenza da un'ora), ma l'automa 001 si ferma sempre e comunque una cella prima di 12,2. |
dirkpitt |
Originally posted by LoneWolf
Abbiamo provato come dici (Teju e io, siamo in telefonoconferenza da un'ora), ma l'automa 001 si ferma sempre e comunque una cella prima di 12,2.
I risultati che mi escono facendo in questo modo sono questi: c'è un solo errore.... (evidenziato)
(
0101: 12, 6, E
011: 12, 6, W
010: 12, 6, N
001: 12, 6, S
)
(
0101: 12, 6, E
011: 7, 6, E
010: 2, 9, W
001: 12, 2, W
)
(
0010: 15, 1, W
001: 16, -2, W
)
(
011: 7, 6, E
) |
LoneWolf |
Originally posted by dirkpitt
I risultati che mi escono facendo in questo modo sono questi: c'è un solo errore.... (evidenziato)
(
0101: 12, 6, E
011: 12, 6, W
010: 12, 6, N
001: 12, 6, S
)
(
0101: 12, 6, E
011: 7, 6, E
010: 2, 9, W
001: 12, 2, W
)
(
0010: 15, 1, W
001: 16, -2, W
)
(
011: 7, 6, E
)
E' l'output del tuo programma o la tabella excel?
Se sono i risultati sulla tabella excel, me la mandi su lucaeffe@freemail.it ?
Grazie |
Teju |
Originally posted by dirkpitt
I risultati che mi escono facendo in questo modo sono questi: c'è un solo errore.... (evidenziato)
...senti, ma se a, b sono i parametri di elimina, quali confronti fai sulle coordinate x0, y0, x1, y1 per capire quando c'è collisione?? |
dirkpitt |
Originally posted by LoneWolf
E' l'output del tuo programma o la tabella excel?
Se sono i risultati sulla tabella excel, me la mandi su lucaeffe@freemail.it ?
Grazie
E' il risultato di entrambi. E qui nasce il solito problema: sbaglio io o sbaglia il testo?????
Cmq ti ho mandato il file di Excel... |
dirkpitt |
Come dicevo prima, alla chiamata di
p 001
l'output del mio programma (e anche il risultato dei miei calcoli) è questo:
(
0010: 15, 1, W
001: 16, -2, W
)
il quale, stando a quanto detto sul testo è errato. La soluzione proposta è invece:
(
001: 12, -1, W
0010: 15, 1, W
)
Ebbene, grazie ad una fortuita intuizione, ho scoperto che il risultato del testo sarebbe quello risultante se la penultima istruzione di inserimento di un automa, cioé
a 16 0 W 001
fosse valida, cosa che non è possibile in quanto l'automa di nome 001 è già presente sul piano. Praticamente, l'esempio del testo sostituisce (erroneamente) l'automa originario con quello nuovo (cosa, ripeto, sbagliata).
Ora vi prego, confermate le mie ipotesi o giuro che... :pccrash:
:D
Sto progetto lo odio ormai profondamente!!!! |
Teju |
Originally posted by dirkpitt
Ebbene, grazie ad una fortuita intuizione, ho scoperto che il risultato del testo sarebbe quello risultante se la penultima istruzione di inserimento di un automa, cioé
a 16 0 W 001
fosse valida, cosa che non è possibile in quanto l'automa di nome 001 è già presente sul piano. Praticamente, l'esempio del testo sostituisce (erroneamente) l'automa originario con quello nuovo (cosa, ripeto, sbagliata).
...ho riletto il testo del progettino e trovo scritto:
Automa(x0, y0, C, eta)
Se la cella di cooeridate (x0, y0) appartiene a qualche ostacolo, allora non esegue alcuna operazione. Altrimenti, se non esiste alcun automa di nome eta lo crea; quindi riposiziona sul piano l'automa eta nella cella di coordinate (x0, y0)....
In pratica forse ma forse dice che: se non esiste devo allocare la memoria e inserirlo nel piano, però sia se è un nuovo automa, sia se esiste già, lo riposiziono sul piano!
...così quadra il tuo discorso... :D
...peccato che a me neanche cambiando le coordinate all'automa risulta corretto!! |
dirkpitt |
Originally posted by Teju
...ho riletto il testo del progettino e trovo scritto:
In pratica forse ma forse dice che: se non esiste devo allocare la memoria e inserirlo nel piano, però sia se è un nuovo automa, sia se esiste già, lo riposiziono sul piano!
Interpretandolo così la storia regge... ma sarà giusto? :? |
LoneWolf |
Allora, dirkpitt ha ragione, l'errore mio e di Teju era quello che non creavamo il secondo ostacolo per una questione di "adiacenza" ad un automa.
Vedendo il tuo disegno ho capito subito che sbagliavamo su quello.
Per la questione dell'automa che ti viene in posizione 16.2, a questo punto credo che si debba considerare quanto segue:
"se si cerca di creare un automa già presente, non lo creo, ma sposto quello già nella struttura nel punto del piano specificato dall'istruzione di creazione".
Inteso così viene tutto giusto.
Comunque il testo è errato sulla questione degli ostacoli, avrebbero dovuto scrivere:
R(x0,y0,x1,y1) = {(x,y) € RxR | x0<=x<=x1-1,y0<=y<=y1-1}
o
R(x0,y0,x1,y1) = {(x,y) € RxR | x0<=x<x1,y0<=y<y1}
Così sarebbe stato tutto molto più chiaro! |
dirkpitt |
Originally posted by LoneWolf
Per la questione dell'automa che ti viene in posizione 16.2, a questo punto credo che si debba considerare quanto segue:
"se si cerca di creare un automa già presente, non lo creo, ma sposto quello già nella struttura nel punto del piano specificato dall'istruzione di creazione".
Inteso così viene tutto giusto.
Comunque il testo è errato sulla questione degli ostacoli, avrebbero dovuto scrivere:
R(x0,y0,x1,y1) = {(x,y) € RxR | x0<=x<=x1-1,y0<=y<=y1-1}
o
R(x0,y0,x1,y1) = {(x,y) € RxR | x0<=x<x1,y0<=y<y1}
Così sarebbe stato tutto molto più chiaro!
Perfetto! :-D allora siamo daccordo praticamente su tutto. Certo che se le specifiche fossero un po' più chiare, uno non perderebbe tempo a correggere errori che si potevano benissimo evitare! |
Teju |
Originally posted by dirkpitt
Perfetto! :-D allora siamo daccordo praticamente su tutto. Certo che se le specifiche fossero un po' più chiare, uno non perderebbe tempo a correggere errori che si potevano benissimo evitare!
Ok, ho capito che in inserimento dell'ostacolo bisogna fare x1-1 e y1-1, e così funziona tutto, ma :evil: cavolino non mi piace come soluzione!!!!! Non ne vedo il senso... però x non impantanarmi troppo vado avanti... :D |
LoneWolf |
Originally posted by dirkpitt
Perfetto! :-D allora siamo daccordo praticamente su tutto. Certo che se le specifiche fossero un po' più chiare, uno non perderebbe tempo a correggere errori che si potevano benissimo evitare!
E' quello che ho detto poco fa ai miei genitori.
Ho perso una giornata di lavoro sul progetto a causa dell'ambiguità del testo del progetto.
Comunque, mi basta decrementare di 1 la x1 e la y1 quando chiamo la funzione che creo l'ostacolo, per cui non mi cambia molto la vita...
Grazie a tutti, e in particolar modo a dirkpitt, per la collaborazione!:-D |
p2p |
ragazzi mi sono un attimino impantanato nell istruzione a x y D 001 che voi avete gia' risolto, in pratica io memorizzo tutto l input dell' istruzione in un array con il sistema realloc di cui si parlava; ok adesso ho provato a fare un po' di cicli con roba tipo isalpha, isdigit ecc solo che non riesco a memorizzare bene i valori... inoltre non è facile dire"il 1 intero lo metti in questa variabile mentre il 2° in quest altra..." . voi come avete fatto?
mi pare qualcuno avesse usato una lista e operato su quella, ma credo che se opero direttamente sull' array sia uguale no?
roba tipo strtok si potrebbe usare? come? :?
grazie grazie :) |
Teju |
Originally posted by p2p
in pratica io memorizzo tutto l input dell' istruzione in un array
Perchè mai tutto l'input in un array?!? Alla fine i primi sono un carattere, 2 numeri e un altro carattere... quando poi arrivi al nome dell'automa allora sì che usi l'array con ridimensionamento! :-D |
p2p |
Originally posted by Teju
Perchè mai tutto l'input in un array?!? Alla fine i primi sono un carattere, 2 numeri e un altro carattere... quando poi arrivi al nome dell'automa allora sì che usi l'array con ridimensionamento! :-D
per che' io faccio:
while (( s = getchar() ) != '\n'){......}
quindi mi continua a prendere input e memorizzarlo.
ok, quindi faccio 2 getchar escludendo lo spazio e poi parto con il while... proviamo.:)
grazie :) |
dirkpitt |
Originally posted by p2p
ragazzi mi sono un attimino impantanato nell istruzione a x y D 001 che voi avete gia' risolto, in pratica io memorizzo tutto l input dell' istruzione in un array con il sistema realloc di cui si parlava; ok adesso ho provato a fare un po' di cicli con roba tipo isalpha, isdigit ecc solo che non riesco a memorizzare bene i valori... inoltre non è facile dire"il 1 intero lo metti in questa variabile mentre il 2° in quest altra..." . voi come avete fatto?
mi pare qualcuno avesse usato una lista e operato su quella, ma credo che se opero direttamente sull' array sia uguale no?
roba tipo strtok si potrebbe usare? come? :?
Usa semplicemente la funzione strtok, sul libro ci sono degli esempi molto utili... |
Teju |
Originally posted by p2p
per che' io faccio:
while (( s = getchar() ) != '\n'){......}
quindi mi continua a prendere input e memorizzarlo.
ok, quindi faccio 2 getchar escludendo lo spazio e poi parto con il while... proviamo.:)
grazie :)
Io uso la getchar() per l'istruzione e la scanf per i dati non stringhe! :-D |
Teju |
:ola:
:roargh: :banana:
Mi sa proprio che ho finito il progettinooooo!!! :D
L'input del prof funziona alla grande, altre prove varie vanno senza problemi...
Ora mi restano, in ordine:
- pulire il codice dalle variabili che non ho mai utilizzato
- scrivere i commenti in un italiano "serio"
- scrivere la relazione
- STUDIARE per l'orale!!!!!!! :shock:
Volevo chiedere un pareri:
:arrow: la relazione come deve essere? Cosa deve contenere? |
p2p |
Originally posted by Teju
Io uso la getchar() per l'istruzione e la scanf per i dati non stringhe! :-D
ho usato anch io la scanf, grazie 1000 teju, mi ero fissato sul dividere quell array e stavo perdendo un sacco di tempo.:-D
secondo me nella relazione(viste quelle degli altri) bisogna semplicemente dire quali strutture si sono usate, i loro costi per le varie operazioni e soprattutto perchè si è preferito quelle, poi dai una descrizione veloce delle funzioni usate(ma non tutti l hanno fatto nei progetti vecchi mi pare...) |
dirkpitt |
Originally posted by Teju
:ola:
:roargh: :banana:
Mi sa proprio che ho finito il progettinooooo!!! :D
L'input del prof funziona alla grande, altre prove varie vanno senza problemi...
Giusto per essere sicuri, potresti postare altri esempi con i relativi risultati? Almeno testiamo un po' tutti i nostri progetti! Grazie :D |
p2p |
cacchio ma non è possibile! sto scrivendo 2 for annidati per passare alla funzione che mi controlla le coordinate degli automi se tali x,y sono occupate da automi:
void ostacolo(int x0,int y0,int x1,int y1)
for ( ;x0<=x1;x0++)
for ( ;y0<y1;y0++)
x0,y0,x1,y1 sono le coordinate di dove si vuole inserire l' ostacolo, sto cercando di farle ciclare e le passo cosi:
cerca_automi(albero,x0,y0);
solo che se non metto parentesi graffe non cicla, se la metto di fianco al 1° for ciclano solo le x e non le y e sul secondo ciclano le y e non le x.
:? :? :?
suggerimenti ne avete ?? |
Teju |
Originally posted by p2p
solo che se non metto parentesi graffe non cicla, se la metto di fianco al 1° for ciclano solo le x e non le y e sul secondo ciclano le y e non le x.
:? :? :?
suggerimenti ne avete ??
:D io metto SEMPRE tutte le parentesi...
Edit: cmq per scorrere io uso sempre i while, i for li uso quando devo "contare"... |
p2p |
scusate ma per controllare un prefisso in un albero mi devo scorrere l intero albero? perche 2 prefissi con valori diversi potrebbero stare in rami totalmente opposti..... o dico una cavolata?? |
Teju |
Originally posted by p2p
scusate ma per controllare un prefisso in un albero mi devo scorrere l intero albero? perche 2 prefissi con valori diversi potrebbero stare in rami totalmente opposti..... o dico una cavolata??
Beh, questo dipende molto da come hai organizzato il tuo albero... :D |
p2p |
quindi è corretto quello che ho detto?
io sto usando un RB... ma alla fine devo scorrerlo tutto quando devo vedere le coordinate degli automi x inserire un ostacolo... devo scorrerlo tutto per vedere se i nomi sono prefissi...alla fine tanto valeva usare un altra lista!!anche se il prof. dice che è inefficiente...
queste considerazioni saranno valide x tutti gli alberi di ogni tipo,a questo punto! meno quelli customizzati...(vedi teju :-o )
che ne dite? |
|
|
|
|