Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Problema figli 3 esercizio 4 HW

A
AlessandroPecchini (780 points)
2 5 12
in Es3 by (780 points)

Buonasera a tutti,

Sono giorni che sto combattendo con l'esercizio 3 de 4° Homework in quanto ho capito la consegna e come svolgere l'esercizio, ma quando vado a creare l'immagine, la funzione si perde sempre un figlio.
Sono sicuro che gli alberi siano corretti perchè tramite una funzione ausiliaria ("scrivi albero") ottengo una rappresentazione grafica (stringa) dell'albero, in cui sono presenti tutti i figli nell'ordine corretto.
Vorrei sapere se anche a qualcuno di voi è capitato un problema simile e come ha risolto.

Grazie a tutti in anticipowink

750 views
closed

3 Answers

Best answer
a.capobianco1 (16770 points)
11 54 165
by (16.8k points)
selected by
Viene difficile immaginare dove possa essere l'errore... Prova a postare i path completi dei figli mancanti nella cartella informatica così magari possiamo cercare di trovare qualcosa in comune...
A
AlessandroPecchini (780 points)
2 5 12
by (780 points)
edited by
Grazie ad un print messo sotto l'istruzione in cui dico di colorare una fetta di immagine con il valore a tuple del nodo, ho trovato che la mia funzione che 'colora', tocca tutti i nodi, infatti loutput è:

dirs/12345678901234567890123456789012345678901234567890 [(100, 105, 114), (115, 47, 49), (50, 51, 52), (53, 54, 55), (56, 57, 48), (49, 50, 51), (52, 53, 54), (55, 56, 57), (48, 49, 50), (51, 52, 53)]
12345678901234567890123456789012345678901234567890 [(49, 50, 51), (52, 53, 54), (55, 56, 57), (48, 49, 50), (51, 52, 53), (54, 55, 56), (57, 48, 49), (50, 51, 52), (53, 54, 55), (56, 57, 48)]
12345678901234567890123456789012345678901234567890 [(49, 50, 51), (52, 53, 54), (55, 56, 57), (48, 49, 50), (51, 52, 53), (54, 55, 56), (57, 48, 49), (50, 51, 52), (53, 54, 55), (56, 57, 48)]
ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ [(65, 66, 67), (68, 69, 70), (71, 72, 73), (74, 75, 76), (77, 78, 79), (80, 81, 82), (83, 84, 85), (86, 87, 88), (89, 90, 65), (66, 67, 68)]
12345678901234567890123456789012345678901234567890 [(49, 50, 51), (52, 53, 54), (55, 56, 57), (48, 49, 50), (51, 52, 53), (54, 55, 56), (57, 48, 49), (50, 51, 52), (53, 54, 55), (56, 57, 48)]
abcdefghijklmnopqrstuvwzyzabcdefghijklmnopqrstuvwzyz [(97, 98, 99), (100, 101, 102), (103, 104, 105), (106, 107, 108), (109, 110, 111), (112, 113, 114), (115, 116, 117), (118, 119, 122), (121, 122, 97), (98, 99, 100)]
12345678901234567890123456789012345678901234567890 [(49, 50, 51), (52, 53, 54), (55, 56, 57), (48, 49, 50), (51, 52, 53), (54, 55, 56), (57, 48, 49), (50, 51, 52), (53, 54, 55), (56, 57, 48)]
ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ [(65, 66, 67), (68, 69, 70), (71, 72, 73), (74, 75, 76), (77, 78, 79), (80, 81, 82), (83, 84, 85), (86, 87, 88), (89, 90, 65), (66, 67, 68)]
abcdefghijklmnopqrstuvwzyzabcdefghijklmnopqrstuvwzyz [(97, 98, 99), (100, 101, 102), (103, 104, 105), (106, 107, 108), (109, 110, 111), (112, 113, 114), (115, 116, 117), (118, 119, 122), (121, 122, 97), (98, 99, 100)]

Dove a sinistra ho il valore stringato del nodo ed a destra quello colorato.

l'immagine corretta è scritta, a meno di indentazioni, in questo modo:

123456789012345678901234567890 123456789012345678901234567890 123456789012345678901234567890
 ABCDEFGHIJKLMNOPQRSTUVWXYZABCD 123456789012345678901234567890
 abcdefghijklmnopqrstuvwzyzabcd 123456789012345678901234567890
 ABCDEFGHIJKLMNOPQRSTUVWXYZABCD
 abcdefghijklmnopqrstuvwzyzabcd

Questo vuoldire che nella mia funzione entrano tutti i nodi che sono anche presenti nell'immagine e nel giusto ordine (tolto il 'dirs\' iniziale).

La mia immagine invece esce in questo modo:

dirs1234567890123456789012345 ABCDEFGHIJKLMNOPQRSTUVWXYZABCD 123456789012345678901234567890
 abcdefghijklmnopqrstuvwzyzabcd ABCDEFGHIJKLMNOPQRSTUVWXYZABCD
 abcdefghijklmnopqrstuvwzyzabcd

Quindi alla directory generale manca il primo figlio (con relativi figli).
L'albero corretto stringato sarebbe:

dirs/12345678901234567890123456789012345678901234567890
|---- 12345678901234567890123456789012345678901234567890
|----|---- 12345678901234567890123456789012345678901234567890
|---- ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ
|----|---- 12345678901234567890123456789012345678901234567890
|---- abcdefghijklmnopqrstuvwzyzabcdefghijklmnopqrstuvwzyz
|----|---- 12345678901234567890123456789012345678901234567890
|----|---- ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ
|----|---- abcdefghijklmnopqrstuvwzyzabcdefghijklmnopqrstuvwzyz

 

Nella mia funzione proprio sopra il print di controllo da cui si nota che il nodo è corretto, prendo una fetta di 10 pixel e ci metto la lista di colori
a.capobianco1 (16770 points)
11 54 165
by (16.8k points)
Per questo avevo detto da disegnare i 'figli dispersi' di informatica :) è una cartella più facile da usare come debug
A
AlessandroPecchini (780 points)
2 5 12
by (780 points)
Mia immagine (sbagliata):

dirsInformatica Hardware Architetture Processori CISC x86 IntelHaswell.txt
 Pentium4.txt
 RISC MIPS.txt
 cache.txt
 memorie.txt
 storia.txt
 Software Linguaggi Funzionali Python.txt
 Scheme.txt
 storia.txt
 Imperativi Pascal.txt
 Python.txt
 storia.txt
 OO Java.txt
 Python.txt
 Smalltalk.txt
 storia.txt
 storia.txt
 SistemiOperativi MacOS.txt
 Unix.txt  
 Windows.txt
 storia.txt

Immagine corretta:

Informatica Hardware Architetture Processori CISC x86 AMDPhenom.txt
 IntelHaswell.txt
 Pentium4.txt
 RISC ARM.txt
 MIPS.txt
 cache.txt
 memorie.txt
 storia.txt
 Software BasiDati
 Linguaggi Funzionali Lisp.txt
 Python.txt
 Scheme.txt
 storia.txt
 Imperativi C.txt
 Pascal.txt
 Python.txt
 storia.txt
 OO CPP.txt
 Java.txt
 Python.txt
 Smalltalk.txt
 storia.txt
 storia.txt
 SistemiOperativi Linux.txt
 MacOS.txt
 Unix.txt
 Windows.txt
 storia.txt

Albero stringato:

 dirs\Informatica
|---- Hardware
|----|---- Architetture
|----|----|---- Processori
|----|----|----|---- CISC
|----|----|----|----|---- x86
|----|----|----|----|----|---- AMD_Phenom.txt
|----|----|----|----|----|---- Intel_Haswell.txt
|----|----|----|----|----|---- Pentium4.txt
|----|----|----|---- RISC
|----|----|----|----|---- ARM.txt
|----|----|----|----|---- MIPS.txt
|----|----|---- cache.txt
|----|----|---- memorie.txt
|----|----|---- storia.txt
|---- Software
|----|---- BasiDati
|----|---- Linguaggi
|----|----|---- Funzionali
|----|----|----|---- Lisp.txt
|----|----|----|---- Python.txt
|----|----|----|---- Scheme.txt
|----|----|----|---- storia.txt
|----|----|---- Imperativi
|----|----|----|---- C.txt
|----|----|----|---- Pascal.txt
|----|----|----|---- Python.txt
|----|----|----|---- storia.txt
|----|----|---- OO
|----|----|----|---- CPP.txt
|----|----|----|---- Java.txt
|----|----|----|---- Python.txt
|----|----|----|---- Smalltalk.txt
|----|----|----|---- storia.txt
|----|----|---- storia.txt
|----|---- SistemiOperativi
|----|----|---- Linux.txt
|----|----|---- MacOS.txt
|----|----|---- Unix.txt
|----|----|---- Windows.txt
|----|----|---- storia.txt

Scusa non mi ero concentrato sulla parola 'Informatica' ahahah
A
AlessandroPecchini (780 points)
2 5 12
by (780 points)
Questi non li colora:

dirs\Informatica\Hardware\Architetture\Processori\CISC\x86\AMD_Phenom.txt
dirs\Informatica\Hardware\Architetture\Processori\RISC\ARM.txt
dirs\Informatica\Software\BasiDati
dirs\Informatica\Software\Linguaggi\Funzionali\Lisp.txt
dirs\Informatica\Software\Linguaggi\Imperativi\C.txt
dirs\Informatica\Software\Linguaggi\OO\CPP.txt
dirs\Informatica\Software\SistemiOperativi\Linux.txt
A
AlessandroPecchini (780 points)
2 5 12
by (780 points)
Nonostante quelli non li colora, comunque dai print sotto l'istruzione che dovrebbe colorarli, escono, quindi la funzione non li ignora
a.capobianco1 (16770 points)
11 54 165
by (16.8k points)
edited by
Sono fuori casa tuttavia, da una rapida occhiata, potresti avere, tra gli altri, un problema con il primo figlio DI TIPO FOGLIA che deve essere nella stessa riga del padre... Sembra venga sovrascritto dal figlio seguente... Poi vedo se riesco a fare un debug più accurato
A
AlessandroPecchini (780 points)
2 5 12
by (780 points)
Grazie mille !
In ogni caso non sono sicuro della svrascrizione, in quanto se così fosse dovrebbe eliminare tutti i primi figli dei nodi che hanno più di un figlio, quelli che non scrive sono sempre gli stessi, quindi non è una cosa casuale, ma non ho notato nient'altro di utile
a.capobianco1 (16770 points)
11 54 165
by (16.8k points)
Io leggendo l'elenco degli ELEMENTI che non ti disegna, ho ancora di più l'impressione che si tratta sempre di 1 figli di tipo FOGLIA (anche basedati è foglia) e non primo figlio di tipo CARTELLA con elementi al suo interno (se non li avesse sarebbe foglia). Forse, quando controlli se è primo figlio, dopo averlo disegnato, non aumenti di 3 px la riga?
A
AlessandroPecchini (780 points)
2 5 12
by (780 points)
Era come dicevate tu ed @_Andrea_, non incrementavo la riga quando scrivevo il primo figlio e mi si sovrascriveva,
Grazie!
v
val9 (9770 points)
6 30 53
by (9.8k points)
In che senso perde un figlio? Non lo disegna proprio oppure non lo collega al padre?
A
AlessandroPecchini (780 points)
2 5 12
by (780 points)
Non lo disegna proprio, è come se avesse un figlio in meno, ma i figli che perde a me sembra siano casuali, nel test in cui rappresenti dirs\tuttinumeri perde sempre il primo figlio, in informatica è abbastanza casuale la cosa.
L' immagine esce anche fuori con le giuste indentazioni e tutto ma perdendosi i figli strada facendo non esce corretta perché a volte questi figli che non scrive sono radici di sotto alberi quindi perde anche pezzi importanti diciamo.

Non so se ho spiegato bene ahahah
_andrea_ (45670 points)
11 42 297
by (45.7k points)
Forse per qualche errore sovrascrvivi alcuni figli quindi quelli di prima spariscono
v
val9 (9770 points)
6 30 53
by (9.8k points)
Hai impostato per caso qualche controllo per cui la funzione ignora un file/directory se ne ha già incontrato un altro con lo stesso nome?
A
AlessandroPecchini (780 points)
2 5 12
by (780 points)
Rispondo ad entambi:

Non sovrascrive sicuramente, perché la funzione è fatta in modo da riconoscere il primo figlio, colorare i primi 5 pixel di bianco e spostare la colonna proprio all'inizio del primo figlio, dopo ciò richiamo la funzione colora a quella riga ed a quella colonna passando come argomento il figlio ricordando la riga del primo figlio e quella a cui mi trovo quando avrò finito di colorare l'albero del primo figlio, creo la linea verticale che collega al secondo figlio, il quale, non essendo il primo, non ha i primi 5 pixel bianchi, a questo punto richiamo la funzione sul secondo figlio e cosi via con un for che cicla dentro la lista dei figli ordinata grazie ad una lambda (l'ordinamento è lo stesso che uso per scrivere l'albero a "parole" e lì mi escono giusti).
spiegarlo così è difficile e credo lo sia anche di più capirlo, però non so proprio dove possa essere l'errore.
 

L'unico controllo che ho è quello se è il primo figlio o meno, ma in entrambi i casi viene richiamata la funzione colora quindi non dovrebbe essere lì il problema
_andrea_ (45670 points)
11 42 297
by (45.7k points)
A me capitava con la cartella informatica perché trovata una sottocartella vuota, però il programma che usavo per scompattare lo zip non scompattava le cartelle vuote perché le riteneva "inutili" quindi mi mancavano alcuni figli che erano cartelle vuote. Vedi se potrebbe essere questo il problema
A
AlessandroPecchini (780 points)
2 5 12
by (780 points)
Purtroppo alcuni dei figli che non considera hanno a loro volta dei figli, quindi non è questo il problema.
Il problema delle cartelle vuote l'ho avuto nel contare le foglie, ma quello sono riuscito a risolverlo