Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
aa:lab:1 [2022/10/03 23:36]
dmihai
aa:lab:1 [2024/10/16 23:21] (current)
dmihai [Exerciții]
Line 7: Line 7:
 === turingmachinesimulator.com === === turingmachinesimulator.com ===
  
- Un exemplu ușor de folosit este [[https://​turingmachinesimulator.com/​|acesta.]] Mașina Turing ​de mai sus rescrisă în formatul dorit arată așa:+ Un exemplu ușor de folosit este [[https://​turingmachinesimulator.com/​|acesta.]] ​Mașina Turing ​scrisă în formatul dorit arată așa:
  
 <​code>​ <​code>​
 name: Binary increment name: Binary increment
-init: q1 +init: start 
-accept: ​q3+accept: ​H, Y
  
-q1,0 +//start: starea de începutse duce la finalul numărului 
-q1,0,>+//find0: caută un pentru a-l incrementa
  
-q1,1 +start,0 
-q1,1,>+start,0,>
  
-q1,_ +start,1 
-q2,_,<+start,1,>
  
-q2,0 +start,_ 
-q3,1,-+find0,_,<
  
-q2,1 +find0,0 
-q2,0,<+Y,1,- 
 + 
 +find0,1 
 +find0,0,< 
 + 
 +find0,_ 
 +Y,1,-
  
-q2,_ 
-q3,1,- 
 </​code>​ </​code>​
  
 Ștergeți tot textul care apare, înlocuiți-l cu descrierea mașinii și apăsați compile. Va apărea o căsuță de input în care puteți scrie cuvântul care va fi inițial pe bandă; apoi apăsați play. Ștergeți tot textul care apare, înlocuiți-l cu descrierea mașinii și apăsați compile. Va apărea o căsuță de input în care puteți scrie cuvântul care va fi inițial pe bandă; apoi apăsați play.
  
-=== jflap ===+=== Tabela de tranziții ​===
  
-[[https://www.jflap.org/|JFLAP]] este un program educațional în Java, dezvoltat ​pentru ​ilustrarea mai multor concepte de bază din computer science; îl veți găsi util și în anul 3, la Limbaje Formale și Automate. Pentru ​face rost de el, completați formularul din secțiunea "Get JFLAP"​. Apoi deschideți programul, selectați "​Turing Machine"​. Aici puteți să definiți propria mașină sub formă de graf sau să deschideți una (File -> Open)Mașina Turing de mai sus în format JFLAP: +O altă metodă de redactare ar fi sub forma de tabelă de tranziții folosind Excel, ulterior folosind ​[[https://drive.google.com/​drive/​folders/​1EE_G1ovtsquG3Y6uWkldwHpZ2CqMa9u8?​usp=sharing/|scriptul]] pentru a-l converti ​in formatul dorit
- +**Exemplu:** [[https://docs.google.com/​spreadsheets/​d/​1XjNYvHu2oyaTei41irkWRtI4Cppp_hvK/​edit?​usp=sharing&​ouid=113096868136191520794&​rtpof=true&​sd=true/​|Excel.]]
-{{:aa:lab:​binary_increment.zip|}}+
  
  
Line 52: Line 55:
 </​note>​ </​note>​
  
-1. Scrieți o Mașină Turing care primește un șir binar și verifică dacă începe și se termină cu simboluri **distincte** (e.g. **1**0011011**0**). 
  
-2. Scrieți o Mașină Turing care primește un șir binar și verifică dacă are lungime impară și simbolul din mijloc este 0 (e.g. 1011**0**0011). +  - Scrieți o Mașină Turing care primește un șir binar și verifică dacă începe și se termină cu simboluri **distincte** (e.g. **1**0011011**0**). 
- +  - Rezolvați exercițiul anterior pentru input în baza 10. 
-3. Rezolvați primele două exerciții pentru input în baza 10. +  - Scrieți o Mașină Turing care primește un șir binar și verifică dacă are lungime impară și simbolul din mijloc este 0 (e.g. 1011**0**0011). 
- +  - Scrieți o Mașină Turing care primește un șir binar și lasă pe bandă complementul lui (e.g"​100110100"​ -> "​011001011"​) 
-4. Scrieți o Mașină Turing care curăță toată banda (atât la stânga cât și la dreapta) și apoi lasă scris doar "​1"​, trecând în starea $ H$+  - Scrieți o Mașină Turing care curăță toată banda (atât la stânga cât și la dreapta) și apoi lasă scris doar "​1"​. 
- +  ​- ​Scrieți o Mașină Turing care inversează cuvântul primit pe bandă. 
-5. Scrieți o Mașină Turing care inversează cuvântul primit pe bandă. +  ​- ​Scrieți o Mașină Turing care primește un șir de "​X"​-uri și verifică dacă lungimea acestuia este o putere a lui 2. 
- +  ​- ​Scrieți o Mașină Turing care primește un șir de paranteze "​(",​ "​)"​ și verifică dacă sunt echilibrate. 
-6. Scrieți o Mașină Turing care primește un șir de "​X"​-uri și verifică dacă lungimea acestuia este o putere a lui 2. +  ​- ​Scrieți o Mașină Turing care primește un număr în baza 2 și verifică dacă e divizibil cu 5. 
- +  ​- ​Scrieți o Mașină Turing care primește un cuvânt binar, găsește primul simbol "​0"​ și inserează un "​1"​ în stânga lui (deci tot ce apare la dreapta va trebui mutat cu o poziție). 
-7. Scrieți o Mașină Turing care primește un șir de paranteze "​(",​ "​)"​ și verifică dacă sunt echilibrate. +  ​- ​Scrieți o Mașină Turing care primește două numere în baza 2, big-endian, separate de un # și lasă pe bandă suma lor (e.g. "​1011#​11001"​ -> "​100100"). 
- +  - Scrieți o Mașină Turing care primește un șir binar și lasă pe bandă, după un caracter "#",​ numărul de 0-uri, în bază 2 (e.g. "​100010110"​ -> "​100010110#​101").
-8. Scrieți o Mașină Turing care primește un număr în baza 2 și verifică dacă e divizibil cu 5. +
- +
-9. Scrieți o Mașină Turing care primește un cuvânt binar, găsește primul simbol "​0"​ și inserează un "​1"​ în stânga lui (deci tot ce apare la dreapta va trebui mutat cu o poziție). +
- +
-10. Scrieți o Mașină Turing care primește două numere în baza 2, big-endian, separate de un # și lasă pe bandă suma lor (e.g. "​1011#​11001"​ -> "​100100"​).+
  
 +<​note>​
 +Soluțiile pentru exercițiile din laborator, în format pentru simulatorul online și xlsx, se pot găsi [[aa:​lab:​sol:​1|aici]];​ (soluțiile nu sunt unice, există abordări corecte, total diferite de cele prezentate de noi).
 +</​note>​