This shows you the differences between two versions of the page.
programare:teme_2018:tema2_2018_cbd [2018/10/08 23:17] ioana.alexandru maxim 10 comenzi |
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]] | ||
+ | ====== Informații ====== | ||
+ | * Data publicare: 17 Noiembrie 2018 | ||
+ | * Deadline Soft: 11 Decembrie 2018 (23:55) | ||
+ | * Deadline Hard: 16 Decembrie 2018 (23:55) | ||
+ | <note>Update 10 Decembrie 8:55 - Deadline soft extins cu o zi.</note> | ||
- | |||
- | char====== Informații ====== | ||
- | * Data publicare: **TODO** | ||
- | * Deadline Soft: **TODO** | ||
- | * Deadline Hard: **TODO** | ||
- | |||
- | <hidden> | ||
====== Obiective ====== | ====== Obiective ====== | ||
Line 53: | 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 91: | Line 91: | ||
justo condimentum felis, eu lobortis metus quam ac mauris. | justo condimentum felis, eu lobortis metus quam ac mauris. | ||
Mauris sed pharetra leo. Morbi mollis nunc eu velit | Mauris sed pharetra leo. Morbi mollis nunc eu velit | ||
- | tincidunt ullamcorper. Vestibulum finibus tellus ac | + | tincidunt ullamcorper. Vestibulum finibus tellus ac lobortis |
- | lobortis porttitor. Integer a lacus nisi. Morbi mauris | + | porttitor. Integer a lacus nisi. Morbi mauris massa, aliquam |
- | massa, aliquam sed eros in, fringilla accumsan neque. | + | sed eros in, fringilla accumsan neque. Quisque blandit |
- | Quisque blandit lobortis purus vitae gravida. | + | lobortis purus vitae gravida. |
Morbi sit amet euismod leo. Quisque in hendrerit turpis, ac | Morbi sit amet euismod leo. Quisque in hendrerit turpis, ac | ||
Line 108: | 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 128: | 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 168: | 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 208: | 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 241: | Line 241: | ||
<code=bash>P indent_length [start_line [end_line]]</code> | <code=bash>P indent_length [start_line [end_line]]</code> | ||
- | Această operație realizează indentarea automată a paragrafelor din intervalul precizat (dacă există), cu ''indent_length'' spații. Se va indenta doar prima linie din fiecare paragraf. | + | Această operație realizează indentarea automată a paragrafelor din intervalul precizat (dacă există), cu ''indent_length'' spații (maxim 8). Se va indenta doar prima linie din fiecare paragraf. |
- | <note tip>Un paragraf nou este marcat prin două caractere newline ("\n\n").</note> | + | <note tip>Un paragraf nou este marcat prin două sau mai multe caractere newline ("\n\n").</note> |
<note>Fie dat următorul fișier de intrare pe care se aplică operația ''P 4'': | <note>Fie dat următorul fișier de intrare pe care se aplică operația ''P 4'': | ||
Line 273: | 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 409: | 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 419: | 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]]. | + | * 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 432: | 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 439: | 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> |