Verifiche Didattiche On-line (VeDO)

Vista HTML soluzione compito


Compito: Dicembre

Domande con soluzione

Dichiarare l'equivalenza (ossia, l'uguaglianza dell'insieme delle frasi) dei seguenti gruppi di espressioni regolari (considerare come alfabeto i simboli 0 e 1):
   {{0}{1}}, {0|1} sono equivalenti fra loro
   {{0}0{1}1}, {0|1} sono equivalenti fra loro
   {0{12}}, {0|12} sono equivalenti fra loro
   {0{12}}, [0{0|12}] sono equivalenti fra loro

Si consideri la grammatica sull'alfabeto costituito dal solo simbolo 0, e le cui frasi sono tutte e sole le stringhe che hanno almeno 100 zeri. Allora il linguaggio di tale grammatica:
   è di tipo 3
   è riconoscibile da un automa a stati finiti
   è riconoscibile da un automa a stati finiti con meno di 50 stati
   è riconoscibile da una macchina di Turing

E' possibile costruire una macchina di Turing che:
   non termina la computazione con qualunque input
   se l'input è una sequenza di 2 allora non termina, e in tutti gli altri casi termina lasciando tale sequenza inalterata
   con 10'000 stati
   che preso in ingresso un numero n (positivo) espresso in binario, calcola e scrive sul nastro l'n-esimo numero della serie di Fibonacci

Si consideri la codifica di numeri interi in complemento a 2 (con soli 4 bit), allora:
   il più grande numero codificabile è 8
   il più piccolo numero codificabile è -8
   il numero -4 si codifica in 1100
   applicando il complemento a 2 al numero -8 si riottiene il numero -8

L'algoritmo di ricerca dicotomica (o binaria):
   E' applicabile solo ad array ordinati
   Ha complessita' in tempo logaritmica
   Ha complessità in tempo peggiore di quella quadratica
   E' mediamente più veloce della ricerca sequenziale

Si consideri il tipo List per le liste visto a lezione, realizzato in C con una struct con campi head (di tipo int) e tail (di tipo List*). Si consideri anche una funzione con prototipo 'List *cons(int,List*)', che prende una testa e una coda, e alloca nello heap la struct List corrispondente e la ritorna in uscita. Allora, dopo l'esecuzione di queste due istruzioni: List *l1=cons(10,NULL); l1->tail=l1; si ha che:
   int i=l1->tail->head; associa ad i il valore 0
   int i=l1->tail->head; associa ad i il valore 10
   int i=l1->tail->head; causa un Segmentation Fault
   int i=l1->tail->tail->tail->head; causa un Segmentation Fault

La funzione malloc del C:
   E' definita nella libreria stdio
   Torna in uscita un puntatore
   Alloca spazio nella memoria stack
   Prende in ingresso il numero di bit della memoria da allocare

Considerando un ordine di valutazione standard (post-order sull'Abstract Syntax Tree), il * meno prioritario del -, il - associativo a destra, il * associativo a sinistra, allora l'espressione 1-3*4-5-4*3*2:
   quando valutata, valuta gli operatori nell'ordine -,-,-,*,*,*
   quando valutata, valuta gli operatori nell'ordine -,*,-,-,*,*,*
   quando valutata, ritorna -36
   quando valutata, ritorna -12

Considerando le varie tipologie di memoria disponibile nell'architettura di un calcolatore:
   i registri della CPU hanno meno capienza rispetto alla memoria centrale (RAM)
   la memoria centrale (RAM) ha un tempo d'accesso più alto rispetto ai dischi magnetici (ad esempio rispetto ad un hard disk)
   alcuni dati possono essere trasferiti dalla memoria centrale (RAM) alla memoria secondaria per effetto di Swapping
   alcuni dati possono essere trasferiti dalla memoria centrale (RAM) alla cache della CPU per effetto di Caching