This shows you the differences between two versions of the page.
|
poo:laboratoare:03 [2018/10/09 15:36] mihai.nan |
poo:laboratoare:03 [2025/10/23 12:32] (current) carmen.odubasteanu [Problemă extra] |
||
|---|---|---|---|
| Line 3: | Line 3: | ||
| ====Problema 1==== | ====Problema 1==== | ||
| Definiți o clasă **//Fractie//** care modelează lucrul cu fracțiile. Membrii acestei clase sunt: | Definiți o clasă **//Fractie//** care modelează lucrul cu fracțiile. Membrii acestei clase sunt: | ||
| - | * două atribuite de tip **//double//** pentru numărătorul fracției, respectiv numitorul ei; | + | * două atribuite de tip **//int//** pentru numărătorul fracției, respectiv numitorul ei; |
| - | * constructorul cu doi parametri de tip //**double**//, pentru setarea celor două parți ale fracției (numărător și numitor); | + | * constructorul cu doi parametri de tip //**int**//, pentru setarea celor două parți ale fracției (numărător și numitor); |
| * un constructor fără parametri care apelează constructorul anterior; | * un constructor fără parametri care apelează constructorul anterior; | ||
| * o metodă, cu un **singur** parametru, de calcul a sumei a două fracții; | * o metodă, cu un **singur** parametru, de calcul a sumei a două fracții; | ||
| Line 32: | Line 32: | ||
| Să se definească o clasă **//MyQueue//** care să descrie o structură de date de tip coadă. | Să se definească o clasă **//MyQueue//** care să descrie o structură de date de tip coadă. | ||
| Datele clasei (private): | Datele clasei (private): | ||
| - | * un obiect de tip **//MyArray//** (clasa inclusă în arhiva laboratorului); | + | * un obiect de tip **//MyArray//** (clasa data mai jos); |
| * o constantă (//**Infinit**//) având valoarea $9500$; | * o constantă (//**Infinit**//) având valoarea $9500$; | ||
| * indicele primului element din coadă; | * indicele primului element din coadă; | ||
| Line 126: | Line 126: | ||
| ====Problema 5==== | ====Problema 5==== | ||
| - | Să se implementeze ierarhia de clase descrisă prin următoarea diagramă: | ||
| - | |||
| - | {{:poo:laboratoare:clase1.png|}} | ||
| - | |||
| - | Clasa **//Schedule//** conține o metodă care calculează durata călătoriei în minute. Știind algoritmul de calcul al prețului unui bilet de călătorie, să se implementeze o metodă, în clasa **//Train//**, care calculează prețul unui bilet. Valoarea unui bilet este egală cu **//X * durata_călătoriei//**, unde $X$ este egal cu $1$ pentru cursele interne și $2$ pentru cursele internaționale. Clasa **//Route//** va conține un constructor cu $2$ parametri și o metodă care primește ca parametru un obiect de tip **//Route//** și verifică dacă sunt de tip tur - retur cele două rute, rezultatul fiind de tip **//boolean//**. Clasa **//ClockTime//** conține o metodă, cu un parametru de tip **//ClockTime//**, și compară două momente de timp, rezultatul fiind un //**int**//. | ||
| - | |||
| - | Adaugați o metodă //**main**// pentru testarea claselor implementate, utilizând exemplele oferite. Definiți un constructor potrivit pentru instanțierea unui obiect de tip //**Train**//, în care să apelați constructorii definiți în clasele //**Route**//, //**Schedule**// și //**ClockTime**//. | ||
| - | |||
| - | <code> | ||
| - | [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) | ||
| - | </code> | ||
| - | |||
| - | ====Problema 6==== | ||
| Implementați clasa **//Punct//** care definește un punct din spațiul 2D. | Implementați clasa **//Punct//** care definește un punct din spațiul 2D. | ||
| Line 156: | Line 140: | ||
| * ''int getY()'' = întoarce ordonata punctului; | * ''int getY()'' = întoarce ordonata punctului; | ||
| * ''void setY(int y)'' = setează ordonata punctului; | * ''void setY(int y)'' = setează ordonata punctului; | ||
| - | * ''String toString()'' = returnează un String de forma \textit{(x, y)}; | + | * ''String toString()'' = returnează un String de forma ''(x, y)''; |
| * ''double distance(int, int)'' = calculează distanța dintre 2 puncte; | * ''double distance(int, int)'' = calculează distanța dintre 2 puncte; | ||
| * ''double distance(Punct p1)'' = calculează distanța dintre 2 puncte. | * ''double distance(Punct p1)'' = calculează distanța dintre 2 puncte. | ||
| Line 165: | Line 149: | ||
| Puteți accesa datele clasei //**Punct**// în metoda //**main**// din clasa //**Test**//? | Puteți accesa datele clasei //**Punct**// în metoda //**main**// din clasa //**Test**//? | ||
| - | ====Problema 7==== | + | ====Problema 6==== |
| Să se definească o clasă **//Graph//** care să descrie un graf ponderat orientat care are nodurile numerotate de la $1$. | Să se definească o clasă **//Graph//** care să descrie un graf ponderat orientat care are nodurile numerotate de la $1$. | ||
| Line 182: | Line 165: | ||
| * ''boolean isArc(int v, int w)'' = verifică dacă există arc între $v$ și $w$ în graf; | * ''boolean isArc(int v, int w)'' = verifică dacă există arc între $v$ și $w$ în graf; | ||
| * ''toString()'' = afișarea grafului (se va alege o variantă intuitivă de afișare a grafului); | * ''toString()'' = afișarea grafului (se va alege o variantă intuitivă de afișare a grafului); | ||
| - | * ''int[][] floydWarshall()'' = implementarea algoritmului \textit{Floyd - Warshall} pentru determinarea drumurilor de cost minim în graf; | + | * ''int[][] floydWarshall()'' = implementarea algoritmului Floyd - Warshall pentru determinarea drumurilor de cost minim în graf; |
| * ''void main(String[])'' = metoda main pentru testarea functionalității clasei implementate. | * ''void main(String[])'' = metoda main pentru testarea functionalității clasei implementate. | ||
| Line 191: | Line 174: | ||
| <code java> | <code java> | ||
| class Graph { | class Graph { | ||
| - | .... | + | //.... |
| public int[][] floydWarshall() { | public int[][] floydWarshall() { | ||
| Line 235: | Line 218: | ||
| } | } | ||
| </code> | </code> | ||
| + | |||
| + | ====Problema 7==== | ||
| + | |||
| + | Să se implementeze ierarhia de clase descrisă prin următoarea diagramă: | ||
| + | |||
| + | {{:poo:laboratoare:clase1.png|}} | ||
| + | |||
| + | Clasa **//Schedule//** conține o metodă care calculează durata călătoriei în minute. Știind algoritmul de calcul al prețului unui bilet de călătorie, să se implementeze o metodă, în clasa **//Train//**, care calculează prețul unui bilet. Valoarea unui bilet este egală cu **//X * durata_călătoriei//**, unde $X$ este egal cu $1$ pentru cursele interne și $2$ pentru cursele internaționale. Clasa **//Route//** va conține un constructor cu $2$ parametri și o metodă care primește ca parametru un obiect de tip **//Route//** și verifică dacă sunt de tip tur - retur cele două rute, rezultatul fiind de tip **//boolean//**. Clasa **//ClockTime//** conține o metodă, cu un parametru de tip **//ClockTime//**, și compară două momente de timp, rezultatul fiind un //**int**//. | ||
| + | |||
| + | Adaugați o metodă //**main**// pentru testarea claselor implementate, utilizând exemplele oferite. Definiți un constructor potrivit pentru instanțierea unui obiect de tip //**Train**//, în care să apelați constructorii definiți în clasele //**Route**//, //**Schedule**// și //**ClockTime**//. | ||
| + | |||
| + | <code> | ||
| + | [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) | ||
| + | </code> | ||
| + | |||
| + | ==== Problemă extra ==== | ||
| + | |||
| + | 1. Definește un **enum** numit //TipProdus// cu următoarele valori: //ALIMENTAR//, //ELECTRONIC//, //VESTIMENTAR//, //ALTUL//. | ||
| + | |||
| + | 2. Creează un **record** numit Produs cu câmpurile: | ||
| + | * String nume | ||
| + | * double pret | ||
| + | * TipProdus tip | ||
| + | 3. Într-o clasă **Main**, creează 3 produse diferite și afișează-le. | ||
| + | |||
| + | 4. Adaugă o metodă **descriere()** în Produs care returnează un text prietenos, de forma: //Produs: Nume=Tricou, Tip=VESTIMENTAR, Pret=99.99 RON// | ||
| + | |||
| + | 5. În main, adaugă produsele într-o listă/vector, parcurge-le și afișează doar produsele de tip //ALIMENTAR//. | ||