Do you need any help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2021-22 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 2021-22 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.

VIDEOLEZIONI DEL CORSO DI FONDAMENTI DI PROGRAMMAZIONE AA20-21

PROGRAMMING COURSE VIDEOCONFERENCES AY20-21

ORDINAMENTO RETTANGOLI: TRANSITIVITA'

michelescara (1330 points)
0 2 6
asked Nov 26, 2020 in HW6 obbligatorio by michelescara (1,330 points)
Ciao a tutti, sto cercando di risolvere un problema sull'ordinamento dei rettangoli. Sono riuscito a salvare ogni rettangolo in una classe Rectangle e ho definito l'operatore > per stabilire se un rettangolo sovrappone un altro, in modo tale da ordinarli facilmente in una lista tramite sorted. Il problema si pone quando due rettangoli non si intersecano tra loro e hanno lo stesso numero di intersezioni ma con altri rettangoli. In questo caso il mio algoritmo non riconosce quale rettangolo è stato disegnato prima. So che dovrei implementare un algoritmo che si basa sulla transitività, ma non mi viene in mente un modo per farlo. Qualche consiglio? Dovrei continuare su questa strada o cambiare completamente approccio?
388 views

4 Answers

Best answer
T
Tobia (1580 points)
1 10 18
answered Nov 26, 2020 by Tobia (1,580 points)
selected Nov 27, 2020 by michelescara
Inizialmente ci avevo provato anche io e sono incappato nello stesso problema, per risolverlo avevo creato una clausola nella definizione di minore che si attivava se i due triangoli erano inconfrontabili. in poche parole quello che facevo in questo caso è andare a trovare un  terzo rettangolo che intersecava entrambi i rettangoli che volevo confrontare e in base a quello vedeva quale dei due veniva prima. Purtroppo anche così perdi molti casi, alla fine ho concluso che il lavoro da fare per controllare tutto sarebbe stato troppo problematico e ho cambiato approccio.
michelescara (1330 points)
0 2 6
commented Nov 27, 2020 by michelescara (1,330 points)
edited Nov 27, 2020 by michelescara
Come hai fatto a prendere in esame il terzo rettangolo? È proprio quello che non riesco a fare. Molto probabilmente cambierò approccio, ma volevo fare un ultimo tentativo
T
Tobia (1580 points)
1 10 18
commented Nov 27, 2020 by Tobia (1,580 points)
cercavo un terzo rettangolo che aveva i due rettangoli come intersezioni esaminando tutte le intersezioni; trovato questo richiamavo la funzione < tra il primo e il terzo rettangolo e poi tra il secondo e il terzo, se uno veniva True e l'altro False allora trovavo l'ordinamento, ma fatto tutto questo il miglioramento riportato era praticamente nullo, quindi come ho già detto ho deciso di cambiare approccio
twgever (15190 points)
7 27 105
answered Nov 26, 2020 by twgever (15,190 points)
Potresti costruirti una lista con i rettangoli ordinati.
[rosso,blu,giallo,verde,....,marrone] o simile. La lista te la puoi costruire confrontando i quadrati confrontabili a due a due. Semmai dovessi riuscirci, staresti a cavallo, perchè ti basta vedere dove si trova il rettangolo nella lista per capire come sta in relazione con gli altri. Il problema è farlo chiaramente, devi riuscire a salvarti dai casi particolari. Se il primo rettangolo sta sotto all'ultimo messo, devi far si che non appaia accanto all'ultimo, ma che rimanga il primo. Se questo dovesse risultare troppo difficile o impossibile, sarebbe meglio cambiare approccio.
l
luca.ronca (600 points)
0 0 5
answered Nov 26, 2020 by luca.ronca (600 points)
Un approccio è costruirsi una relazione formata da coppie (a, b) dove a < b, trovare la chiusura transitiva di quella relazione e poi ordinare con "sorted" più operator overloading di "<" ">" come stai facendo. Trovare la chiusura transitiva è il punto.
andrea.sterbini (172680 points)
511 927 1776
answered Nov 26, 2020 by andrea.sterbini (172,680 points)
Anche io inizialmente ho provato così, ma poi ho dovuto cambiare algoritmo :)
Romitoskj (8920 points)
4 8 40
commented Nov 26, 2020 by Romitoskj (8,920 points)
Anche io... Sicuramente è fattibile ma inutilmente complicato.