Differences

This shows you the differences between two versions of the page.

Link to this comparison view

poo:laboratoare:04 [2017/10/30 20:59]
127.0.0.1 external edit
poo:laboratoare:04 [2019/10/15 13:18] (current)
mihai.nan
Line 1: Line 1:
 ===== Laboratorul 04. ===== ===== Laboratorul 04. =====
  
 +=== Problema 1 ===
 +Se ofera clasa de baza **//​Patrulater//​** care descrie o figura geometrica reprezentata printr-un patrulater convex. Pornind de la clasa oferita, implementati urmatoarea ierarhie de clase, alegand constructorii considerati potriviti pentru fiecare clasa:
 +
 +  * clasa **//​Paralelogram//​** care mosteneste **//​Patrulater//​**;​
 +  * clasele **//​Romb//​** si **//​Dreptunghi//​** care mostenesc clasa **//​Paralelogram//​**;​
 +  * clasa **//​Patrat//​** care mosteneste clasa **//​Dreptunghi//​**.
 +<note important>​
 +Implementati in fiecare clasa, exceptand clasa **//​Patrulater//​**,​ o metoda care calculeaza aria figurii geometrice, uzitand formula specifica. De asemenea, creati o clasa executabila pentru testarea claselor implementate.
 +</​note>​
 +<note warning>
 +Clasa Romb contine ca date, pe langa cele din clasa parinte, si dimensiunile diagonalelor.
 +</​note>​
 +
 +<​code>​
 +Arie paralelogram = lat1 * lat2 * sin(unghi1)
 +Arie romb = (diag1 * diag2) / 2
 +Arie dreptunghi = lungime * latime
 +Arie patrat = latura * latura
 +</​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 ===
 +Pornind de la clasa de baza **//​Array//​** oferita, implementati urmatoarele clase:
 +
 +  * clasa **//​SortedArray//​** care modeleaza un vector de numere intregi sortat crescator, folosind mostenirea;
 +  * clasa **//​MyStack//​** care modeleaza o stiva care contine numere intregi, folosind agregarea.
 +
 +
 +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.
 +
 +<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>
 +<code java>
 +Collections.sort
 +</​code>​
 +</​note>​
 +
 +
 +
 +=== 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**//​. ​
 +
 +Cheia si valoarea vor fi egale (cheile sunt elementele multimii). Pentru testare, folositi clasa //​**Test3**//​.
 +
 +<code java>
 +//Adauga un element in multime, daca nu exista deja
 +public boolean add(Object value);
 +//​returneaza un String cu elementele multimii (doar cheile, nu perechi)
 +public String toString();
 +//Sterge perechea corespunzatoare cheii, intorcand valoarea
 +public Object remove(Object key);
 +</​code>​
 +<note warning>
 +Se vor supradefini doar metodele care necesita acest lucru!
 +</​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 ===
 +Sa se implementeze ierarhia de clase descrisa in figura de mai jos.
 +
 +
 +
 +{{:​poo:​laboratoare:​fig1_1_.png|}}
 +
 +
 +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>
 +Atentie la modul in care va definiti constructorii claselor copil (//​**Student**//​ si //​**Teacher**//​)!
 +</​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>​
  
poo/laboratoare/04.1509389957.txt.gz · Last modified: 2018/08/21 13:29 (external edit)
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