This shows you the differences between two versions of the page.
programare:teme_2018:tema2_2018_cbd [2018/11/10 22:47] ioana.alexandru mici clarificări |
programare:teme_2018:tema2_2018_cbd [2018/12/10 10:56] (current) ioana.alexandru [Informații] |
||
---|---|---|---|
Line 4: | Line 4: | ||
* [[ioanaa.alexandru98@gmail.com|Ioana Alexandru]] | * [[ioanaa.alexandru98@gmail.com|Ioana Alexandru]] | ||
* [[oana.balan@cs.pub.ro|Oana Bălan]] | * [[oana.balan@cs.pub.ro|Oana Bălan]] | ||
- | |||
- | |||
- | char | ||
====== Informații ====== | ====== Informații ====== | ||
- | * Data publicare: **TODO** | + | * Data publicare: 17 Noiembrie 2018 |
- | * Deadline Soft: **TODO** | + | * Deadline Soft: 11 Decembrie 2018 (23:55) |
- | * Deadline Hard: **TODO** | + | * Deadline Hard: 16 Decembrie 2018 (23:55) |
+ | <note>Update 10 Decembrie 8:55 - Deadline soft extins cu o zi.</note> | ||
- | <hidden> | ||
====== Obiective ====== | ====== Obiective ====== | ||
Line 54: | Line 51: | ||
<code=bash>W max_line_length</code> | <code=bash>W max_line_length</code> | ||
- | Operația //wrap// adaugă și elimină caractere //newline// din text astfel încât textul să se încadreze în ''max_line_length'' (să aibă lungimea mai mică sau egală), fără a permite linii prea scurte (în afara ultimei linii dintr-un paragraf) și fără a trunchia cuvintele. O linie este prea scurtă dacă primul cuvânt din linia următoare ar fi încăput în ea fără să depășească ''max_line_length''. | + | Operația //wrap// adaugă și elimină caractere //newline// din text astfel încât textul să se încadreze în ''max_line_length'' (să aibă lungimea - în octeți - mai mică sau egală), fără a permite linii prea scurte (în afara ultimei linii dintr-un paragraf) și fără a trunchia cuvintele. O linie este prea scurtă dacă primul cuvânt din linia următoare ar fi încăput în ea fără să depășească ''max_line_length''. |
+ | |||
+ | Atunci când două linii ''l1'' și ''l2'' sunt concatenate în urma unei operații //wrap//, rezultatul obținut va fi ''"l1` l2`"'' unde ''l1`'' este ''l1'' fără //trailing whitespace//, iar ''l2`'' este ''l2'' fără //starting whitespace//. | ||
<note tip>Un **cuvânt** este orice grupare de caractere încadrată de //whitespace// (spațiu, tab, newline). Spre exemplu, într-un text dat, "după-amiază" va fi considerat un singur cuvânt și nu va fi trunchiat.</note> | <note tip>Un **cuvânt** este orice grupare de caractere încadrată de //whitespace// (spațiu, tab, newline). Spre exemplu, într-un text dat, "după-amiază" va fi considerat un singur cuvânt și nu va fi trunchiat.</note> | ||
Line 109: | Line 108: | ||
<code=bash>C [start_line [end_line]]</code> | <code=bash>C [start_line [end_line]]</code> | ||
- | Operația //center// folosește ca referință cea mai lungă linie din fișier și adaugă spații la începutul liniilor care sunt mai scurte pentru a le centra. | + | Operația //center// folosește ca referință cea mai lungă linie din fișier (fără //trailing whitespace//) și adaugă spații la începutul liniilor care sunt mai scurte pentru a le centra. |
<note>Fie dat următorul fișier de intrare pe care se aplică operația ''C'': | <note>Fie dat următorul fișier de intrare pe care se aplică operația ''C'': | ||
Line 129: | Line 128: | ||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer | ||
elementum, ipsum sit amet vulputate semper, orci justo condimentum | elementum, ipsum sit amet vulputate semper, orci justo condimentum | ||
- | felis, eu lobortis metus quam ac mauris. Mauris sed pharetra leo. | + | felis, eu lobortis metus quam ac mauris. Mauris sed pharetra leo. |
Morbi mollis nunc eu velit tincidunt ullamcorper. Vestibulum | Morbi mollis nunc eu velit tincidunt ullamcorper. Vestibulum | ||
finibus tellus ac lobortis porttitor. Integer a lacus nisi. Morbi | finibus tellus ac lobortis porttitor. Integer a lacus nisi. Morbi | ||
Line 169: | Line 168: | ||
<code=bash>R [start_line [end_line]]</code> | <code=bash>R [start_line [end_line]]</code> | ||
- | Operația //align right// folosește ca referință cea mai lungă linie din fișier și adaugă spații la începutul liniilor care sunt mai scurte pentru a le alinia la marginea din dreapta. | + | Operația //align right// folosește ca referință cea mai lungă linie din fișier (fără //trailing whitespace//) și adaugă spații la începutul liniilor care sunt mai scurte pentru a le alinia la marginea din dreapta. |
<note>Fie dat următorul fișier de intrare pe care se aplică operația ''R'': | <note>Fie dat următorul fișier de intrare pe care se aplică operația ''R'': | ||
Line 209: | Line 208: | ||
Quisque blandit lobortis purus vitae gravida. | Quisque blandit lobortis purus vitae gravida. | ||
- | Morbi sit amet euismod leo. Quisque in hendrerit turpis, ac | + | Morbi sit amet euismod leo. Quisque in hendrerit turpis, ac |
fringilla ante. Sed id mi bibendum, scelerisque arcu vel, | fringilla ante. Sed id mi bibendum, scelerisque arcu vel, | ||
rutrum nibh. | rutrum nibh. | ||
Line 274: | Line 273: | ||
<code=bash>I list_type special_character [start_line [end_line]]</code> | <code=bash>I list_type special_character [start_line [end_line]]</code> | ||
- | Această operație formatează liniile corespunzătoare ca pe o listă a cărei **indici** sunt definiți în funcție de parametrii ''list_type'' și ''special_character''. | + | Această operație formatează liniile corespunzătoare ca pe o listă (aliniată la stânga) a cărei **indici** sunt definiți în funcție de parametrii ''list_type'' și ''special_character''. |
Parametrul ''list_type'' indică tipul listei: | Parametrul ''list_type'' indică tipul listei: | ||
Line 410: | Line 409: | ||
Tema va fi trimisă folosind [[https://vmchecker.cs.pub.ro|vmchecker]], cursul **Programarea Calculatoarelor (CB & CD)**. \\ | Tema va fi trimisă folosind [[https://vmchecker.cs.pub.ro|vmchecker]], cursul **Programarea Calculatoarelor (CB & CD)**. \\ | ||
- | Găsiți checker-ul {{:programare:teme_2018:2-format-text.zip|TODO}}. | + | Găsiți checker-ul {{:programare:teme_2018:tema2_cb.zip|aici}}. |
+ | <note warning> | ||
+ | **Atenție!** Checker-ul verifică atât fișierul obținut, cât și ''stdout''. Nu trebuie să afișați nimic la ''stdout'', în afară de cele 3 mesaje de eroare precizate în secțiunea [[https://ocw.cs.pub.ro/courses/programare/teme_2018/tema2_2018_cbd#tratarea-cazurilor-speciale|Tratarea cazurilor speciale]]. | ||
+ | </note> | ||
Formatul arhivei va fi următorul: | Formatul arhivei va fi următorul: | ||
Line 420: | Line 422: | ||
- **clean**: șterge fișierele obiect/executabile create. | - **clean**: șterge fișierele obiect/executabile create. | ||
- Un fișier [[https://en.wikipedia.org/wiki/README|README]] în care vă descrieți rezolvarea temei. | - Un fișier [[https://en.wikipedia.org/wiki/README|README]] în care vă descrieți rezolvarea temei. | ||
- | <note tip>Este necesară scrierea numelui si a grupei atât în fișierul README, cât și în toate fișierele sursă pe care le adăugați în arhiva temei.</note> | + | <note tip>Este necesară scrierea numelui și a grupei atât în fișierul README, cât și în toate fișierele sursă pe care le adăugați în arhiva temei.</note> |
====== Observații ====== | ====== Observații ====== | ||
* Nu folosiți variabile globale. | * Nu folosiți variabile globale. | ||
* Fiți consistenți în ceea ce privește [[programare:coding-style|Coding Style-ul]]. | * Fiți consistenți în ceea ce privește [[programare:coding-style|Coding Style-ul]]. | ||
* Nu este nevoie să folosiți alocare dinamică. | * Nu este nevoie să folosiți alocare dinamică. | ||
- | * Fișierele obținute nu trebuie să conțină [[https://blog.codinghorror.com/whitespace-the-silent-killer/|trailing whitespace]] (cu excepția situației în care aveți o operație invalidă). | + | * Fișierele obținute nu trebuie să conțină [[https://blog.codinghorror.com/whitespace-the-silent-killer/|trailing whitespace]] (cu excepția situației în care aveți o operație invalidă). În urma unei operații goale (''""''), fișierul obținut va avea același conținut ca cel inițial, dar nu va conține trailing whitespace. |
- | ====== Listă depunctări ====== | + | ====== Listă depunctări (neexhaustivă) ====== |
* o temă care nu compilează și nu a rulat pe **vmchecker** nu va fi luată în considerare | * o temă care nu compilează și nu a rulat pe **vmchecker** nu va fi luată în considerare | ||
* o temă care nu rezolvă cerința și trece testele prin alte mijloace nu va fi luată în considerare | * o temă care nu rezolvă cerința și trece testele prin alte mijloace nu va fi luată în considerare | ||
Line 433: | Line 435: | ||
* [-1.0]: numele variabilelor nu sunt sugestive | * [-1.0]: numele variabilelor nu sunt sugestive | ||
* [-1.0]: linii mai lungi de 80 de caractere | * [-1.0]: linii mai lungi de 80 de caractere | ||
+ | * [-1.0]: cod nemodular, funcții prea lungi (inclusiv main) | ||
* [-5.0]: abordare ineficientă | * [-5.0]: abordare ineficientă | ||
* în cadrul cursului de programare nu avem ca obiectiv rezolvarea în cel mai eficient mod posibil a programelor; totuși, ne dorim ca abordarea să nu fie una ineficientă, de genul să nu folosiți instrucțiuni repetitive acolo unde clar era cazul, etc. | * în cadrul cursului de programare nu avem ca obiectiv rezolvarea în cel mai eficient mod posibil a programelor; totuși, ne dorim ca abordarea să nu fie una ineficientă, de genul să nu folosiți instrucțiuni repetitive acolo unde clar era cazul, etc. | ||
Line 440: | Line 443: | ||
* [[http://pubs.opengroup.org/onlinepubs/009695399/basedefs/string.h.html|Biblioteca string.h]] | * [[http://pubs.opengroup.org/onlinepubs/009695399/basedefs/string.h.html|Biblioteca string.h]] | ||
- | </hidden> |