Differences

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

Link to this comparison view

poo:laboratoare:03 [2018/10/09 18:33]
mihai.nan [Problema 7]
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 - Warshallpentru 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 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//​.
poo/laboratoare/03.1539099230.txt.gz · Last modified: 2018/10/09 18:33 by mihai.nan
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