This shows you the differences between two versions of the page.
poo:laboratoare:09 [2017/11/21 22:44] mihai.nan |
poo:laboratoare:09 [2023/12/09 11:43] (current) carmen.odubasteanu |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ===== Laboratorul 09. ===== | + | ===== Laboratorul 12. ===== |
=== Problema 1 === | === Problema 1 === | ||
Line 25: | Line 25: | ||
<note warning>Clasele **//Hero//** și **//BadLuck//** sunt clase abstracte!</note> | <note warning>Clasele **//Hero//** și **//BadLuck//** sunt clase abstracte!</note> | ||
+ | |||
+ | === Problema 2 === | ||
+ | Să se definească o clasă **__generica__** **//ArrayMap//**, pentru un dicționar realizat din doi vectori (un vector de chei și un vector de valori asociate, obiecte din clasa **//Vector//**), care să poată înlocui o clasă **//HashMap//** sau **//TreeMap//**. Astfel, această clasă va extinde clasa **//AbstractMap//**, suprascriind următoarele metode: | ||
+ | |||
+ | <code java> | ||
+ | public String toString(); | ||
+ | public V put(K, V); | ||
+ | public V get(Object ); | ||
+ | public Set<K> keySet(); | ||
+ | public Collection<V> values(); | ||
+ | public Set<Map.Entry<K, V>> entrySet(); // atentie! Se va defini o clasa interna pentru o intrare in dictionar - **//Map.Entry//** | ||
+ | </code> | ||
+ | Afișați dicționarul folosind System.out.println(dictionar) si apoi folosind un **//Iterator//** pentru a parcurge mulțimea intrarilor generată de metoda **//entrySet//**. | ||
+ | |||
+ | === Problema 3 === | ||
+ | Pornind de la clasa abstractă **//AMatrix//**, pusă la dispoziție în arhiva laboratorului, implementați clasa **//IntegerMatrix//** care moștenește această clasă abstractă și modelează un tablou bidimensional cu numere întregi. Clasa **//AMatrix//** moștenește clasa **//ArrayList//**. Astfel, matricea propriu-zisă este un obiect de tip **//ArrayList//** care conține elemente de tip **//ArrayList//**. Clasa va conține metode pentru următoarele operații: afișarea matricei, adunarea a două matrice, și metoda sum pentru a aduna două elemente!. | ||
+ | |||
+ | <code java> | ||
+ | //afisare | ||
+ | public String toString(); | ||
+ | //sum | ||
+ | public Integer sum(Integer obj1, Integer obj2) | ||
+ | //adunare | ||
+ | public AMatrix addition(AMatrix m); | ||
+ | </code> | ||
+ | |||
+ | <note important>Folosiți iteratori pentru parcurgerea colecțiilor sau bucle for each! </note> | ||
+ | |||
+ | === Problema 4 === | ||
+ | Definiți clasa **//GenericListMethods//** care să implementeze interfața, pusă la dispoziție în arhiva laboratorului, **//GenericInterface//**. Această interfață conține operații care prelucrează o listă, cu elemente de tip **//Comparable//**. Metoda **//removeDuplicates//** primește ca parametru un obiect de tip **//ArrayList//** și transformă lista într-on mulțime, eliminând duplicatele. | ||
+ | Metoda **//max//** are ca parametru tot un **//ArrayList//** și returnează elementul maximal din listă. | ||
+ | Ultima metodă conținută de interfață, **//binarySearch//**, este folosită pentru a determina poziția unei valori într-o listă ordonata, uzitând pentru aceasta algoritmul de căutare binară, detaliat în blocul de cod de mai jos. | ||
+ | |||
+ | <code c> | ||
+ | int BinarySearch(v, start, end, x) { | ||
+ | //conditia de oprire (x nu se afla in v) | ||
+ | if (start > end) | ||
+ | return -1; | ||
+ | //etapa divide | ||
+ | int mid = (start + end) / 2; | ||
+ | //etapa stapaneste | ||
+ | if (v[mid] == x) | ||
+ | return mid; | ||
+ | if (v[mid] > x) | ||
+ | return BinarySearch(v, start, mid-1, x); | ||
+ | if (v[mid] < x) | ||
+ | return BinarySearch(v, mid+1, end, x); | ||
+ | } | ||
+ | </code> | ||
+ | {{:poo:laboratoare:arhiva9.zip|Arhivă laborator}} |