Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
aa:lab:1 [2022/10/05 16:17] dmihai [Exerciții] |
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.]] O 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 început, se duce la finalul numărului |
- | q1,0,> | + | //find0: caută un 0 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 a 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 51: | Line 54: | ||
Pentru exercițiile care menționează că inputul este un număr, acesta e fie numărul zero, fie începe cu o cifră diferită de 0. Cifrele numărului sunt scrise de la stânga la dreapta. | Pentru exercițiile care menționează că inputul este un număr, acesta e fie numărul zero, fie începe cu o cifră diferită de 0. Cifrele numărului sunt scrise de la stânga la dreapta. | ||
</note> | </note> | ||
+ | |||
- 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**). | - 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. | ||
- 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ă are lungime impară și simbolul din mijloc este 0 (e.g. 1011**0**0011). | ||
- | - Rezolvați primele două exerciții pentru input în baza 10. | ||
- Scrieți o Mașină Turing care primește un șir binar și lasă pe bandă complementul lui (e.g. "100110100" -> "011001011") | - Scrieți o Mașină Turing care primește un șir binar și lasă pe bandă complementul lui (e.g. "100110100" -> "011001011") | ||
- 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 curăță toată banda (atât la stânga cât și la dreapta) și apoi lasă scris doar "1". | ||
Line 63: | Line 67: | ||
- 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). | - 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). | ||
- 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 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") | + | - 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"). |
+ | |||
+ | <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> |