Unelte utilizator

Unelte site


teme:tema1

Tema 1: Make your own text-editor

Obiective

  • Înțelegerea conceptului de funcționare și implementarea unor liste simplu/dublu înlănțuite și circulare
  • Operarea cu aceste structuri de date
  • Implementarea unei funcționalități practice folosind aceste concepte

Informații

  • Deadline soft, 28 martie ora 23:59
  • Termen final de trimitere 3 aprilie ora 23:59 (depunctare de 0.5pt/zi).
  • Trimiterea temelor se face pe platforma vmchecker (folosiți credențialele de pe acs.curs.pub.ro).
  • Există și un checker local pe care îl puteți descărca de aici
  • Pentru întrebări și nelămuriri utilizați forumul asociat temei aici.

Descriere

O definiție formală a unui editor de text este „Un editor de text reprezintă un tip de program folosit pentru a te ajuta să modifici textul (eng: plain text)“. Ce ne dorim de la un astfel de editor de text?

  • să fie ușor de folosit
  • să aibă funcții de find and replace
  • să putem opera de exemplu: cut, copy, paste
  • și opțional, pentru editoare mai moderne să avem opțiuni de colorare a sintaxei (eng: syntax highlighting) și interfață personalizabilă (ex: dimensiune sau tip font)
Observație! Un editor de text nu trebuie confundat cu un IDE (Integrated development environment) care are mult mai multe widgeturi pe lângă opțiunea de editare de text.

Cerințe

Dorim să implementăm propriul editor de text prin însușirea unor operații care sunt deja implementate în editoarele de text existente.

Considerăm că avem un fișier de intrare date.in în care avem un text (în funcție de test el va avea lungimea variabilă).

Am dori să prelucrăm informația din acest fișier prin diverse operații. Pentru aceasta, vom considera fiecare caracter citit din fișier, elementul unei liste.

Operațiile pe care le vom aplica asupra textului vor fi primite printr-un alt fișier de intrare: operatii.in. Acesta va avea pe prima linie un număr întreg N, ce va reprezenta numărul de operații care se aplica asupra textului.

În urma tuturor operațiilor aplicate, vom salva noul text într-un fișier ce va avea denumirea rezultat.out.

Deci putem vedea toată această implementare a unor operații asupra unui input citit dintr-un fișier ca pe un editor propriu de text. Un fișier are asociat cursorul de fișier (file pointer) care indică poziția curentă în cadrul fișierului. Cursorul de fișier este un întreg care reprezintă deplasamentul (offset-ul) față de începutul fișierului. La deschiderea fișierului acesta va avea valoarea 0.

Operațiile posibile asupra datelor din fișier vor fi:

  • move n: mută în listă cursorul, cu n poziții de la poziția curentă, pornind de la poziția curentă; n-ul poate fi și număr negativ; dacă deplasarea depășește dimensiunea listei, poziția curentă va fi la începutul, respectiv la finalul listei, în funcție de semnul lui n
  • insert String: înserează șirul de caractere String în listă, la poziția curentă a cursorului; cursorul va ramane la finalul sirului inserat
  • del n: șterge din listă urmatoarele n elemente de la poziția curentă
  • copy n: copiază n elemente din listă de la poziția curentă (această operație nu modifică poziția cursorului; poziția curentă în listă va fi neschimbată în urma salvării elementelor copiate)
  • paste: inserează în listă elementele copiate cu ultima comandă copy la poziția curentă a cursorului, poziția cursorului fiind la finalul listei de elemente introduse
  • undo: anuleză ultima operație făcută asupra listei (se poate efectua o singură operație undo, adică nu vor exista 2 operații undo consecutive)
  • redo: să anuleze ultima operație undo (de asemenea nu vor exista 2 operații redo consecutive)
  • backspace: șterge elementul anterior poziției curente (OBS: Dacă ne aflăm la începutul listei această operație nu va face nicio modificare)
  • [BONUS]replace cuvânt cuvânt_nou:caută în listă unde apare parametrul cuvânt și îl înlocuiește cu parametrul dat prin cuvânt_nou

Așadar, executabilul obținut în urma compilării va avea numele editor iar regula de rulare va fi:

./editor date.in operatii.in rezultat.out

Exemplu test

date.in
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt 
ut labore et dolore magna aliqua.
operatii.in
8
del 5
move 2
copy 3
del 2
move 10
paste
backspace
undo
rezultat.out
 ium dolor spsuit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt 
ut labore et dolore magna aliqua.

Reguli pentru trimitere

  • Deadline-ul soft al temei este până pe 25 martie, iar după această zi se aplică o depunctare de 0,5p/zi. După 31 martie, tema nu va mai putea fi trimisă
  • Arhiva temei va avea numele GrupaSerie_Nume_Prenume_TemaNr.zip și va fi încărcată pe vmchecker unde vă puteți loga folosind credențialele de pe acs.curs
  • Restricții:
    • implementarea se va face folosind liste
    • nu se acceptă implementări cu tipuri de date statice; lucrăm cu memorie alocată dinamic pentru eficientizare
  • Nerespectarea regulilor de coding style va fi depunctată
  • Se va depuncta lucrul nemodularizat, folosind funcții
  • Memoria trebuie dealocată. Dacă nu se respectă această cerință, vor fi date depunctări.
  • Ea va conține (direct în rădăcină):
    1. fișierele sursă
    2. Makefile-ul (cu regulile make buid și make clean). Executabilul generat trebuie să se numească editor
    3. fișierul README în care va fi descrisă soluția problemei
  • Dacă soluția voastră nu compilează, dar dacă ideea este bună și trimiteți o încercare de implementare, puteți primi până la 20p
  • Temele care vor fi copiate vor primi 0p
  • Se va acorda un punctaj parțial de 50p pentru setul de operații simple: op1, op2….
  • Celelalte operații se consideră operații complexe și reprezintă cealaltă cuantă de 50p din punctajul total al temei, iar din această categorie fac parte: op1, op2…..
  • BONUS 1 15p: Implementarea operației de replace.
  • BONUS 2 15p: Implementarea operațiilor undo și redo de un nr multiplu de ori. Asta înseamnă că numărul maxim de operații undo va fi egal cu nr de operații efectuate până atunci, diferite de undo și redo. De asemenea, nr maxim de operații redo va aduce lista de elemente la stadiul în care se afla înaintea aplicării primei operații de undo.
  • Punctajele bonus se consideră peste cele 100p obținute pentru implementarea operațiilor simple și operațiilor complexe
teme/tema1.txt · Ultima modificare: 2017/03/24 11:19 de către iulian.matesica