| Nome |
Cognome |
Matricola |
| Soluzione esame gg/mm/aaaa | ||
|---|---|---|
| Domanda | Risposta | |
| 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.
(grafi) |
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.
(calcolabilità e complessità) |
|
NOTA: risposte prive di esauriente motivazione (es. i passaggi delle operazioni numeriche) verranno considerate nulle.