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
- 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
SD_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
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ă:
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ă