Ci sono automobili e pedoni che si approcciano a un incrocio. I pedoni hanno la precedenza sulle auto.
Le auto si comportano secondo il seguente schema:
1 2 3 4 5 6 7 8 9 10 11 | finche' sulla strada: Se accede all'incrocio: incr.arrivaAuto(); // indica che sta per attraversare Se esce dall'incrocio: incr.attraversatoAuto(); // indica che ha attraversato incr.muovi(c,x,y,dx,dy); // la macchina si muove se ha strada x+=dx; y+=dy; incr.libera(x,y); // esce dalla strada |
I pedoni si comportano secondo il seguente schema:
1 2 3 4 5 6 7 8 9 10 11 | finche' sulla strada: Se accede all'incrocio: incr.arrivaPedone(); // indica che sta per attraversare Se esce dall'incrocio: incr.attraversatoPedone(); // indica che ha attraversato incr.muovi(c,x,y,dx,dy); // il pedone si muove se ha strada x+=dx; y+=dy; incr.libera(x,y); // esce dalla strada |
Progettare un monitor Incrocio che implementi i seguenti metodi:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | void muovi( char c, int x, int y, int dx, int dy) se la posizione x+dx,y+dy e' occupata attende. Altrimenti scrive c in tale posizione e libera la posizione attuale x,y scrivendo uno spazio void libera( int x, int y) libera la posizione x,y scrivendo uno spazio char strada( int x, int y) ritorna il carattere (auto o spazio) in posizione x,y (serve per stampare le auto) void arrivaAuto() Se ci sono pedoni in attesa o in attraversamento attende void attraversatoAuto() Indica che ha finito di attraversare l'incrocio void arrivaPedone() Se ci sono auto in attraversamento attende, ma ha la precedenza void attraversatoPedone() Indica che ha finito di attraversare l'incrocio |
In particolare notare che le auto attendono se ci sono pedoni in attesa o attraversamento (dando quindi la precedenza ai pedoni). I pedoni, invece, attendono solo se ci sono auto in attraversamento.
Scaricare qui il codice sorgente.