This is an old revision of the document!


Tema 3

Responsabili:

Depunctare întârziere după depășirea deadline-ului soft: -10p/zi

Deadline soft: XX mai, ora 23:55

Deadline hard: XX mai, ora 23:55

Obiective

În urma realizării acestei teme studentul:

  • va fi capabil să implementeze și să foloseasca un hashtable
  • isi va îmbunatați abilitatea de lucru cu liste
  • va folosi structurile de date pentru a implementa o posibilia aplicatie reala

Cerinta

Se cere implementarea unei structuri de date care sa eficientizeze manipularea obiectelor de tip JSON.

JSON este un acronim în limba engleză pentru JavaScript Object Notation, și este un format de reprezentare și interschimb de date între aplicații informatice. Este un format text, inteligibil pentru oameni, utilizat pentru reprezentarea obiectelor și a altor structuri de date și este folosit în special pentru a transmite date structurate prin rețea, procesul purtând numele de serializare. JSON este alternativa mai simplă, mai facilă decât limbajul XML. Eleganța formatului JSON provine din faptul că este un subset al limbajului JavaScript (ECMA-262 3rd Edition), fiind utilizat alături de acest limbaj. Formatul JSON a fost creat de Douglas Crockford și standardizat prin RFC 4627.

TODO: POVESTE

Exemplu de obiect JSON:

example.json
{
  "firstName": "John",
  "lastName": "Smith",
  "isAlive": true,
  "age": 25,
  "address": {
    "streetAddress": "21 2nd Street",
    "city": "New York",
    "state": "NY",
    "postalCode": "10021-3100"
  },
  "phoneNumbers": [
    {
      "type": "home",
      "number": "212 555-1234"
    },
    {
      "type": "office",
      "number": "646 555-4567"
    }
  ],
  "children": [
  ],
  "spouse": null
}

Tipurile de baza pentru obiectele JSON sunt:

  • JSON_ARRAY: vector cu 0 sau mai multe objects
  • JSON_OBJECT: colectie de perechi cheie:valoare unde cheia este de tip string (unica in cadrul object-ului) iar valoarea poate fi de orice tip
  • JSON_STRING: secventa de 0 sau mai multe caractere ASCII
  • JSON_BOOL: true sau false
  • JSON_NUMBER: intreg
  • JSON_NULL: valoare nula, reprezentata de cuvantul null

Cerinta pentru voi este sa stocati obiecte de tip JSON intr-o structura de date care sa optimizeze operatiile de interogare si modificare a obiectelor JSON.

Operatii

Operatiile pe care structura voastra de date trebuie sa le efectueze sunt:

  • load(fisier): incarca in structura voastra de date un obiect JSON dintr-un fisier
  • get(succesiune_chei): afiseaza valoarea ultimei chei din succesiunea de chei
  • put(succesiune_chei, valoare): adauga/modifica perechea ultima_cheie:valoare
  • del(succesiune_chei):: sterge perechea ultima_cheie:valoare

Exemplu input/output

input
LOAD example.json
GET "notAKey"
GET "spouse"
GET "isAlive"
GET "age"
GET "firstName"
GET "address"
GET "address" "streetAddress"
GET "notAnObject" "streetAddress"
GET "phoneNumbers"
GET "phoneNumbers" 0
GET "phoneNumbers" 1 "type"
GET "phoneNumbers" 2 "type"
PUT "newKey" "newValue"
PUT "firstName" "Jack"
PUT "address" "state" null
PUT "notAnObject" "newKey" "newValue"
PUT "phoneNumbers" 0 "type" "office"
PUT "phoneNumbers" "type" "mobile"
GET "phoneNumbers" 2 "type"
DEL "spouse"
DEL "notAKey"
DEL "phoneNumbers" 0
DEL "phoneNumbers" 0
DEL "phoneNumbers" 0
output
JSON_NOT_A_KEY "notAKey"
null
true
25
"John"
JSON_OBJECT
"21 2nd Street"
JSON_NOT_AN_OBJECT "notAnObject"
JSON_ARRAY
JSON_OBJECT
"office"
JSON_NOT_AN_ARRAY "phoneNumbers"
JSON_PUT_OK
JSON_PUT_OK
JSON_PUT_OK
JSON_PUT_OK
JSON_PUT_OK
JSON_PUT_OK
"mobile"
JSON_DEL_OK
JSON_DEL_NOT_A_KEY "notAkey"
JSON_DEL_OK
JSON_DEL_OK
JSON_DEL_NOT_AN_ARRAY

Precizari

Fisierele de test cu obiectele JSON sunt valide.

Indicatii de implementare

TODO

Teste publice

Se vor publica pe data de 27 aprilie, ora 00:00.

Reguli pentru trimitere

Temele vor trebui trimise pe vmchecker. Atenție! Temele trebuie trimise în secțiunea Structuri de Date (CA).

Arhiva trebuie să conțină:

  • sursele voastre
  • fisier README care să conțină detalii despre implementarea temei

Punctaj

  • 90 puncte obținute pe testele de pe vmchecker
  • 10 puncte: README + alte eventuale penalizări
  • Bonus 10 puncte pentru soluțiile ce nu au memory leak-uri.
  • TOTAL: 100 puncte (+10 bonus)

Coding style-ul trebuie sa fie consistent și ușor de citit. Ca ghid vă recomandăm:

sau

Citiți cu atenție Regulamentul General de Trimitere a Temelor.

Nu copiați! Toate soluțiile vor fi verificate folosind o unealtă de detectare a plagiatului. În cazul detectării unui astfel de caz, atât plagiatorul cât și autorul original (nu contează cine care e) vor primi punctaj 0 pe temele incepand de la prima si aceasta inclusiv. Heed my warning!

De aceea, vă sfătuim să nu vă lăsați rezolvări ale temelor pe calculatoare partajate (la laborator etc), pe mail/liste de discuții/grupuri etc.

FAQ

Q: Se poate folosi STL?

A: Se poate folosi clasa string din STL. Folosirea oricărei alte clase din STL nu este permisă

sd-ca/teme/teme-03.1429896736.txt.gz · Last modified: 2015/04/24 20:32 by razvan_madalin.matei
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