Nome
                       
Cognome
                       
Matricola
          
Soluzione esame gg/mm/aaaa
DomandaRisposta
1

Mostrare un esempio in cui un programma Java che genera un errore in compilazione, ma non succederebbe se Java avesse la tipizzazione ad anatra.

(linguaggi di programmazione)

class Primo {
	int x;
}

class Secondo {
	int x;
}

class Main {
	static void azzera(Primo a) {
		a.x = 0;
	}
	public static void main(String[] args) {
		Primo a = new Primo();
		a.x = 12;
		azzera(a);

		Secondo b = new Secondo();
		b.x = 12;
		azzera(b);
	}
}

L'errore è nell'ultima istruzione: nonostante il metodo azzera possa teoricamente asserare qualsiasi oggetto con componente x, non accetta l'oggetto b perchè non è di tipo Primo.

Questo tipo di errori non sono presenti nei linguaggi con tipizzazione ad anatra, in cui b verrebbe trattato senza errori perchè ha la componente x.

2

Il numero 345 potrebbe essere in binario? In base cinque? In base sette? Se sì quanto vale in decimale?

(rappresentazioni numeriche o logica applicata)

Le cifre binarie sono solo 0 e 1 mentre il numero contiene anche la cifra 3. Quindi il numero non è in binario.

Nella base cinque, le cifre vanno da zero a quattro. Il numero contiene invece la cira cinque. Quindi il numero non e' nemmeno in base cinque.

Potrebbe essere un numero in base sette, dato che le cifre sono tutte comprese fra zero e sei (incluso). In decimale vale:

3×7×7 + 4×7 + 5 =
  145 +  28 + 5 = 
             61
3

Scrivere la rappresentazione insiemistica del grafo mostrato in figura.

   +-+
   | v
    0 ------> 1
    |        /^
    |      /  |
    |    /    |
    V  <      |
    2 --------+

(grafi)

nodi:
  • 0
  • 1
  • 2
archi:
  • da 0 a 0
  • da 0 a 1
  • da 0 a 2
  • da 2 a 3
  • da 3 a 2

Il grafo è una coppia: insieme dei suoi nodi, insieme dei suoi archi.

({0,1,2}, {(0,0), (0,1), (0,2), (2,3), (3,2)})
4

Dire quali stringhe sono generate dalla seguente grammatica, dove X è il simbolo iniziale e le maiuscole indicano i simboli non terminali.

X → Y
X → Z
Y → X
Z → ab
Z → a

(linguaggi formali)

Il simbolo iniziale X si può rimpiazzare con Z o con Y. Nel primo caso, la Z si può rimpiazzare con ab o con a, ottenendo le seguenti due generazioni:

X ⇒ Z ⇒ ab
X ⇒ Z ⇒ a

Nel secondo caso, Y si può solo rimpiazzare con X, tornando così al solo simbolo iniziale:

X ⇒ Y ⇒ X ⇒ …

Questo passo può venire compiuto un numero arbitrario di volte, e genera una stringa senza simboli non terminali solo quando X viene rimpiazzato con Z invece di Y:

X ⇒ Y ⇒ X ⇒ … X ⇒ Z ⇒ ab
X ⇒ Y ⇒ X ⇒ … X ⇒ Z ⇒ a

Le uniche stringhe generate sono quindi ab e a

5

Dire quale delle seguenti affermazioni è corretta. Spiegare perchè la altre sono errate.

  1. una macchina di Turing esegue programmi Python
  2. ogni problema che si può risolvere con un programma Python ha una macchina di Turing che lo risolve
  3. una macchina di Turing ha un programma fisso
  4. non esiste nessuna macchina di Turing che risolve il problema di soddisfacibilità proposizionale
  5. le macchine di Turing nondeterministiche impiegano sempre tempo polinomiale

(calcolabilità e complessità)

una macchina di Turing esegue programmi Python
errato, il programma di una macchina di Turing è il suo automa
si ritiente che ogni problema che si può risolvere con un programma Python abbia una macchina di Turing che lo risolve
corretto: secondo la tesi di Church, le macchine di Turing risolvono ogni problema calcolabile
una macchina di Turing ha un programma fisso
corretto: ogni macchina di Turing esegue un programma fisso
non esiste nessuna macchina di Turing che risolve il problema di soddisfacibilità proposizionale
errato: il problema è calcolabile; l'affermazione corretta è che probabilmente il problema non si può risolvere con una macchina di Turing the impiega tempo polinomiale
le macchine di Turing nondeterministiche impiegano sempre tempo polinomiale
errato: possono eseguire programmi qualsiasi; il tempo polinomiale è un vincolo aggiuntivo nella definizione di NP

NOTA: risposte prive di esauriente motivazione (es. i passaggi delle operazioni numeriche) verranno considerate nulle.