This shows you the differences between two versions of the page.
poo:laboratoare:07 [2017/11/06 12:42] carmen.odubasteanu [Problema 2] |
poo:laboratoare:07 [2019/11/06 08:01] (current) mihai.nan [Problema 1] |
||
---|---|---|---|
Line 1: | Line 1: | ||
===== Laboratorul 07. ===== | ===== Laboratorul 07. ===== | ||
+ | Arhiva laborator: {{:poo:laboratoare:arhiva7.zip| Arhiva}} | ||
- | * Responsabil: [[adresa_email|Prenume Nume]] | + | |
- | * Data publicării: XY.11.2017 | + | |
- | * Data ultimei modificări: XY.11.2017 | + | |
- | + | ||
==== Problema 1 ==== | ==== Problema 1 ==== | ||
- | Să se scrie un program pentru afișarea cuvintelor distincte dintr-un fișier text folosind clasa **//TreeSet//**. Fișierul va conține și cuvinte repetate (identice). Elementele mulțimii se vor afișa în ordine crescătoare (folosind metoda **//printWords//**) și în ordine descrescătoare (folosind metoda **//printWords//**), fără a apela o funcție de sortare, folosind două obiecte **//TreeSet//** construite diferit (cu și fără argument de tip **//Comparator//**). Se vor implementa 2 metode ce vor fi apelate din metoda **//main//**: | + | Să se scrie un program pentru afișarea cuvintelor distincte dintr-un fișier text folosind clasa **//TreeSet//**. Fișierul va conține și cuvinte repetate (identice). |
+ | Elementele mulțimii se vor afișa în ordine crescătoare (metoda **//printWords//**) și în ordine descrescătoare (metoda **//printWordsComparator//** ), fără a apela o funcție de sortare, folosind două obiecte **//TreeSet//** construite diferit (cu și fără argument de tip **//Comparator//**). | ||
+ | Se vor implementa cele 2 metode ce vor fi apelate din metoda **//main//**: | ||
* ''public TreeSet printWords (String)'' - va primi, ca argument, numele fișierului din care se citește și va folosi un obiect de tip **//TreeSet//**, instanțiat folosind constructorul fără argument de tip **//Comparator//**; | * ''public TreeSet printWords (String)'' - va primi, ca argument, numele fișierului din care se citește și va folosi un obiect de tip **//TreeSet//**, instanțiat folosind constructorul fără argument de tip **//Comparator//**; | ||
- | * ''public TreeSet printWordsComparator(TreeSet)'' - va primi ca argument obiectul de tip **//TreeSet//**, returnat de metoda anterioară, și va returna un alt obiect de tip **//TreeSet//**, stocând informațiile în ordine descrescătoare. În cazul instanțierii obiectului ce va fi returnat, folosiți constructorul cu argument de tip **//Comparator//**! | + | * ''public TreeSet printWordsComparator(TreeSet)'' - va primi ca argument obiectul de tip **//TreeSet//**, returnat de metoda anterioară, și va construi si returna un alt obiect de tip **//TreeSet//**, stocând informațiile în ordine descrescătoare. |
+ | În cazul instanțierii obiectului ce va fi returnat, folosiți constructorul cu argument de tip **//Comparator//**! | ||
+ | |||
+ | Se poate folosi ca fisier de intrare fisierul test01.txt din arhiva! | ||
Line 38: | Line 40: | ||
<note warning>Clasele **//Hero//** și **//BadLuck//** sunt clase abstracte!</note> | <note warning>Clasele **//Hero//** și **//BadLuck//** sunt clase abstracte!</note> | ||
</hidden> | </hidden> | ||
- | ==== Problema 3 ==== | + | ==== Problema 2 ==== |
- | Să se definească o clasă **//LinkedSet//** pentru o mulțime realizată ca listă înlănțuită de elemente distincte. Clasa va implementa interfața **//Set//** și va extinde clasa **//LinkedList//**. | + | Să se definească o clasă **//LinkedSet//** pentru o mulțime realizată ca listă înlănțuită de elemente distincte. Clasa va extinde clasa **//LinkedList//** și va implementa interfața **//Set//**. |
Se vor redefini cele două metode de adăugare și metoda de setare a unui obiect: | Se vor redefini cele două metode de adăugare și metoda de setare a unui obiect: | ||
Line 46: | Line 48: | ||
void add (int i, Object obj); | void add (int i, Object obj); | ||
Object set (int i , Object obj);</code></note> | Object set (int i , Object obj);</code></note> | ||
- | Să se testeze clasa prin folosirea metodelor definite și afișare! | + | Să se testeze clasa prin folosirea metodelor definite și afișare! Se poate folosi Test2.java din arhiva! |
- | ==== Problema 4 ==== | + | ==== Problema 3 ==== |
- | Să se definească o clasă **//SListSet//** pentru o mulțime ordonată de obiecte, care implementează interfața **//SortedSet//** și extinde clasa **//LinkedList//**. Clasa va conține un obiect de tip **//Comparator//** și metodele: | + | Să se definească o clasă **//SListSet//** pentru o mulțime ordonată de obiecte, care extinde clasa **//LinkedList//** si implementează interfața **//SortedSet//**. Clasa va conține un obiect de tip **//Comparator//** și metodele: |
<note tip> | <note tip> | ||
Line 57: | Line 59: | ||
Object first(); //primul obiect din multime | Object first(); //primul obiect din multime | ||
Object last(); // ultimul obiect din multime | Object last(); // ultimul obiect din multime | ||
- | SortedSet subset(Object from, Object to); // o submultime ordonata | + | SortedSet subSet(Object from, Object to); // o submultime ordonata |
SortedSet headSet(Object to); // o submultime cu primele obiecte | SortedSet headSet(Object to); // o submultime cu primele obiecte | ||
SortedSet tailSet(Object from); //o submultime cu ultimele obiecte | SortedSet tailSet(Object from); //o submultime cu ultimele obiecte | ||
Line 64: | Line 66: | ||
Se vor defini cel puțin doi constructori: fără argumente (sortare conform ordinii naturale) și cu un argument de tip **//Comparator//**. | Se vor defini cel puțin doi constructori: fără argumente (sortare conform ordinii naturale) și cu un argument de tip **//Comparator//**. | ||
Să se folosească un obiect de tip **//SListSet//** pentru afișarea cuvintelor distincte dintr-un text citit dintr-un fișier text (//test01.txt//), în ordine crescătoare sau descrescătoare (în locul clasei **//TreeSet//** din problema 1). | Să se folosească un obiect de tip **//SListSet//** pentru afișarea cuvintelor distincte dintr-un text citit dintr-un fișier text (//test01.txt//), în ordine crescătoare sau descrescătoare (în locul clasei **//TreeSet//** din problema 1). | ||
+ | |||
+ | ==== Problema 4 ==== | ||
+ | Program pentru afișarea numerelor liniilor dintr-un fișier text în care apare fiecare cuvânt distinct. Se va folosi un dicționar cu liste de valori asociate fiecărei chei. Dicționarul va fi de tip **//TreeMap//**, iar listele vor fi de tip **//LinkedList//**. | ||
+ | |||
+ | Pentru afisare se va folosi un Iterator pe multimea intrarilor din dictionar. La afișare, fiecare cuvânt va începe pe o linie nouă și va fi urmat, pe liniile următoare, de lista numerelor liniilor în care apare. Pentru fiecare cuvânt în parte se va afișa la sfârșit numărul de apariții al acestuia. | ||
+ | |||
+ | Se poate folosi ca fisier de intrare tot fisierul test01.in din arhiva! | ||
+ | |||
+ | <note tip> | ||
+ | Map - //**entrySet()**// | ||
+ | |||
+ | Set - //**iterator()**// | ||
+ | </note> | ||
+ | |||
==== Problema 5 ==== | ==== Problema 5 ==== | ||
Line 71: | Line 87: | ||
<note tip> | <note tip> | ||
- | ''toArray'' din ''Collection'' transformă colecția în ''Object[]''; | + | ''entrySet'' din ''Map'' transformă colecția în ''Set'' de intrari; |
- | ''Arrays.sort'' sortează un astfel de vector după un criteriu definit. | + | ''Collections.sort'' sortează o colectie după un criteriu definit. |
</note> | </note> | ||
- | |||
- | ==== Problema 6 ==== | ||
- | Program pentru afișarea numerelor liniilor dintr-un fișier text în care apare fiecare cuvânt distinct. Se va folosi un dicționar cu liste de valori asociate fiecărei chei. Dicționarul va fi de tip **//TreeMap//**, iar listele vor fi de tip **//LinkedList//**. | ||
- | |||
- | La afișare, fiecare cuvânt va începe pe o linie nouă și va fi urmat, pe liniile următoare, de lista numerelor liniilor în care apare. Pentru fiecare cuvânt în parte se va afișa la sfârșit numărul de apariții al acestuia. | ||
- | |||