Aici sunt prezentate diferențele dintre versiunile selectate și versiunea curentă a paginii.
Ambele părți revizuirea anterioară Versiuni anterioare Urmatoarea versiune | Versiuni anterioare Urmatoarea versiune Ambele părți următoarea reviziune | ||
teme:tema1 [2017/03/05 20:46] florina_elena.barbu [Reguli pentru trimitere] |
teme:tema1 [2017/03/14 16:49] florina_elena.barbu [Reguli pentru trimitere] |
||
---|---|---|---|
Linia 5: | Linia 5: | ||
* Operarea cu aceste structuri de date \\ | * Operarea cu aceste structuri de date \\ | ||
* Implementarea unei funcționalități practice folosind aceste concepte | * Implementarea unei funcționalități practice folosind aceste concepte | ||
+ | |||
+ | ===== Informații ===== | ||
+ | * Deadline soft, **25 martie ora 23:50** | ||
+ | * Termen final de trimitere **31 martie ora 23:50** (depunctare de 0.5pt/zi). | ||
+ | * Trimiterea temelor se face pe platforma [[https:// | ||
+ | * Există și un checker local pe care îl puteți descărca de [[http:// | ||
+ | * Pentru întrebări și nelămuriri utilizați forumul asociat temei [[http:// | ||
+ | |||
===== Descriere ===== | ===== Descriere ===== | ||
Linia 11: | Linia 19: | ||
* să fie ușor de folosit | * să fie ușor de folosit | ||
* să aibă funcții de //find and replace// | * să aibă funcții de //find and replace// | ||
- | * să putem opera //cut, copy, paste// | + | * să putem opera de exemplu: |
* ș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) | * ș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) | ||
Linia 18: | Linia 26: | ||
===== Cerințe ===== | ===== 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ă). | 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 | + | 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. | 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. | ||
Linia 26: | Linia 36: | ||
În urma tuturor operațiilor aplicate, vom salva noul text într-un fișier ce va avea denumirea **rezultat.out**. | Î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.// | + | 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.// |
- | * **move n**: mută în listă cursorul, cu n poziții, pornind de la poziția curentă; n-ul poate fi și număr negativ; dacă deplasarea depăș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 | + | Operațiile posibile asupra datelor din fișier vor fi: |
- | * **del n**: șterge din listă n elemente de la poziția curentă | + | * **move n**: mută în listă cursorul, cu n poziții |
+ | * **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ă | ||
* **copy n**: copiază n elemete 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) | * **copy n**: copiază n elemete 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**, poziția cursorului fiind la finalul listei de elemente introduse | + | * **paste**: inserează în listă elementele copiate cu ultima comandă **copy** |
* **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) | * **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) | * **redo**: să anuleze ultima operație **undo** (de asemenea nu vor exista 2 operații redo consecutive) | ||
* **backspace**: | * **backspace**: | ||
- | * **replace cuvânt cuvânt_nou**: | + | * [BONUS]**replace cuvânt cuvânt_nou**: |
Așadar, executabilul obținut în urma compilării va avea numele **editor** iar regula de rulare va fi: | Așadar, executabilul obținut în urma compilării va avea numele **editor** iar regula de rulare va fi: | ||
<note tip> | <note tip> | ||
- | **./editor date.in operatii.in** | + | **./editor date.in operatii.in |
</ | </ | ||
Linia 55: | Linia 66: | ||
del 2 | del 2 | ||
move 10 | move 10 | ||
- | paste 20 | + | paste |
backspace | backspace | ||
undo | undo | ||
Linia 61: | Linia 72: | ||
<file rezultat.out rezultat.out> | <file rezultat.out rezultat.out> | ||
- | ium dolor sit amet,ps consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore | + | ium dolor spsuit |
- | et dolore magna aliqua. | + | ut labore et dolore magna aliqua. |
</ | </ | ||
Linia 73: | Linia 84: | ||
* Nerespectarea regulilor de coding style va fi depunctată | * Nerespectarea regulilor de coding style va fi depunctată | ||
* Se va depuncta lucrul nemodularizat, | * Se va depuncta lucrul nemodularizat, | ||
+ | * Memoria trebuie dealocată. Dacă nu se respectă această cerință, vor fi date depunctări. | ||
* Ea va conține (direct în rădăcină): | * Ea va conține (direct în rădăcină): | ||
- | - fișierul main.c | + | - fișierele sursă |
- | - Makefile-ul (cu regulile make pentru executabilul | + | - Makefile-ul (cu regulile |
- fișierul README în care va fi descrisă soluția problemei | - fișierul README în care va fi descrisă soluția problemei | ||
* Dacă soluția voastră nu compilează, | * Dacă soluția voastră nu compilează, | ||
* Temele care vor fi copiate vor primi **0p** \\ | * Temele care vor fi copiate vor primi **0p** \\ | ||
- | * **BONUS 1**: Implementarea | + | |
- | * **BONUS 2**: 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. | + | * Celelalte |
+ | * **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 | ||
| | ||
| |