Differences

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

Link to this comparison view

poo:laboratoare:05 [2018/08/30 13:21]
mihai.nan
poo:laboratoare:05 [2018/10/22 13:40] (current)
carmen.odubasteanu
Line 1: Line 1:
 ===== Laboratorul 05. ===== ===== Laboratorul 05. =====
 +
 +**Arhiva laborator 5: {{:​poo:​laboratoare:​arhiva5.zip|}} **
  
 === Problema 1 === === Problema 1 ===
Line 7: Line 9:
 Modificati clasele puse la dispozitie in fisierul //​**Problema**//,​ din arhiva laboratorului,​ astfel incat rezultatul rularii clasei //​**Problema1**//​ sa devina cel de mai jos. Puteti modifica **doar** tipul sau ordinea blocurilor de initializare! Modificati clasele puse la dispozitie in fisierul //​**Problema**//,​ din arhiva laboratorului,​ astfel incat rezultatul rularii clasei //​**Problema1**//​ sa devina cel de mai jos. Puteti modifica **doar** tipul sau ordinea blocurilor de initializare!
  
 +<​note>​
 <​code>​ <​code>​
 Bloc 2 - Animal Bloc 2 - Animal
Line 18: Line 21:
 Bloc 3 - SharPei 5 Bloc 3 - SharPei 5
 </​code>​ </​code>​
 +</​note>​
  
 === Problema 2 === === Problema 2 ===
  
 Pornind de la clasa //​**MyList**//,​ oferita in arhiva laboratorului,​ implementati clasa derivata //​**Graph**//​ care defineste un graf orientat, fara costuri asociate, reprezentat prin liste de adiacenta. Graful va avea nodurile numerotate incepand cu 1, iar clasa //​**Graph**//​ va avea un constructor care primeste un numar intreg ca argument, reprezentand numarul de noduri din graf. Clasa va contine si un vector vizitat ce va fi folosit la parcurgearea in adancime. Pornind de la clasa //​**MyList**//,​ oferita in arhiva laboratorului,​ implementati clasa derivata //​**Graph**//​ care defineste un graf orientat, fara costuri asociate, reprezentat prin liste de adiacenta. Graful va avea nodurile numerotate incepand cu 1, iar clasa //​**Graph**//​ va avea un constructor care primeste un numar intreg ca argument, reprezentand numarul de noduri din graf. Clasa va contine si un vector vizitat ce va fi folosit la parcurgearea in adancime.
-\par +  * **Metodele clasei:** 
-\textbf{Metodele clasei:+  - ''​void add(int x, int y)'' ​= adauga arcul (x, y) in graf; 
-\begin{itemize} +  - ''​void dfs(int start)'' ​= realizeaza parcurgerea in adancime a grafului, pornind din nodul **//start//** si afisand fiecare nod vizitat; 
-\setlength{\itemindent}{8ex} +  - ''​String toString()'' ​= afiseaza graful sub forma: 
-\item +<​code>​
-\textbf{\textit{void add(int x, int y)}} = adauga arcul (x, y) in graf; +
-\item +
-\textbf{\textit{void dfs(int start)}} = realizeaza parcurgerea in adancime a grafului, pornind din nodul \textbf{\textit{start}} si afisand fiecare nod vizitat; +
-\item +
-\textbf{\textit{String toString()}} = afiseaza graful sub forma: +
-\begin{verbatim}+
 nr nod: lista de noduri vecine (pe cate o linie) nr nod: lista de noduri vecine (pe cate o linie)
-\end{verbatim}+</​code>​ 
 + 
 +<note important>​ 
 +Pentru testare, se poate folosi clasa executabila //​**TestGraph**//,​ din arhiva laboratorului,​ in care se defineste graful din figura de mai jos, aplicandu-se o parcurgere in adancime pornind din nodul **1**. 
 +</​note>​ 
 +<note tip><​code java>​MyList list = (MyList) get(x);</​code></​note>​
  
-\end{itemize} +<note tip> 
-\par +Metoda ​//**dfs**// se poate implementa recursiv si, in acest mod, nu  mai este nevoie de
-Pentru testare, se poate folosi clasa executabila \textbf{\textit{TestGraph}},​ din arhiva laboratorului,​ in care se defineste graful din figura de mai jos, aplicandu-se o parcurgere in adancime pornind din nodul \textbf{1}. +
-\newline +
-\newline +
-\newmacroicon{0.75cm}{light} +
-\begin{SaveVerbatim}{mc} +
-MyList list = (MyList) super.get(x);​ +
-\end{SaveVerbatim} +
-\printmacroi +
-\vspace{0.5cm} +
-\newmacroicon{0.75cm}{warning} +
-\begin{SaveVerbatim}{mc} +
-Metoda dfs se poate implementa recursiv si, in acest mod, nu  mai este nevoie de+
 uzitarea explicita a unei structuri de date auxiliare. uzitarea explicita a unei structuri de date auxiliare.
-\end{SaveVerbatim} +</​note>​ 
-\printmacroi +
-\par+
 Pseodocod pentru dfs: Pseodocod pentru dfs:
-\begin{verbatim}+<​code>​
 dfs(i) { dfs(i) {
     ia lista l a nodurilor vecine nodului i     ia lista l a nodurilor vecine nodului i
Line 66: Line 56:
     }     }
 }    ​ }    ​
-\end{verbatim}+</​code>​
  
-\begin{center} +{{:​poo:​laboratoare:​graphviz.png|}} 
-\includegraphics[scale=0.5]{graphviz} + 
-\end{center+ 
-\vspace{0.5cm} +<​code>​
-\newmacroicon{0.75cm}{light} +
-\begin{SaveVerbatim}{mc}+
 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
-\end{SaveVerbatim} +</​code>​ 
-\printmacroi + 
-\vspace{0.5cm} +=== Problema 3 === 
-\chapter{\textbf{Problema 3}} +Sa se scrie un program care citeste un sir de numere intregi de la tastura, pana la intalnirea unui numar negativ, si determina elementul maxim din sir. In implementare,​ se va utiliza un obiect de tip //**Scanner**//, iar rezultatul o sa fie afisat folosind fluxul standard de iesire. Citirea se va face intr-o metoda ​//**myRead**// in care, pe langa citire, se introduce fiecare numar pozitiv intr-un obiect de tip //**Vector**// (data a clasei). 
-\indent + 
-\par + 
-Sa se scrie un program care citeste un sir de numere intregi de la tastura, pana la intalnirea unui numar negativ, si determina elementul maxim din sir. In implementare,​ se va utiliza un obiect de tip \textbf{\textit{Scanner}}, iar rezultatul o sa fie afisat folosind fluxul standard de iesire. Citirea se va face intr-o metoda ​\textbf{\textit{myRead}} in care, pe langa citire, se introduce fiecare numar pozitiv intr-un obiect de tip \textbf{\textit{Vector}} (data a clasei). +Pentru determinarea elementului maxim folositi metoda ​//**max**// din clasa //**Collections**//
-\par + 
-Pentru determinarea elementului maxim folositi metoda ​\textbf{\textit{max}} din clasa \textbf{\textit{Collections}}+Definiti o exceptie cu numele ​//**NumarNegativ**// care va afisa mesajul ​//''​"​Numarul introdus este negativ!"​''//​. Aceasta exceptie este aruncata in cadrul metodei de citire, atunci cand se citeste un numar negativ, si este tratata in metoda ​//**main**//, acolo unde este apelata metoda de citire. 
-\par + 
-Definiti o exceptie cu numele ​\textbf{\textit{NumarNegativ}} care va afisa mesajul ​\textbf{\textit{"​Numarul introdus este negativ!"​}}. Aceasta exceptie este aruncata in cadrul metodei de citire, atunci cand se citeste un numar negativ, si este tratata in metoda ​\textbf{\textit{main}}, acolo unde este apelata metoda de citire. +=== Problema 4 === 
-\newline +In arhiva laboratorului,​ gasiti clasa //**Warrior**// care modeleaza un personaj de tip razboinic si clasa //**WarriorPack**// care descrie un grup de razboinici si cat de multe daune pot produce ei. Codul acestor clase nu este unul orientat obiect si nu ofera posibilitatea de incapsulare a datelor. Rescrieti acest cod astfel incat sa utilizati mostenirea pentru a reprezenta diferitele tipuri de extraterestri,​ renuntand la membrul type, si sa oferiti posibilitatea de incapsulare a datelor. De asemenea, implementati o metoda ​//**getDamage**// in fiecare clasa derivata care sa returneze valoarea daunelor ce pot fi produse de tipul respectiv. 
-\newline + 
-\noindent +Adaugati metoda ​//**toString**// atat in clasa //**Warrior**// (tipul clasei, name, health) cat si in clasa //**WarriorPack**//
-\chapter{\textbf{Problema 4}} + 
-\par +La final, rescrieti metoda ​//**calculateDamage**//, utilizand metoda definita anterior, ​//**getDamage**//, si testati functionalitatea codului. Afisati si datele obiectului de tip //**WarriorPack**//. 
-In arhiva laboratorului,​ gasiti clasa \textbf{\textit{Warrior}} care modeleaza un personaj de tip razboinic si clasa \textbf{\textit{WarriorPack}} care descrie un grup de razboinici si cat de multe daune pot produce ei. Codul acestor clase nu este unul orientat obiect si nu ofera posibilitatea de incapsulare a datelor. Rescrieti acest cod astfel incat sa utilizati mostenirea pentru a reprezenta diferitele tipuri de extraterestri,​ renuntand la membrul type, si sa oferiti posibilitatea de incapsulare a datelor. De asemenea, implementati o metoda ​\textbf{\textit{getDamage}} in fiecare clasa derivata care sa returneze valoarea daunelor ce pot fi produse de tipul respectiv. + 
-\par +|Arhiva laborator}} 
-Adaugati metoda ​\textbf{\textit{toString}} atat in clasa \textbf{\textit{Warrior}} (tipul clasei, name, health) cat si in clasa \textbf{\textit{WarriorPack}}+
-\par +
-La final, rescrieti metoda ​\textbf{\textit{calculateDamage}}, utilizand metoda definita anterior, ​\textbf{\textit{getDamage}}, si testati functionalitatea codului. Afisati si datele obiectului de tip \textbf{\textit{WarriorPack}}.+
  
poo/laboratoare/05.1535624487.txt.gz · Last modified: 2018/08/30 13:21 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