Il software simula l’esecuzione di una Macchina di Turing, mostrando dinamicamente il cambiamento tra i passaggi di stato tramite lo scorrimento del nastro sotto la testina. Ad esempio, il progetto dà l’opportunità all’utente: di riconoscere se una stringa appartiene o meno ad un dato alfabeto, di sommare due numeri binari, di riconoscere sequenze prestabilite di caratteri così da identificare parole o frasi ben precise. Tramite il bottone “Nuovo Progetto”, presente nella finestra di benvenuto, si entrerà nel vivo del programma, dove verranno richiesti in input i primi dati utili per l’esecuzione del software.
La prima finestra mostrata sarà quella di configurazione del programma che vogliamo eseguire. Il primo passaggio è quello di inserire i caratteri che compongono il nostro alfabeto. L’esempio che crediamo sia utile per la spiegazione del progetto sarà quello di riconoscere se la stringa data in input è riconosciuta come la frase “Hello World!” (senza virgolette). Quindi vogliamo che la casella di inserimento del testo contenga i caratteri dell’alfabeto o per lo meno tutti i caratteri che compongono la stringa presa in esame, compresi gli spazi, facendo distinzione tra caratteri minuscoli e maiuscoli (il Blank sarà sempre presente nel nostro alfabeto denotato dal carattere underscore “_”). I caratteri dovranno essere separati per mezzo di una virgola “,” senza spazi aggiuntivi. Se vi dovesse comparire il seguente messaggio di errore vorrà dire che è non è stata rispettata la forma dell’inserimento prevista.
Una volta cliccato il bottone “Inserisci alfabeto”, apparirà una casella di testo dove inserire la stringa da riconoscere o da utilizzare per il nostro programma. Nel nostro caso inseriamo come detto la frase “Hello World!” (senza virgolette).
Se dovesse comparire un errore, questo sarà dovuto al fatto che si è inserita una stringa che non contiene solo gli elementi presenti nel nostro alfabeto.
Una volta inserita la nostra stringa clicchiamo su “Inserisci” e se non dobbiamo effettuare alcuna modifica clicchiamo su “Avanti”. A questo punto si apriranno due finestre, quella dell’inserimento degli stati e quella che mostra la tabella di transizione degli stessi (quest'ultima è una finestra ridimensionabile, detta anche elastica; questa caratteristica permettere di visualizzarla correttamente anche in caso di tabella molto grande e schermo con risoluzione bassa).
![]() |
![]() |
Quella con cui dovremmo interagire è la prima, ossia quella di inserimento degli stati. In questa, programmeremo il comportamento della nostra Macchina di Turing, che, nel nostro esempio dovrà riconoscere esclusivamente la frase “Hello World!”. In alto, viene mostrato il “Nastro di input” utile a ‘ricordare’ su che stringa il programma dovrà eseguire le operazioni dettate dagli stati che stiamo per inserire. Subito sotto, è collocato lo “Stato” di cui stiamo definendo le operazioni, e l’“Elemento Alfabeto” letto dalla testina della nostra Macchina di Turing. Le “Azioni da compiere” sono le operazioni che, in corrispondenza dello “Stato” e dell’“Elemento Alfabeto”, il nostro programma deve compiere; sono definite da una terna di valori: “Valore da scrivere” conterrà tutti i valori del nostro alfabeto che possiamo scrivere al posto dell’“Elemento Alfabeto” letto, “Stato in cui andare” e “Spostamento della testina” che specifica il verso in cui la testina deve andare dopo aver svolto la scrittura del nuovo carattere sulla cella del nastro. Dopo aver riempito questi campi, cliccare su “Inserisci Stato” per vederlo comparire nella finestra contenente la tabella di transizione. Cliccando su “Avanti” o “Indietro” non facciamo altro che navigare la tabella di transizione, che si aggiornerà di conseguenza, così da selezionare la casella corrispondente alla combinazione “Stato”-“Elemento Alfabeto” di cui vogliamo definire l’operazione da eseguire. Tutte le combinazioni “Stato” - “Elemento Alfabeto” che non saranno modificate perché ignorate, saranno stati non accettanti.
Se vi compare questo errore vuol dire che lo stato non è stato inserito correttamente. Una volta completati e inseriti tutti gli stati che vogliamo, clicchiamo su “Fine Inserimento” per andare avanti nell’esecuzione del programma.
Prima di far partire l’esecuzione, dobbiamo impostare la velocità, quindi la scegliamo tramite lo slider tra “Bassa-Media-Alta”; una volta scelta clicchiamo su “Setta Velocità” per abilitare il pulsante “Avvia”. Osserviamo che in alto è presente l’alfabeto inserito e che la testina è posizionata nel primo carattere disponibile della stringa inserita.
![]() |
![]() |
Una volta cliccato il pulsante “Avvia” partirà l’esecuzione grafica del programma che ci mostrerà in tempo reale la produzione delle operazioni definite precedentemente, con la relativa corrispondenza nella corrispettiva tabella di transizione.
Il programma potrà terminare in due possibili casi:
![]() |
![]() |
STATO ACCETTANTE | STATO NON ACCETTANTE |
Il pulsante “Pausa” ci permette di bloccare l’esecuzione nel momento in cui viene cliccato per visualizzare con più calma la situazione corrente, e sarà abilitato solamente durante l’esecuzione. Per riprendere quest'ultima basterà cliccare semplicemente su “Avvia”. Il pulsante “Riavvia” permette, invece, di far ripartire il programma dall’inizio, riportando la testina sul primo carattere della stringa inserita, e sarà abilitato solamente quando saremo in pausa, in uno stato accettante o non accettante.
Il pulsante "Cambia input nastro" permette di inserire una nuova stringa da far elaborare al programma senza aggiornare gli stati, dando così la possibilità di testare le stesse operazioni con un nuovo input. Tale funzione è abilitata solamente quando dobbiamo ancora settare la velocità, avviare il programma, e quando, dopo la terminazione del programma in stato non accettante/finale o la messa in pausa dello stesso, questo viene riavviato.