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:55] florina_elena.barbu [Reguli pentru trimitere] |
teme:tema1 [2017/03/14 14:55] iulian.matesica [Informații] |
||
---|---|---|---|
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 75: | Linia 86: | ||
* Memoria trebuie dealocată. Dacă nu se respectă această cerință, vor fi date depunctări. | * 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ă, |