Macchine di Turing Avvertenze Per ogni esercizio viene proposto oltre al testo, la matrice funzionale, il grafo orientato, un esempio con il valore iniziale e quello finale e, inoltre, una breve descrizione. Docente d Informatica presso l I.I.S.S. Ven. I. Capizzi Liceo Scientifico - Bronte Il simbolo Stop nel grafo orientato corrisponde nella matrice funzionale alla o alle caselle contenenti q o (simbolo di arresto della macchina). I valori in colore bordò indicano i possibili valori iniziali.
1. MdT che, partendo dalla prima cifra di destra, scorre un numero binario. F q 0 0 0 S / F inizio 1 0 1 1 fine 1 0 1 1 1 1 S
2. MdT che, partendo dalla prima cifra di destra, scorre un numero binario con ritorno. D S q 0 0 0 S 0 D 1/1D / D 0/0D inizio 1 0 1 1 1 0 1 1 fine 1 0 1 1 1 1 S 1 D / S Con lo stato scorre la stringa a sinistra finché incontra, poi torna indietro con lo stato fino a di destra.
3. MdT che, partendo dalla prima cifra di destra, moltiplichi un numero binario per 2. 1/1D 0/0D 0 F q 0 0 0 D /0F inizio 1 0 1 fine 1 0 1 0 1 1 D Per moltiplicare un numero binario per 2, cioè la base, basta aggiungere uno 0 a destra.
4. MdT che, partendo dalla prima cifra di destra, calcoli il complemento ad 1 di un numero binario. 1/0S 0/1S F q 0 0 1 S / F inizio 1 0 1 0 fine 0 1 0 1 1 0 S Per complementare un numero binario basta cambiare ogni 1 in 0 e viceversa.
5. MdT che, partendo dalla prima cifra di destra, calcoli il complemento alla Base (2) di un numero binario. 1 F q 0 F q 0 0 0 S 1 D 1 1 S 0 D 1/0S 0/1S /1F / F inizio 1 0 1 0 fine 0 1 1 0 Il complemento alla base 2 si ottiene aggiungendo 1 al complemento ad 1. Noi adotteremo il seguente algoritmo: con lo stato lascia inalterate tutte le cifre fino al primo 1 e poi, con lo stato, complementa i rimanenti. Il caso si verifica solo nel caso in cui il numero è formato solo da 0.
Dato un numero binario, copi la prima cifra di destra nella prima casella vuota di sinistra. 6. Con lo stato legge la prima cifra e cambia stato in o a secondo se il valore letto è 0 oppure 1. Scorre le altre cifre e quando incontra scrive 0 o 1 e si ferma. 0 F q 0 1 F q 0 0 0 S 0 S 0 S 1 1 S 1 S 1 S /0F /1F inizio 1 1 0 fine 0 1 1 0
7. Dato un numero binario, costruire una MdT che, partendo dalla prima cifra di sinistra, stampi alla sua destra il bit di parità (cioè 0 oppure 1 in modo tale che il numero totale di 1 sia pari). 0/0D Pari Dispari 0 F q 0 1 F q 0 Pari 1/1D 1/1D /0F inizio 1 1 1 0 fine 1 1 1 0 1 0 0 D Pari 0 D Dispari 1 1 D Dispari 1 D Pari 0/0D Dispari /1F Partendo da sinistra con lo stato P (Pari) scorre il numero verso destra commutando lo stato ogni volta che incontra 1. Quando incontra scrive 0 se si trova in P oppure 1 se si trova in D.
8. Dato un numero binario, costruire una MdT che, partendo dalla prima cifra di destra, converta ogni coppia di cifre in una casella vuota e nel relativo valore in base 10. 0/1S 1/ S 1/3S 0/ S 1/2S / F F q 0 0 F q 0 1 F q 0 0 S 0 S 1 S 1 S 2 S 3 S /0F /1F Nello stato legge la prima cifra di ogni coppia cambiando stato a secondo se tale cifra è 0 oppure 1.
9. MdT che, dati due numeri unari (un numero unario è espresso da tanti 1 quanto è il suo valore +1) separati dal segno +, partendo dalla prima cifra di destra, ne realizzi la somma. D 1 1 S D D q 0 inizio 1 1 1 1 + 1 1 1 fine 1 1 1 1 1 1 + 1 S Nello stato scorre i due numeri, cambiando il + in 1, fino ad poi torna indietro cancellando due 1. Uno per il segno + ed un altro perché ogni numero aveva già un 1 in più. / D 1/ D 1/ D +/1S
10. MdT che, dati due numeri unari separati dal segno, partendo dalla prima cifra di destra, ne realizzi la differenza. q 4 q 5 Cancella alternativamente un 1 da destra e da sinistra fino a quando, con lo stato, incontra il simbolo che cambia in 1. Se in incontra allora (questo accade quando il minuendo è maggiore del sottraendo) scorre il numero verso destra fino a che cambia in 1. D S 1 F q 0 / S 1/1 S 1 S 1 S D q 4 1 D q 4 1 D q 5 1/ S 1 S q 0 S D q 4 / D 1/ D / D q 4 1/1 D / S / 1 F inizio 1 1 1 1 1 1 1 fine 1 1 / D q 5 1/1 D /1 F
11. MdT che, dato un numero binario, anteponga ad esso, separato da una casella vuota, il numero (binario) di 1 presenti nel numero dato. q 4 q 5 S q 0 S 1 D q 4 D q 5 1 S 0 0 S 0 S 1 D q 4 0 D q 4 0 D q 5 1 1 S 1 S 0 S 1 D q 4 1 D q 5 / F 0/0 S 0/0 S Partendo da destra con lo stato, appena incontra un 1 lo cancella e va allo stato, appena incontra il primo va allo stato, va avanti e appena incontra 0 o lo converte in 1 (così incrementa il contatore) e torna indietro, scorrendo il contatore con lo stato q 4 e il numero dato con lo stato q 5 fino a quell 1 che era stato cancellato e che ora viene ripristinato. Riprende il ciclo con lo stato e si ferma quando incontra, che in 1/1 S questo caso indica che abbiamo analizzato tutto il numero dato. 1/1 D q 5 /1 S / D 0/0 D / S /1 D q 4 1/1 S 0/1 D 0/0 D 1/1 D inizio 1 1 1 0 1 fine 1 0 0 1 1 1 0 1