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

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2023-24 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

Ottimizzare esercizio 3

v
val9 (9770 points)
6 30 53
in Es3 by (9.8k points)

C'è qualche modo per evitare di fare 3 for annidati all'interno del for per scorrere i film?

565 views
closed

2 Answers

Best answer
Xriuk (13590 points)
6 24 116
by (13.6k points)
selected by
Cosa intendi con "far scorrere i film"? Per fare cosa? In che punto dell'esercizio? Specifica, grazie.
v
val9 (9770 points)
6 30 53
by (9.8k points)

In leggi_archivio_film. Al fine di realizzare tutto ciò:

    La funzione leggi_archivio_film deve fare in modo che:
    - all'interno di ciascun oggetto Film siano inseriti gli oggetti Attore in modo che:
        - ogni Attore contenga i Film in cui è comparso
        - ogni Film contenga gli Attori che ci hanno lavorato
    - all'interno di ciascun oggetto Film siano contenuti gli oggetti di tipo Regista in modo che:
        - ogni Film contenga i Registi che l'hanno diretto
        - ogni Regista contenga i Film che ha diretto

Xriuk (13590 points)
6 24 116
by (13.6k points)

Ok, allora non capisco i tuoi 3 for annidati.

  1. Tu leggi i film dal file, per ogni film crei la sua istanza della class Film (1° for)
  2. Per ogni attore del film aggiungi l'attore al film e il film all'attore (2° for, dentro al primo)
  3. Per ogni regista del film aggiungi il regista al film e il film al regista (3° for, sempre dentro al primo)
Così sono 3 for, con una profondità di 2. E non credo ci sia modo di evitarlo, le operazioni che devi comunque fare sono queste. Puoi sostituire i 2 for interni (punti 2 e 3) con due funzioni esterne che richiami, però questo è un altro discorso, a livello di logica sempre 3 for restano.
a.capobianco1 (16770 points)
11 54 165
by (16.8k points)
edited by
Scusami per quanto riguarda la seconda parte del punto 2, oltre ad aggiungere il film all'attore, non si devono aggiungere anche i coprotagonisti all'attore?

e per fare questo credo vada ciclata nuovamente la lista ACTORS per ogni attore al fine di aggiungerla in blocco (ma privata dell'attore stesso) all'attore del ciclo superiore… no?


Ed ecco quindi i 3 for: Per ogni film,  per ogni attore, per ogni attore
Xriuk (13590 points)
6 24 116
by (13.6k points)
@a.capobianco1 Io i coprotagonisti non li ho aggiunti all'attore: tu hai già una lista di film associati all'attore, e ogni film ha a sua volta una lista di attori (contenente l'attore stesso e i suoi coprotagonisti), puoi arrivarci mettendo insieme tutti gli attori ed escludento l'attore principale.

Fare quello che dici tu è ridondante, in quanto otterresti una duplicazione di informazioni che già hai e che ti puoi ricavare, poi per quanto riguarda magari le ottimizzazioni per le prestazioni è un altro discorso.
a.capobianco1 (16770 points)
11 54 165
by (16.8k points)
Ho capito quello che intendi… quindi l'alternativa che mi stai suggerendo è di calcolare i coprotagonisti solo quando richiesti mediante l'omonomo metodo e non tutti insieme per tutti gli attori come ho fatto io giusto? Questo perché se creo un set con tutti i copratogonisti da associare ad ogni attore sto creando dal principio le risposte a tutte le possibili chiamate del metodo mentre potrei calcolarle al momento della richiesta solo per quel determinato attore...
Xriuk (13590 points)
6 24 116
by (13.6k points)
edited by

@a.capobianco1 È un discorso di ottimizzazione:

  • O crei l'insieme di coprotagonisti subito e lo restituisci quando necessario
    Però il metodo potrebbe non essere chiamato mai, in questo caso hai creato l'insieme per nulla.
  • Oppure lo calcoli ogni volta che viene chiamato il metodo
    Però il metodo potrebbe essere chiamato mille volte di fila, in questo caso risulterebbe molto più lento.

Sono due approcci differenti, dipende dal numero di volte che viene chiamato il metodo, in questo esercizio credo sia irrilevante. Sono gusti...

a.capobianco1 (16770 points)
11 54 165
by (16.8k points)
Ok. Grazie. Ora ho un quadro più chiaro.
_andrea_ (45670 points)
11 42 297
by (45.7k points)
Scorrendo i film devi per forza scorrere anche ogni attore dentro al film, e anche ogni regista, almeno credo. Dato che i registi e gli attori sono stringhe devi per forza interpretarli in qualche modo, e quel modo è prendere il corrispondente valore dal dizionario degli attori e dei registi