This shows you the differences between two versions of the page.
poo:laboratoare:04 [2018/08/21 13:29] mihai.nan |
poo:laboratoare:04 [2019/10/15 13:18] (current) mihai.nan |
||
---|---|---|---|
Line 21: | Line 21: | ||
</code> | </code> | ||
+ | <code Java> | ||
+ | class Patrulater { | ||
+ | public int latura1, latura2, latura3, latura4; | ||
+ | public double unghi1, unghi2, unghi3, unghi4; | ||
+ | |||
+ | public Patrulater() { | ||
+ | this(0, 0, 0, 0); | ||
+ | } | ||
+ | |||
+ | public Patrulater(int latura1, int latura2, int latura3, int latura4) { | ||
+ | this.latura1 = latura1; | ||
+ | this.latura2 = latura2; | ||
+ | this.latura3 = latura3; | ||
+ | this.latura4 = latura4; | ||
+ | } | ||
+ | |||
+ | public Patrulater(double unghi1, double unghi2, double unghi3, double unghi4) { | ||
+ | this(0, 0, 0, 0, unghi1, unghi2, unghi3, unghi4); | ||
+ | } | ||
+ | |||
+ | public Patrulater(int latura1, int latura2, int latura3, int latura4, | ||
+ | double unghi1, double unghi2, double unghi3, double unghi4) { | ||
+ | this(latura1, latura2, latura3, latura4); | ||
+ | this.unghi1 = unghi1; | ||
+ | this.unghi2 = unghi2; | ||
+ | this.unghi3 = unghi3; | ||
+ | this.unghi4 = unghi4; | ||
+ | } | ||
+ | |||
+ | public int perimetru() { | ||
+ | int result; | ||
+ | result = latura1 + latura2 + latura3 + latura4; | ||
+ | return result; | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
=== Problema 2 === | === Problema 2 === | ||
Line 31: | Line 67: | ||
Ambele clase vor utiliza metodele puse la dispozitie in clasa **//Array//**, in forma originala sau intr-o forma modificata, iar clasa **//MyStack//** trebuie sa ofere metodele **//push//** si **//pop//**, specifice acestei structuri de date. Metoda **//push//** va oferi posibilitatea introducerii unui numar intreg in varful stivei, in timp ce metoda **//pop//** va inlatura elementul din varful stivei si il va intoarce. | Ambele clase vor utiliza metodele puse la dispozitie in clasa **//Array//**, in forma originala sau intr-o forma modificata, iar clasa **//MyStack//** trebuie sa ofere metodele **//push//** si **//pop//**, specifice acestei structuri de date. Metoda **//push//** va oferi posibilitatea introducerii unui numar intreg in varful stivei, in timp ce metoda **//pop//** va inlatura elementul din varful stivei si il va intoarce. | ||
- | Creati o clasa ce contine un main pentru testarea claselor implementate. | + | <code java> |
+ | public class Array { | ||
+ | //Vectorul in care se vor retine elementele | ||
+ | private Vector vector; | ||
+ | //Constructor clasei | ||
+ | public Array() { | ||
+ | //Instantierea vectorului cu elemente | ||
+ | vector = new Vector(); | ||
+ | } | ||
+ | |||
+ | //Metoda care adauga un element in vector, folosind pozitia curenta | ||
+ | public void addElement(Integer x) { | ||
+ | vector.add(x); | ||
+ | } | ||
+ | |||
+ | //Metoda care adauga un element in vector, tinand cont de pozitia indicata | ||
+ | public void addElement(Integer x, int poz) { | ||
+ | if(poz >= 0 && poz <= vector.size()) { | ||
+ | vector.add(poz, x); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | //Metoda care returneaza elementul aflat in vector la pozitia indicata | ||
+ | public int get(int poz) { | ||
+ | int result; | ||
+ | if(poz >= 0 && poz < vector.size()) { | ||
+ | result = (int) vector.get(poz); | ||
+ | return result; | ||
+ | } else { | ||
+ | return Integer.MIN_VALUE; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | //Metoda ce intoarce numarul de elemente din vector | ||
+ | public int getSize() { | ||
+ | return vector.size(); | ||
+ | } | ||
+ | |||
+ | //Metoda pentru stergerea unui element din vector | ||
+ | public boolean remove(Integer x) { | ||
+ | return vector.remove(x); | ||
+ | } | ||
+ | |||
+ | //Metoda pentru stergerea elementului de pe pozitia pos din vector | ||
+ | public Integer remove(int pos) { | ||
+ | return (Integer) vector.remove(pos); | ||
+ | } | ||
+ | |||
+ | //Metoda uzitata pentru afisarea unui obiect de tip Array | ||
+ | public String toString() { | ||
+ | String result = "{"; | ||
+ | for(int i = 0; i < vector.size(); i++) { | ||
+ | result += get(i) + ", "; | ||
+ | } | ||
+ | result += "}"; | ||
+ | return result; | ||
+ | } | ||
+ | |||
+ | public void sort() { | ||
+ | Collections.sort(vector); | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | Creati o clasa ce contine un main pentru testarea claselor implementate. | ||
<note tip> | <note tip> | ||
Line 39: | Line 139: | ||
</code> | </code> | ||
</note> | </note> | ||
+ | |||
+ | |||
=== Problema 3 === | === Problema 3 === | ||
Sa se implementeze o clasa **//HSet//** care modeleaza o multime realizata ca tabel de dispersie. Clasa este derivata din [[http://docs.oracle.com/javase/7/docs/api/java/util/Hashtable.html|Hashtable]] si contine metodele: //**add**//, //**remove**//, //**toString**//. | Sa se implementeze o clasa **//HSet//** care modeleaza o multime realizata ca tabel de dispersie. Clasa este derivata din [[http://docs.oracle.com/javase/7/docs/api/java/util/Hashtable.html|Hashtable]] si contine metodele: //**add**//, //**remove**//, //**toString**//. | ||
- | Cheia si valoarea vor fi egale (cheile sunt elementele multimii). Pentru testare, folositi clasa //**Test3**// din arhiva laboratorului. | + | Cheia si valoarea vor fi egale (cheile sunt elementele multimii). Pentru testare, folositi clasa //**Test3**//. |
<code java> | <code java> | ||
Line 56: | Line 158: | ||
Se vor supradefini doar metodele care necesita acest lucru! | Se vor supradefini doar metodele care necesita acest lucru! | ||
</note> | </note> | ||
+ | |||
+ | <code java> | ||
+ | class Test3 { | ||
+ | public static void main(String args[]) { | ||
+ | HSet set = new HSet(); | ||
+ | set.add("Laborator"); | ||
+ | set.add("Agregare"); | ||
+ | set.add("Mostenire"); | ||
+ | System.out.println(set); | ||
+ | System.out.println(set.size()); | ||
+ | set.add("Laborator"); | ||
+ | if(set.size() == 4) { | ||
+ | System.out.println("Multimea nu trebuie sa contina duplicate!"); | ||
+ | } | ||
+ | System.out.println(set.remove("POO")); | ||
+ | System.out.println(set.remove("Laborator")); | ||
+ | if(set.size() != 2) { | ||
+ | System.out.println("Stergerea nu functioneaza!"); | ||
+ | } | ||
+ | set.add("Supradefinire"); | ||
+ | set.add("Supraincarcare"); | ||
+ | System.out.println(set); | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | |||
=== Problema 4 === | === Problema 4 === | ||
Line 65: | Line 193: | ||
- | Pentru testare, se poate folosi clasa //**Test04**// din arhiva laboratorului. Metoda //**addCourse**// din clasa //**Teacher**// verifica daca a fost deja asignat cursul respectiv profesorului si intoarce //**true**// doar daca acesta nu exista si a fost adaugat. De asemenea, metoda //**removeCourse**// intoarce //**true**// doar daca profesorul avea asignat cursul respectiv si s-a putut realiza stergerea. | + | Pentru testare, se poate folosi clasa //**Test04**//. |
+ | Metoda //**addCourse**// din clasa //**Teacher**// verifica daca a fost deja asignat cursul respectiv profesorului si intoarce //**true**// doar daca acesta nu exista si a fost adaugat. De asemenea, metoda //**removeCourse**// intoarce //**true**// doar daca profesorul avea asignat cursul respectiv si s-a putut realiza stergerea. | ||
<note warning> | <note warning> | ||
Line 72: | Line 201: | ||
<note tip><code java>super</code></note> | <note tip><code java>super</code></note> | ||
+ | |||
+ | <code java> | ||
+ | class Test4 { | ||
+ | public static void main(String args[]) { | ||
+ | Person student, teacher, person; | ||
+ | student = new Student("Popescu Ion", "Bucuresti"); | ||
+ | teacher = new Teacher("Ionescu Gigel", "Bucuresti"); | ||
+ | person = new Person("Maria", "Iasi"); | ||
+ | assert (person.getName().equals("Maria")) : "Metoda getName din clasa Person nu este implementata corect"; | ||
+ | assert (((Teacher) teacher).addCourse("Programare")) : "Metoda addCourse din clasa Teacher nu este " + | ||
+ | "implementata corect"; | ||
+ | assert (((Teacher) teacher).addCourse("Algoritmica")) : "Metoda addCourse din clasa Teacher nu este " + | ||
+ | "implementata corect"; | ||
+ | assert (((Teacher) teacher).addCourse("Matematica")) : "Metoda addCourse din clasa Teacher nu este " + | ||
+ | "implementata corect"; | ||
+ | assert (!((Teacher) teacher).addCourse("Programare")) : "Metoda addCourse din clasa Teacher nu este " + | ||
+ | "implementata corect"; | ||
+ | assert (((Teacher) teacher).removeCourse("Programare")) : "Metoda addCourse din clasa Teacher nu este " + | ||
+ | "implementata corect"; | ||
+ | assert (!((Teacher) teacher).addCourse("Programare")) : "Metoda addCourse din clasa Teacher nu este " + | ||
+ | "implementata corect"; | ||
+ | ((Student) student).addCourseGrade("Programare", 10); | ||
+ | ((Student) student).addCourseGrade("Algoritmica", 9); | ||
+ | ((Student) student).addCourseGrade("Matematica", 8); | ||
+ | assert (Math.abs(((Student) student).getAverageGrade() - 9.00) <= 0.001) : "Metoda getAverageGrade din clasa " + | ||
+ | "Student nu a fost implementat corect"; | ||
+ | ((Student) student).printGrades(); | ||
+ | //Ce metoda toString se va apela? Din ce clasa? | ||
+ | System.out.println(student); | ||
+ | System.out.println(person); | ||
+ | System.out.println("Felicitari! Problema a fost rezolvata corect!"); | ||
+ | } | ||
+ | } | ||
+ | </code> | ||