| Nome |
Cognome |
Matricola |
| Soluzione esame 27/01/2026 | ||
|---|---|---|
| Domanda | Risposta | |
| 1 |
Scrivere le dichiarazioni che permettono la compilazione delle seguenti istruzioni senza errori: a = 1; b = &a; c = *b; Assumendo che le tre variabili a, b e c abbiano indirizzi 9, 4 e 6, disegnare lo stato della memoria al termine dell'esecuzione. |
La variabile a contiene un valore intero, quindi si può dichiarare come int a;. La variabile b contiene l'indirizzo di una variabile intera, quindi è int *b;. La variabile c viene assegnata al valore all'indirizzo contenuto in b, e questo valore è ancora un intero: int c;.
int main() {
int a;
int *b;
int c;
a = 1;
b = &a;
c = *b;
}
La prima istruzione inserisce il valore 1 nella variabile a. Quindi la posizione di memoria 9 contiene 1. La seconda istruzione inserisce in b questa posizione 9. Quindi nella posizione 4 va il valore 9. Infine, c prende il valore contenuto nella posizione 9 della memoria, quindi 1.
|
| 2 |
Convertire il numero esadecimale A e il numero ottale -11 in binario, complemento a due a sei cifre totali. Sommare i due numeri binari e convertire il risultato in decimale. |
Le cifre esadecimali sono 0 1 2 3 4 5 6 7 8 9 A B C D E F, quindi A è il valore 10. Dato che dieci è otto più due, in binario è 1010. Essendo un numero positivo, la sua rappresentazione in complemento a due si ottiene aggiungendo a sinistra il numero necessario di zeri: 001010. Il numero ottale 11 è otto più uno, quindi nove. La sua rappresentazione binaria è 1001, otto più uno. La complementazione è va eseguita dato che il numero da convertire è negativo. Si complementa invertendo tutti i bit e sommando uno, oppure invertendo la cifre da destra partendo dal primo uno escluso.
001001
|
| inversione
V
110110 +
1
------
110111
La somma di due numeri in complemento a due si effetta come una comune somma di numeri senza segno. 001010 + 110111 ------ 000001 Il risultato è uno. |
| 3 |
Dire cos'è un grafo bipartito e un ciclo Hamiltoniano. Mostrare un esempio di grafo bipartito che contiene un ciclo hamiltoniano. |
Un grafo è bipartito se i nodi si possono dividere in due gruppi, e ogni nodo è collegato solo a nodi dell'altro gruppo. Un ciclo Hamiltoniano è un ciclo (un percorso che termina dove inizia) che contiene tutti i nodi del grafo senza ripetizioni, cioè non passa due volte per lo stesso nodo. Un esempio di grafo bipartito dotato di ciclo Hamiltoniano è il seguente.
Il primo gruppo di nodi è composto da 1 e 2, il secondo gruppo è composta da 3 e 4. Il ciclo Hamiltoniano è 13241. |
| 4 |
Disegnare un automa a stati finiti che accetta esattamente le stringhe collimanti con l'espressione regolare [bc]*a+(b*|c+). |
L'espressione regolare collima con stringhe che sono composte di tre parti: una sequenza qualsiasi di lettere bc seguita da una sequenza non vuota di a seguita da una sequenza di b oppure una sequenza non vuota di c. L'automa si ottiene simulando ogni parte con stati: una sequenza si ottiene con un arco all'indietro, una alternativa con più archi uscenti dallo stesso stato. Le due cose vengono combinate per la sequenza [bc]*, che è una alternativa fra le due lettere ripetuta un numero arbitrario di volte.
I due stati a destra sono uguali perché una sequenza vuota di b è uguale a una sequenza vuota di c, quindi (b*|c+) è uguale a (b*|c*). |
| 5 |
Disegnare l'automa interno della macchina di Turing che accetta solo la stringa composta da una singola a. |
La stringa da riconoscere si trova inizialmente sul nastro preceduta e seguita da blank, con la testina sopra il suo primo carattere. L'automa interno della macchina di Turing ha come ingresso il carattere sotto la testina e come uscite il comando di movimento della testina (destra o sinistra) e il carattere da scrivere. In questo caso non è necessario scrivere niente. Quello che importa è che il primo carattere deve essere a e lo spostamento a destra deve portare al carattere blank che segna la fine della stringa di ingresso.
Dallo stato iniziale 0 parte un solo arco che viene seguito solo nel caso il primo carattere sia a, e che porta a uno spostamento a destra della testina e a un passaggio allo stato 1. In questo stato la lettura del blank porta allo stato accettante. Il secondo movimento è irrilevante. |
NOTA: risposte prive di esauriente motivazione (es. i passaggi delle operazioni numeriche) verranno considerate nulle.