+ All Categories
Home > Documents > Proiect Partea a 2-amarianzsu/Postuniv/Proiect/GhidParte2.pdf · Proiect – Partea a 2-a Pentru...

Proiect Partea a 2-amarianzsu/Postuniv/Proiect/GhidParte2.pdf · Proiect – Partea a 2-a Pentru...

Date post: 29-Feb-2020
Category:
Upload: others
View: 34 times
Download: 0 times
Share this document with a friend
3
Proiect Partea a 2-a Pentru partea a 2-a a proiectului, va trebui să implementați în Java rezolvarea problemei primite, folosind o implementare existentă pentru container (containerul pe care va trebui să-l folosiți, o -l primiți după ce îmi trimiteți prima parte a proiectului). Puteți folosi containerul de mai multe ori/în mai multe locuri, dar încercați să nu folosiți alt container. Va trebui să faceți un meniu mic în consolă și să aveți câte o opțiune pentru fiecare cerință a proiectului (cerințele sunt enumerate la partea cu funcționalități din descrierea problemei). În tabelul de mai jos aveți clasele exacte din Java care trebuie folosite pentru rezolvare: Containerul folosit Interfața Clasa Java care poate fi folosită TAD Colecție* Colectie ColectieImpl TAD Colecție Ordonată* ColectieOrdonata ColectieOrdonataImpl TAD Mulțime Set HashSet TAD Mulțime Ordonată SortedSet TreeSet TAD Listă List ArrayList sau LinkedList TAD Listă Ordonată* ListaOrdonata ListaOrdonataImpl TAD Stiva Stack Stack TAD Coadă Queue LinkedList TAD Coadă cu Priorități PriorityQueue PriorityQueue TAD Dicționar Map HashMap TAD MultiDicționar* MultiDictionar MultiDictionarImpl Vă rog să creați containerul folosit în implementarea proiectului sub forma: Interfata<TIP> numevariabila = new ClasaJava<TIP>(); Exemple: Set<String> s = new HashSet<String>(); List<Integer> ll = new ArrayList<Integer>(); Queue<String> coada = new LinkedList<String>(); Map<String, Integer> dictionar = new HashMap<String, Integer>(); Containerele marcate cu * în tabelul de mai sus nu există în Java. Pentru aceste containere v-am făcut eu o implementare foarte simplă, fișierele sunt în arhiva atașată. Pentru fiecare container există o interfață (clasă în care sunt enumerate doar operațiile, fără implementare și fără atribute) și un fișier cu implementare. Ambele fișiere trebuie adăugate în proiectul vostru, și este suficient să vă uitați în interfață să vedeți ce operații există, nu trebuie să înțelegeți implementarea. Doar să folosiți operațiile.
Transcript
Page 1: Proiect Partea a 2-amarianzsu/Postuniv/Proiect/GhidParte2.pdf · Proiect – Partea a 2-a Pentru partea a 2-a a proiectului, va trebui să implementați în Java rezolvarea problemei

Proiect – Partea a 2-a

Pentru partea a 2-a a proiectului, va trebui să implementați în Java rezolvarea problemei primite,

folosind o implementare existentă pentru container (containerul pe care va trebui să-l folosiți, o să-l

primiți după ce îmi trimiteți prima parte a proiectului). Puteți folosi containerul de mai multe ori/în mai

multe locuri, dar încercați să nu folosiți alt container.

Va trebui să faceți un meniu mic în consolă și să aveți câte o opțiune pentru fiecare cerință a proiectului

(cerințele sunt enumerate la partea cu funcționalități din descrierea problemei).

În tabelul de mai jos aveți clasele exacte din Java care trebuie folosite pentru rezolvare:

Containerul folosit Interfața Clasa Java care poate fi folosită

TAD Colecție* Colectie ColectieImpl

TAD Colecție Ordonată* ColectieOrdonata ColectieOrdonataImpl

TAD Mulțime Set HashSet

TAD Mulțime Ordonată SortedSet TreeSet

TAD Listă List ArrayList sau LinkedList

TAD Listă Ordonată* ListaOrdonata ListaOrdonataImpl

TAD Stiva Stack Stack

TAD Coadă Queue LinkedList

TAD Coadă cu Priorități PriorityQueue PriorityQueue

TAD Dicționar Map HashMap

TAD MultiDicționar* MultiDictionar MultiDictionarImpl

Vă rog să creați containerul folosit în implementarea proiectului sub forma:

Interfata<TIP> numevariabila = new ClasaJava<TIP>();

Exemple:

Set<String> s = new HashSet<String>();

List<Integer> ll = new ArrayList<Integer>();

Queue<String> coada = new LinkedList<String>();

Map<String, Integer> dictionar = new HashMap<String, Integer>();

Containerele marcate cu * în tabelul de mai sus nu există în Java. Pentru aceste containere v-am făcut

eu o implementare foarte simplă, fișierele sunt în arhiva atașată. Pentru fiecare container există o

interfață (clasă în care sunt enumerate doar operațiile, fără implementare și fără atribute) și un fișier cu

implementare. Ambele fișiere trebuie adăugate în proiectul vostru, și este suficient să vă uitați în

interfață să vedeți ce operații există, nu trebuie să înțelegeți implementarea. Doar să folosiți operațiile.

Page 2: Proiect Partea a 2-amarianzsu/Postuniv/Proiect/GhidParte2.pdf · Proiect – Partea a 2-a Pentru partea a 2-a a proiectului, va trebui să implementați în Java rezolvarea problemei

Containerele ordonate implementate de mine necesită transmiterea unui comparator la constructor

Acest comparator va fi folosit pentru a ordona elementele.

Atât containerele din Java, cât și implementările mele, pot primi ca parametru tipul elementelor care vor

fi stocate în container (de exemplu, dacă vreți o Colecție de Stringuri, puteți scrie Colecție<String>).

Iteratorul

Toate containerele (mai puțin Coada, Stiva și Coada cu Priorități) au iterator. Iteratorul în Java are doar 2

operații (nu trei, așa cum discutăm noi la curs): hasNext (returnează true dacă mai sunt elemente de

iterat) și next (returnează elementul curent și trece la elementul următor). Implementările cu * tot

aceste 2 operații le au. Pentru a crea un iterator pentru un container (exceptând MultiDicționarul și

Dicționarul) putem scrie:

Iterator<String> it = s.iterator()

Evident, în loc de String puteți folosi tipul de date pe care îl aveți voi în container.

Pentru un MultiDicționar, puteți crea un iterator cu:

Iterator<Map.Entry<String, Integer>> it = s.iterator()

Map.Entry este o clasă din Java, care reprezintă o pereche cheie, valoare. Iteratorul merge peste

perechi. Elementul returnat de funcția next() este o pereche (de tip Map.Entry), care are operația

getKey() și getValue() pentru a returna cheia și valoarea din pereche.

Dicționarul în Java nu are iterator. Dar are operații care returnează o mulțime de chei sau o mulțime de

perechi (o pereche este de tip Map.Entry) și puteți defini un iterator pe această mulțime.

Elemente random

Anumite probleme cer să selectați aleator un element dintr-un container. Pentru a genera numere

aleatoare puteți folosi clasa Random din Java.

Clasa Random are operație nextInt(limit), care returnează un element între 0 și limit-1. Presupunând că

aveți un container c, puteți lua un element aleator din container folosind cod de genul:

Random r = new Random()

int poselem = r.nextInt(c.size())

Iterator it = c.iterator()

int contor = 0

TElem element = it.next();

while (contor < poselem) {

element = it.next()

contor++

}

Dacă aveți nevoie de mai multe elemente alese Random, puteți repeta procesul de mai sus de mai multe ori. Dacă vă trebuie elemente diferite (bucata de mai sus, s-ar putea să returneze același element de mai multe ori) puteți face o copie a containerului (alt container în care adăugați toate elementele din c) și

Page 3: Proiect Partea a 2-amarianzsu/Postuniv/Proiect/GhidParte2.pdf · Proiect – Partea a 2-a Pentru partea a 2-a a proiectului, va trebui să implementați în Java rezolvarea problemei

când selectați/returnați un element aleator, îl puteți șterge din copie. Astfel vă asigurați că nu returnați același element de mai multe ori.

Baza de date

În anumite probleme containerul este de fapt o bază de dată care conține informațiile cu care se

lucrează în problemă. La aceste probleme, pentru a testa soluția implementată aveți nevoie ca baza de

date să conțină elemente (în general undeva în jur de 10 elemente, poate chiar mai multe). E plictisitor

ca de fiecare dată când rulați codul să introduceți de la tastatură acele elemente. Puteți face o funcție,

de exemplu populeazăBazaDeDate în care să adăugați elementele necesare (hardcodate). De exemplu:

public Set<String> populeazaBazaDeDate(){

Set<String> mySet = new HashSet<String>();

mySet.add(“unElement”);

mySet.add(“altElemente”);

//…

mySet.add(“ultimElemente”);

return mySet;

}

La începutul programului, apelați funcția de mai sus, ca să aveți elemente în baza de date cu care să lucrați.

Structura proiectului

Scopul proiectului este să văd că puteți folosi un container pentru a rezolva o problemă. De aceea, nu

trebuie să lucrați cu fișiere (citiți datele de la tastatură sau puteți să le hardcodați) și nici nu trebuie să

împărțiți rezolvarea problemei în mai multe fișiere. E ok dacă lucrați într-un singur fișier (implementați o

singură clasă) sau eventual încă o clasă separată pentru partea de comunicare cu utilizator.

Dacă vreți puteți folosi fișiere sau puteți împărți codul în mai multe clase, dar numai dacă vi-i confortabil

să lucrați așa.


Recommended