This is an old revision of the document!
Definiti o clasa Fractie care modeleaza lucrul cu fractiile. Membrii acestei clase sunt:
Un produs este caracterizat prin nume (String), pret (double) si cantitate (int). Un magazin are un nume (String) si contine 3 produse. Creati clasele Produs si Magazin corespunzatoare specificatiilor de mai sus. In fiecare clasa, implementati constructorul potrivit, astfel incat caracteristicile instantelor sa fie setate la crearea acestora. \par Clasa Produs contine o metoda toString, care va returna un String sub forma “Produs nume_produs pret_produs cantitate” si o metoda getTotalProdus care va returna un double, produsul dintre cantitate si pret. Clasa Magazin contine o metoda toString care afiseaza toate componentele magazinului (va apela metoda toString pentru fiecare produs) si o metoda getTotalMagazin care va calcula suma totalurilor produselor si o va returna. Creati, intr-o metoda main, un obiect de tip Magazin, uzitand obiecte anonime in cadrul instantierii.
Sa se defineasca o clasa MyQueue care sa descrie o structura de date de tip coada. Datele clasei (private):
Constructorul clasei:
Metodele clasei:
Pentru verificare, se va folosi clasa TestBonus din arhiva laboratorului.
Definiti o clasa Numar care are ca membru un numar intreg si contine metodele descrise mai jos. Implementati metodele astfel incat fiecare metoda sa efectueze o singura adunare. Instantiati un obiect de tip Numar in metoda main si apelati metodele implementate. Ce principiu POO este evidentiat in acest exercitiu?
//returneaza suma dintre nr (membrul clasei) si a public int suma(int a); //returneaza suma dintre nr, a si b public int suma(int a, int b); //returneaza suma dintre nr, a, b si c public int suma(int a, int b, int c); //returneaza suma dintre nr, a, b, c si d public int suma(int a, int b, int c, int d);
Sa se implementeze ierarhia de clase descrisa prin urmatoarea diagrama:
Clasa Schedule contine o metoda care calculeaza durata calatoriei in minute. Stiind algoritmul de calcul al pretului unui bilet de calatorie, sa se implementeze o metoda, in clasa Train, care calculeaza pretul unui bilet. Valoarea unui bilet este egala cu X * durata_calatoriei, unde $X$ este egal cu $1$ pentru cursele interne si $2$ pentru cursele internationale. Clasa Route va contine un constructor cu 2 parametri si o metoda care primeste ca parametru un obiect de tip Route si verifica daca sunt de tip tur - retur cele doua rute, rezultatul fiind de tip boolean. Clasa ClockTime contine o metoda, cu un parametru de tip ClockTime, si compara doua momente de timp, rezultatul fiind un int.
Adaugati o metoda main pentru testarea claselor implementate, utilizand exemplele oferite. Definiti un constructor potrivit pentru instantierea unui obiect de tip Train, in care sa apelati constructorii definiti in clasele Route, Schedule si ClockTime.
[local] [origin (departure)] -> [destination (arrival)] true Bucuresti Nord (9:35) -> Constanta (12:02) true Bucuresti Nord (5:45) -> Iasi (12:49) false Bucuresti Nord (23:45) -> Sofia (17:00)
Implementati clasa Punct care defineste un punct din spatiul 2D.
Datele clasei (private):
Conctructorul clasei:
O(0, 0)
.Metodele clasei:
int getX()
= intoarce abscisa punctului;void setX(int x)
= seteaza abscisa punctului;int getY()
= intoarce ordonata punctului;void setY(int y)
= seteaza ordonata punctului;String toString()
= returneaza un String de forma \textit{(x, y)};double distance(int, int)
= calculeaza distanta dintre 2 puncte;double distance(Punct p1)
= calculeaza distanta dintre 2 puncte.
Creati o clasa Test, in acelasi pachet cu clasa Punct, care contine o metoda main care calculeaza distanta dintre punctele A(1, 2)
si B(-1, 3)
.
Puteti accesa datele clasei Punct in metoda main din clasa Test?
Sa se defineasca o clasa Graph care sa descrie un graf ponderat orientat care are nodurile numerotate de la 0.
Datele clasei (private):
Constructorul clasei:
Metodele clasei:
int getSize()
= are ca rezultat numarul de noduri din graf;void addArc(int v, int w, int cost)
= adauga un arc la graf (intre v si w, avand costul cost);boolean isArc(int v, int w)
= verifica daca exista arc intre v si w in graf;toString()
= afisarea grafului (se va alege o varianta intuitiva de afisare a grafului);int[][] floydWarshall()
= implementarea algoritmului \textit{Floyd - Warshall} pentru determinarea drumurilor de cost minim in graf;void main(String[])
= metoda main pentru testarea functionalitatii clasei implementate.Pentru verificare, se va crea graful din figura de mai jos. Se va afisa graful, uzitand metoda toString implementata, si se va determina distanta minima dintre doua noduri folosind algoritmul Floyd - Warshall.
public int[][] floydWarshall() { int result[][]; result = new int[this.nrVarfuri][this.nrVarfuri]; int k, i, j; for(i = 1; i <= this.nrVarfuri; i++) { for(j = 1; j <= this.nrVarfuri; j++) { if(i == j) { result[i][j] = 0; } else if(this.isArc(i, j)) { result[i][j] = this.matrice[i][j]; } else { result[i][j] = Infinit; } } } for(k = 1; k <= this.nrVarfuri; k++) { for(i = 1; i <= this.nrVarfuri; i++) { for(j = 1; j <= this.nrVarfuri; j++) { int dist; dist = result[i][k] + result[k][j]; if(result[i][j] > dist) { result[i][j] = dist; } } } } return result; }