Differences

This shows you the differences between two versions of the page.

Link to this comparison view

sd-ca:teme:teme-01 [2015/03/18 12:04]
daniel.ciocirlan1607 [FAQ]
sd-ca:teme:teme-01 [2015/04/01 18:34] (current)
andrei.vasiliu2211 [Teste publice]
Line 12: Line 12:
 ** Deadline hard: 5 aprilie, ora 23:55 ** ** Deadline hard: 5 aprilie, ora 23:55 **
  
 +==== Modificări și actualizări ====
 +  * **20 martie** modificare check_pc.sh din arhivă
 +  * **22 martie** pus fișierele de referință în arhiva de testare, specificat format de output
 +  * **23 martie** detalii pentru operatorul de concatenare
 ===== Obiective ===== ===== Obiective =====
  
Line 28: Line 32:
 Reprezintă o clasă care implementează funcționalitatea unui vector cu elemente generice. Se dorește implementarea următoarelor funcționalități:​ Reprezintă o clasă care implementează funcționalitatea unui vector cu elemente generice. Se dorește implementarea următoarelor funcționalități:​
  
-  * adăugare element +  * adăugare element, metoda se va numi //add// 
-  * ștergere element+  * ștergere element ​de pe o anumită poziție și pentru o anumită valoare, metodele (două) se vor numi //remove//, respectiv //​removeElement//;​ //​removeElement//​ va șterge //prima// apariție a valorii primite ca parametru 
 +    * ne dorim ca spațiul "​liber"​ din MyVector să se ocupe prin deplasarea restului elementelor astfel încât structura de date să fie contiguă 
 +    * exemplu: un MyVector conține elementele 1,2,3; dacă vrem să "​ștergem"​ elementul 2 din structura de date, vom deplasa elementul 3 la stânga cu o unitate astfel încât MyVector-ul nostru conține acum elementele 1,3; aveți grijă la cazuri limită
   * vectorul are dimensiunea,​ by default, de 10 elemente   * vectorul are dimensiunea,​ by default, de 10 elemente
   * poate fi specificat ca dimensiunea de început să fie alta   * poate fi specificat ca dimensiunea de început să fie alta
Line 35: Line 41:
   * dacă, prin ștergere de elemente se ajunge ca numărul de elemente actual să fie jumătate - 1 din dimensiunea actuală, aceasta se reduce la jumătate   * dacă, prin ștergere de elemente se ajunge ca numărul de elemente actual să fie jumătate - 1 din dimensiunea actuală, aceasta se reduce la jumătate
   * să existe posibilitatea de a folosi semantica de index a vectorilor din C (să putem scrie v[index], cu v de tip MyVector și index de tip întreg, care să aibă sensul din C - se aleagă elementul de la index). Atenție, se dorește ca v[index] să se poată și scrie și citi, adică să putem scrie v[index] = ceva   * să existe posibilitatea de a folosi semantica de index a vectorilor din C (să putem scrie v[index], cu v de tip MyVector și index de tip întreg, care să aibă sensul din C - se aleagă elementul de la index). Atenție, se dorește ca v[index] să se poată și scrie și citi, adică să putem scrie v[index] = ceva
-  * să existe posibilitatea de a putea scrie new_list = list1 + list2, cu new_list, list1 și list2 de tip MyVector. new_list va reprezenta concatenarea dintre list1 și list2+  * să existe posibilitatea de a putea scrie new_list = list1 + list2, cu new_list, list1 și list2 de tip MyVector. new_list va reprezenta concatenarea dintre list1 și list2; se va considera că rezultatul este list1 la care se adaugă fiecare element din list2; operanzii nu vor fi modificați
   * să implementeze 2 metode, begin și end, care să întoarcă un iterator de tip MyIterator care pointează spre primul element (begin), respectiv după ultimul element (end) al vectorului. Practic, end pointează **după** ultimul element din vector, deci nu ar trebui dereferențiat   * să implementeze 2 metode, begin și end, care să întoarcă un iterator de tip MyIterator care pointează spre primul element (begin), respectiv după ultimul element (end) al vectorului. Practic, end pointează **după** ultimul element din vector, deci nu ar trebui dereferențiat
 +  * să poată fi afișată de către un stream de output (e.g. std::cout); formatul de ieșire este simplu: toate elementele structurii, separate prin spațiu
 ==== MyIterator ==== ==== MyIterator ====
  
Line 45: Line 51:
   * să rețină index-ul actual din container până unde a iterat   * să rețină index-ul actual din container până unde a iterat
   * să implementeze posibilitatea de a folosi semantica de dereferențiere din C (să putem scrie *it, cu it de tip MyIterator, care să reprezinte elementul curent din container unde s-a ajuns cu iterarea)   * să implementeze posibilitatea de a folosi semantica de dereferențiere din C (să putem scrie *it, cu it de tip MyIterator, care să reprezinte elementul curent din container unde s-a ajuns cu iterarea)
-  * să implementeze posibilitatea de a scrie it++, ++it, it--, --it, cu it de tip MyIterator, care să incrementeze/​decrementeze locul unde s-a ajuns cu iterarea asupra container-ului+  * să implementeze posibilitatea de a scrie it++, ++it, it - -, - - it, cu it de tip MyIterator, care să incrementeze/​decrementeze locul unde s-a ajuns cu iterarea asupra container-ului
   * să implementeze posibilitatea de a scrie it >> x și it << y, cu it de tip MyIterator și x, y de tip întreg, care să incrementeze (>>), cu x, respectiv să decrementeze (<<), cu y, locul unde s-a ajuns cu iterarea asupra container-ului   * să implementeze posibilitatea de a scrie it >> x și it << y, cu it de tip MyIterator și x, y de tip întreg, care să incrementeze (>>), cu x, respectiv să decrementeze (<<), cu y, locul unde s-a ajuns cu iterarea asupra container-ului
   * să implementeze posibilitatea de a scrie ~it, cu it de tip MyIterator, care să șteargă elementul din container spre care pointează iteratorul it   * să implementeze posibilitatea de a scrie ~it, cu it de tip MyIterator, care să șteargă elementul din container spre care pointează iteratorul it
Line 69: Line 75:
 Tema voastră va fi testată folosind niște fișiere sursă .cpp, care vor include cele 2 header-e și vor instanția cele 2 clase pe care le aveți de implementat,​ verificând funcționalitățile cerute. Tema voastră va fi testată folosind niște fișiere sursă .cpp, care vor include cele 2 header-e și vor instanția cele 2 clase pe care le aveți de implementat,​ verificând funcționalitățile cerute.
  
-<​note ​important> Folosiți MyVector și MyIterator, respectiv MyVector.h și MyIterator.h ​pentru numele claselor și respectiv ​pentru numele fișierelor,​ altfel testele nu vor trece chiar dacă voi implementați cum trebuie totul. </​note>​+<​note ​warning> Folosiți ​**MyVector** și **MyIterator** pt numele claselor, respectiv ​**MyVector.h** și **MyIterator.h** pentru numele fișierelor,​ altfel testele nu vor trecechiar dacă voi implementați cum trebuie totul. </​note>​
  
 <note important>​ Având în vedere modul de testare, dacă veți avea funcționalități neimplementate,​ cel puțin unele dintre teste nu vor compila. </​note>​ <note important>​ Având în vedere modul de testare, dacă veți avea funcționalități neimplementate,​ cel puțin unele dintre teste nu vor compila. </​note>​
Line 82: Line 88:
 ==== Teste publice ==== ==== Teste publice ====
  
-Aveți la dispoziție o arhivă ce conține o suită de teste publice ​(singurele cu care va fi testată tema), reprezentate prin niște fișiere .cpp, și un Makefile care va încerca compilarea fiecărui fișier din teste.+Aveți la dispoziție o arhivă ce conține o suită de teste publice, reprezentate prin niște fișiere .cpp, și un Makefile care va încerca compilarea fiecărui fișier din teste.
  
-{{|Arhiva de testare}}+{{:​sd-ca:​teme:​tests.zip|Arhiva de testare}}
  
 ===== Reguli pentru trimitere ===== ===== Reguli pentru trimitere =====
Line 101: Line 107:
   * 10 puncte: README   * 10 puncte: README
   * **Bonus 10 puncte** pentru soluțiile ce nu au memory leak-uri.   * **Bonus 10 puncte** pentru soluțiile ce nu au memory leak-uri.
-  * TOTAL: ​100 puncte ​(+10 bonus)+  * TOTAL: ​110 puncte
  
 <note warning> Codul vostru va fi verificat să nu genereze comportament nedefinit (undefined behaviour) cu valgrind. Dacă se va observa că există cod care ar putea genera astfel de comportament din partea compilatorului,​ se poate scădea tot punctajul de pe temă (o tema cu undefined behaviour poate merge sau nu, în funcție de mașina pe care a fost compilată, memoria RAM disponibilă la acel moment, starea vremii în ziua compilării sau orice alt motiv super concludent :-p).  <note warning> Codul vostru va fi verificat să nu genereze comportament nedefinit (undefined behaviour) cu valgrind. Dacă se va observa că există cod care ar putea genera astfel de comportament din partea compilatorului,​ se poate scădea tot punctajul de pe temă (o tema cu undefined behaviour poate merge sau nu, în funcție de mașina pe care a fost compilată, memoria RAM disponibilă la acel moment, starea vremii în ziua compilării sau orice alt motiv super concludent :-p). 
sd-ca/teme/teme-01.1426673099.txt.gz · Last modified: 2015/03/18 12:04 by daniel.ciocirlan1607
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0