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 [2024/10/16 23:19]
dmihai
aa:lab:1 [2025/10/06 18:16] (current)
dmihai
Line 1: Line 1:
-====== ​Mașina Turing ​======+====== ​Editor de text: introducere ​======
  
-==== Simulatoare ​de Mașini Turing ====+Scopul acestui laborator este familiarizarea studenților cu editorul ​de texte pe care îl vom folosi pe parcursul semestrului pentru a ilustra în mod practic diversele concepte abordate.
  
-Simulatoarele de Mașini Turing sunt unelte foarte utile pentru vizualizarea modului de lucru al unei mașini. Fiecare simulator vine cu propriul său format de input, deci citiți cu atenție specificația.+=== Cod editor ===
  
-=== turingmachinesimulator.com ===+Descărcați scheletul de cod al editorului de text de [[https://​github.com/​cs-pub-ro/​AA-CB-public/​tree/​master/​text-editor|aici]].
  
- Un exemplu ușor de folosit este [[https://​turingmachinesimulator.com/​|acesta.]] O Mașina Turing scrisă în formatul dorit arată așa:+=== Ncurses ===
  
-<​code>​ +Editorul este bazat pe ''​ncurses''​ -- o bibliotecă lightweight care facilitează crearea de UIs în terminal. The Linux Documentation Project menține [[https://​tldp.org/​HOWTO/​NCURSES-Programming-HOWTO/​intro.html|acest ghid]]care poate servi atât ca introducere cât și ca referință rapidă pentru diverse funcții.
-nameBinary increment +
-init: start +
-accept: HY+
  
-//start: starea de început, se duce la finalul numărului +=== Cerințe ===
-//find0: caută un 0 pentru a-l incrementa+
  
-start,+1. Rețineți textul sub forma unui array bidimensional;​ săgețile de la tastatură schimbă poziția cursorului în cadrul matricei. Alte taste (literecifresimboluri speciale) înlocuiesc textul de sub cursor.
-start,0,>+
  
-start,+2. Implementați două moduri diferite de folosire: "​view"​ și "​write"​similare cu modurile "​Normal"​ și "​Insert"​ din ''​vim''​. Modul "​view"​ e default; apăsarea tastei "​i"​ trece în "​write";​ de acoloapăsarea tastei "<​Esc>" trece în "​view"​ (alternativ,​ puteți folosi orice alt shortcut vreți).
-start,1,>+
  
-start,+3. Adăugați un mod de a insera text fără suprascrie text (textul inserat "​împinge spre dreapta"​ textul existentîn limita dimensiunii unui rând în matrice).
-find0,​_,<​+
  
-find0,0 
-Y,1,- 
  
-find0,1 
-find0,​0,<​ 
- 
-find0,_ 
-Y,1,- 
- 
-</​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. 
- 
-=== Tabela de tranziții === 
- 
-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.]] 
- 
- 
-===== Exerciții ===== 
- 
-<​note>​ 
-Exercițiile din cadrul acestui laborator vă cer să descrieți diverse Mașini Turing. 
- 
-În toate exercițiile convenția este că la începutul rulării, pe bandă se află doar inputul (restul celulelor sunt goale), iar capul de citire e poziționat pe cel mai din stânga simbol. 
- 
-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>​ 
- 
- 
-  - 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 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 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. 
-  - 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). 
-  - 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"​). 
- 
-<​note>​ 
-Soluțiile pentru exercițiile din laborator se pot găsi [[aa:​lab:​sol:​1|aici]]. 
-</​note>​