 | |
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 |
[Progetto] Samegame3 Clicca QUI per vedere il messaggio nel forum |
GiKappa |
nella struttura dell'albero rb che campi avete inserito? usate solo i puntatori? e dite che bastano solo i puntatori *left, *right e *up o bisogna aggiungerne uno *down?
help! |
imperator |
ma già con i puntatori left e right discendi l'albero...a sx o dx..
io personalmente non ho aggiunto altri puntatori |
GiKappa |
quindi la struttura di ogni nodo sarebbe una biglia con le coordinate, il valore e il colore?
perchè non mi è chiaro come usare gli alberi per spostarmi all'interno della scacchiera.. |
imperator |
esatto le informazioni che ti servono all'interno di ogni biglia sono coordinate, colore, valore |
GiKappa |
ok, però ad esempio se il nodo A contiene la biglia in posizione (x,y), i suoi figli conterranno le biglie in quale posizione?
non sono molto ferrato con gli alberi!:asd:
edit: avevo pensato a fare in modo che i figli a sinistra di un nodo fossero quelli adiacenti per le ascisse, mentre quelli a destra fossero adiacenti per le ordinate, ma mi escono dei doppioni. |
imperator |
allora se crei un albero di biglie non puoi pretendere che i figli siano le celle adiacenti (anche perchè le biglie adicenti sono 4, mentre tu hai solo 3 puntatori: padre e i 2 figli).
se vuoi una struttura in cui memorizzare una biglia e tenere traccia delle biglie adiacenti devi costruirti un grafo tramite liste di adiacenza.
con un albero le "figlie" di una biglia dipendono da quando inserisci le biglie...
ad esempio...supponi aver una albero lessicografico in cui memorizzi dei colori...
se io inserisco nell'ordine "ocra", "arancione", "marrone"
avro un albero con radice ocra, figlio sx arancione, figlio dx marrone...
ma se inserisco nell'ordine arancione, ocra, marrone avrò un albero con radice arancione che avrà un figlio dx ocra che a sua volta avrà un figlio sx marrone...
quindi con il primo insieme di inserimenti ho un albero con 2 livelli (radice e i due figli)
con secondo insieme di inserimenti ho un albero con 3 livelli (radice [arancione], figlio dx della radice [ocra], figlio sx di ocra [marrone])
cmq se vuoi implementare dei grafi tramite liste di adiacenza puoi guardare alcuni vecchi progetti come "daltonismo" |
pirlo21 |
ragazzi ma voi usate tutti gcc come compilatore? io ne uso un altro e va tutto ok, oggi ho provato gcc perchè il prof dice di usare quello e il programma non funziona più... |
darkshadow |
che problemi ti da??
cmq ho sempre usato gcc. |
pirlo21 |
mi da qualche warning e se compilo con -ansi anche qualche errore... inoltre quando lancio il programma mi si blocca subito durante l'inserimento dei dati, mentre con l'altro compilatore funziona perfettamente... |
darkshadow |
forze usi gets o roba simile per le stringhe |
GiKappa |
Originally posted by imperator
con un albero le "figlie" di una biglia dipendono da quando inserisci le biglie...
ad esempio...supponi aver una albero lessicografico in cui memorizzi dei colori...
se io inserisco nell'ordine "ocra", "arancione", "marrone"
avro un albero con radice ocra, figlio sx arancione, figlio dx marrone...
ma se inserisco nell'ordine arancione, ocra, marrone avrò un albero con radice arancione che avrà un figlio dx ocra che a sua volta avrà un figlio sx marrone...
quindi con il primo insieme di inserimenti ho un albero con 2 livelli (radice e i due figli)
con secondo insieme di inserimenti ho un albero con 3 livelli (radice [arancione], figlio dx della radice [ocra], figlio sx di ocra [marrone])
ok, credo di aver capito: l'albero si costruisce in base a quando inserisco le diverse biglie.
quello che non mi è chiaro è il tuo esempio sui colori. sono due modi di procedere per inserire le biglie?
grazie in anticipo! scusa se ti faccio perdere tempo, ma se capisco come implementare questa cosa, poi sul resto posso ragionarci. |
imperator |
Originally posted by GiKappa
quello che non mi è chiaro è il tuo esempio sui colori. sono due modi di procedere per inserire le biglie?
si ti ho fatto un esempio per farti vedere come l'albero che si viene a creare può essere diverso, a seconda dell'ordine in cui avvengono gli inserimenti, pur mantenendo lo stesso insieme di colori da inserire |
GiKappa |
ok! perfetto! era questo che non capivo! grazie!
in fase di esplorazione quale dei due è migliore? quello bilanciato o quello che prosegue con figlio dx-figlio sx? |
imperator |
attenzione...ho detto che si tratta di un semplice albero binario di ricerca (lessicografica)...non ho detto che questo era bilanciato.
il fatto che un albero sia bilanciato non dipende dagli inserimenti...ma proprio dal tipo di albero;
ad esempio albero RB è bilanciato...ma un generale albero di ricerca non è detto che sia bilanciato...
ad esempio supponi di avere un albaro binario di ricerca i cui nodi contengono degli interi e supponi di inserire nell'ordine 1, 2, 3, 4, 5.
bene questo albero di ricerca degenera sostanzialmente in un lista monodirezionale (1 ha figlio dx 2 che a sua volta a figlio dx 3 che a sua volta a figlio dx 4 etc..)
se usi però un albero RB invece l'albero è bilanciato, grazie alle rotazioni e ai colori dei nodi |
greensheep |
Originally posted by imperator
tieni presente che non sono delle vere e proprie combinazioni matematiche... hai la regola che se cancelli la colonna x non puoi cancellare la colonna x-1 e x+1...
io non so tuttora che struttura usare per la funzione minore... idee? |
GiaXVI |
anche io vorrei sapere che struttura utilizzare per la funzione minore, io pensavo a una lista, ma ancora nn ho guardato bene!
ho anche una domanda poco tecnica...se si consegna un progetto che nn implementa tutte le funzioni correttamente il prof te lo boccia o ti viene incontro??? |
gicagi |
compilando con -Ansi mi da il seguente:
<command line>:4:4: missing '(' after predicate
ma non riesco a capire cosa voglia dire.... |
pirlo21 |
dovrebbe essere che alla riga 4 hai dimenitcato una ( |
imperator |
qualcuno è riuscito a fare la funzione riduzione?
se si dove ha preso ispirazione? |
GiaXVI |
che algoritmo bisogna usare secondo voi x vedere quali sono le colonne col valore + alto nelle funzione riduzione???
qualcuno è riuscito a farla???? |
kalbiz |
purtroppo no, ho tentato diverse strade, ma nulla.
anche la funzione per avere i totali per riga, ho usato due indici for in matrice... abbastanza una schifezza ... ma non ho trovato alternative.
voi già per la funzione di calcolo sulle somme righe, cosa avete utilizzato ? |
greensheep |
nessumo mi può ispirare dicendomi almeno che struttura ha usato per la funzione minore?:sad: |
Kira82 |
Ragazzi io sono rimasta bloccata sulla funzione minore e sulla funzione riduzione...c'è qualcuno che è riuscito a farle e mi può dare qualche suggerimento?? |
Fredx |
qualcuno è riuscito a trovare un algoritmo efficiente per il conteggio del punteggio massimo? io ne ho trovato uno ma non è per nulla efficiente...
per le relazioni tra i colori ho invece usato semplicemente un grafo orientato, ad esempio se giallo è minore di blu, nel grafo giallo è adiacente a blu... sembra funzionare bene... |
GiaXVI |
nella funzione Fusione come avete fatto a controllare se i 2 blocchi delle biglie date in input sono adiacenti????? |
greensheep |
Originally posted by Fredx
qualcuno è riuscito a trovare un algoritmo efficiente per il conteggio del punteggio massimo? io ne ho trovato uno ma non è per nulla efficiente...
per le relazioni tra i colori ho invece usato semplicemente un grafo orientato, ad esempio se giallo è minore di blu, nel grafo giallo è adiacente a blu... sembra funzionare bene...
doppio for appena ne trova una adiacente fermo il i 2 for.
nel caso peggiore ho log(n)*log(m) |
Kira82 |
Aiutoooo...ho un problema ( a parte che mi manca da fare ancora la funzione riduzione..si accettano suggerimenti!!)..quando provo il programma funziona, ma se inserisco l'input del prof mi dà problemi. Esattamente il punto è
...
s 0 1
F 0 0 0 1
s 0 1
...
e il problema è che non mi effettua la fusione, ma se tolgo il primo s 0 1 allora la fusione funziona..funziona anche se inserisco un'altra funzione tra s 0 1 e F 0 0 0 1.....???????
qualcuno riesce a spiegarmi perchè????? |
Vid |
Spiegare il perchè è difficile senza avere il codice sottomano.
La cosa migliore che puoi fare, secondo me, è di giocare al calcolatore.
Armati di carta, matita, gomma, logica e un fottio di pazienza e debuggati il codice, oppure usa un debugger se ti trovi meglio.
Io personalmente uso il primo metodo, e sebbene a volte ci metti ORE a trovare il bug, se ti impegni lo trovi.
La pazienza è la virtù dei forti e la caratteristica che più odio del C è che i bug tendono a nascondersi in parti del codice lontane anni luce da quella in cui si presentano (perlomeno nel mio codice :p ) |
Kira82 |
Ma non so se il debugger può essere utile perchè non è che mi restituisce un errore, solo che non fa quello che dovrebbe, ovvero la fusione.
Ho notato che è un problema delle due funzioni, cioè se le metto in successione la seconda non fa il 'suo dovere' ma se sono separate anche da una sola altra funzione tutto è ok.
Secondo voi ho sbagliato qualcosa con i puntatori? O come dice Vid devo debuggare?
Cmq qualcuno mi può dire la logica per trovare le colonne da cancellare nella riduzione..io sono riuscita a scrivere la funzione che somma i valori delle celle di un blocco in una colonna, ma poi come faccio a trovare le colonne che sommate danno il punteggio max?? |
Larios |
per trovare l'errore fai eseguire tutta la sequenza di codice che ti da problemi, aggiungendo dei return per esempio che ti fanno terminare il programma dopo poche operazioni...poi ne fai eseguire altre in piu se quelle funzionano e cosi via... con un po di pazienza troverai il punto esatto che ti da l'errore... usa anche printf per verificare i dati che entrano sulle funzioni che testi. |
Kira82 |
Ho trovato il punto, sembra che dopo l'input di 's' oppure 'F' non entri nel case successivo.
Cioè ho provato a creare un case 'w' che esegue un printf, se metto
s 0 1
w 0 0
F 0 0 0 1
il programma esegue correttamente la 's' e la 'F' ma salta la 'w'; viene la stessa cosa con i case dopo 'F' cioè con
F 0 0 0 1
w 0 0
s 0 1
Non capisco perchè non mi entra nei case se li metto in input dopo la 's' o la 'F'.........aiutoooooooooooooooo!
Risolto..ho trovato l'errore!:) |
greensheep |
raga come faccio a testare se il progetto funziona con gcc?
ho scaricato lo zip e ora? |
lackno |
lo apri, vai su dos, vai nella cartella dove l'hai aperto (non devi installare niente da li mi sembra) e poi esegui gocs
dopo usi il solito gcc -blabla prog.c |
Kira82 |
Scusate ma che logica avete usato per calcolare la somma massima delle colonne..come faccio a fare tutte le somme possibili? |
Larios |
io lo sto impostando in questo modo...anche se non è per niente facile questa parte devo dire :/
per trovare tutte le combinazioni di somme generiche...
esempio 1 2 3
trovo tutte le combinazioni di somme partendo da 1
fai 1 + 2 parte la ricorsione sul 2
2 + 3
3 non ha combinazioni e ritorna il suo valore... quindi 2+3=5 ritorni questo valore e 1+2 = 6
poi fai 1 3= 4
fine combinazioni partendo da 1....
e poi vai avanti col numero successivo il 2 che avra solo 2 3 e quindi 5.
e poi il 3 che fa 3...
da qui ti fai tutti confronti di volta in volta e tiri fuori il punteggio piu alto, devi anche salvarti le posizioni(gli indici delle colonne) man mano perchè poi devi sapere che colonne hanno formato il totale migliore e saranno da cancellare. |
darkshadow |
adesso sto testando il programma e fino ad un certo punto tutto va bene poi i risultati che ci sono nel nesto non coincidono più con i miei.
l'input è:
i 6 3 0 0 f1.txt
i 4 5 -4 -2 f2.txt
i 6 3 0 -6 f1.txt
b 0 -1 6 blu
n
i 1 5 -4 2 f3.txt
i 1 5 -5 -3 f3.txt
b 0 -4 2 giallo
n
s 0 1
r 0 1
< rosso bianco
< bianco blu
< blu rosso
s 0 1
F 0 0 0 1
s 0 1
r 0 1
b 0 -1 8 blu
F 0 -1 0 -2
F 1 -3 -3 -1
r 0 -1
n
r 0 2
< giallo azzurro
< azzurro bianco
F -2 -1 -2 -2
n
b 1 -2 12 blu
b -4 -4 3 blu
r -3 0             // da questo punto alcuni risultati non coincidono più
i 1 5 -6 1 f3.txt
F -1 1 -6 1
F 1 3 2 5
r 1 3
r 1 3
n
r -1 1
r -6 -3
r -6 -3
r -6 1
r -6 1
r -6 1
n
f
ho fatto tutti i grafici a mano per vedere se era il programma che non andava o se c'e' qualche errore nel testo.
facendo i conti mi ritrovo che il totale di ciascuna colonna è:
colonna x = -5   totale = 1
colonna x = -4   totale = 7
colonna x = -3   totale = 10
colonna x = -2   totale = 8
colonna x = -1   totale = 3
colonna x = 0    totale = 15
colonna x = 1    totale = 23
colonna x = 2    totale = 7
nel testo dice che il punteggio massimo è : 38
ma invece il punteggio massimo che si può ottenere è 37.
Tale risultato si ottiene eliminando le colonne: x = -4, x = -2, x = 0 e x = 2
qualcuno di voi può confermare??? |
imperator |
se prendi le colonne -4, -2 e 1 il totale è 38 |
darkshadow |
azz hai ragione!!
devo rivedere il codice della riduzione.
il resto sembra andare bene.
Speriamo!!!
Forza raga che ci siamo quasi. |
Fredx |
Originally posted by darkshadow
facendo i conti mi ritrovo che il totale di ciascuna colonna è:
colonna x = -5   totale = 1
colonna x = -4   totale = 7
colonna x = -3   totale = 10
colonna x = -2   totale = 8
colonna x = -1   totale = 3
colonna x = 0    totale = 15
colonna x = 1    totale = 23
colonna x = 2    totale = 7
nel testo dice che il punteggio massimo è : 38
ma invece il punteggio massimo che si può ottenere è 37.
Tale risultato si ottiene eliminando le colonne: x = -4, x = -2, x = 0 e x = 2
qualcuno di voi può confermare??? [/B]
no, è giusto 38, che si ha cancellando la colonne -4, -2 e 1.
8 + 7 + 23 = 38 |
kalbiz |
oramai a titolo informativo .... questo output dopo il primo comando s 0 1 (è uguale al testo)
(blu
0,1 valore : 1
1,1 valore : 1
1,0 valore : 3
1,-1 valore : 2
2,-1 valore : 8
0,-1 valore : 6
-1,-1 valore : 6
-1,-2 valore : 2
)
mi spiegate come è possibile che le colonne di valore massimo diano giustamente 16, dovrei eliminare, tutte le biglie che stanno quindi sulla colonna x= -1 e x = 2 (la cui somma è 16)
quindi eliminerei
(-1,-1)
(-1,-2)
(2,-1)
ok se elimino solo queste biglie, come è possibile che dopo la prima riduzione alla seconda richiesta di s 0 1
vengano stampate solo due biglie ????
quando riduco e stabilizzo le biglie si dovrebbero ricompattare e riformare il blocco ... |
kalbiz |
ok ho trovato l'errore ... la riduzione non spostava le biglie correttamente in x-1 |
GiaXVI |
sbaglio o il calendario x gli eventuali orali tarda ad uscire??? |
alexn1 |
Originally posted by GiaXVI
sbaglio o il calendario x gli eventuali orali tarda ad uscire???
Sono usciti... Che fatica essere ammessi all'orale di 'sto esame! |
Java |
perchè io non li trovo? |
Java |
vero vero....
il pc del lavoro qua è un rottame :D |
|
|
|
|