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.

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:

  • lista: lista cu 0 sau mai multe obiecte de oricare tip (ex: phoneNumbers, children)
  • obiect: colectie de perechi cheie:valoare unde cheia este de tip string (unica in cadrul obiectului) iar valoarea poate fi de orice tip
  • string: secventa de 0 sau mai multe caractere ASCI
  • boolean: true sau false
  • number: intreg
  • 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 modificare a obiectelor JSON.

Operatii

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

  • load(fisier): incarca in memorie 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
  • dump(fisier): printeaza obiectul JSON incarcat in memorie intr-un fisier (daca vrem dump tre sa le zicem cum sa stocheze obiectele si isi pierde tema tot farmecul)
  • poate si altele

Exemplu input/output

Inca nu sunt batute in cuie, maine (21 aprilie) seara le batem.

LOAD example.json
GET isAlive
GET spouse
GET firstname
GET address state
GET phoneNumbers 0 type
GET middleName
PUT middleName Samuel
GET middleName
GET age
PUT age 30
GET age
GET address building
PUT address building 7
GET address building
GET phoneNumber 0 number
PUT phoneNumber 0 number 212 555-5678
GET phoneNumber 0 number
true
null
John
NY
home
UNEXISTENT
SAMUEL
25
30
UNEXISTENT
7
212 555-1234
212 555-5678

Precizari

Fisierele de test cu obiectele JSON sunt valide.

Indicatii de implementare

Maine seara (21 aprilie) vedem ce indicatii dam.

Teste publice

TODO

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.1429543510.txt.gz · Last modified: 2015/04/20 18:25 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