This is an old revision of the document!


Laboratorul 05.

Problema 1

Corectati erorile, daca exista, din fisierul Problema1, existent in arhiva laboratorului si verificati care este rezultatul rularii clasei Problema1, incercand sa-l intuiti prima data si apoi sa intelegeti de ce este asa, daca nu este cel la care v-ati fi asteptat.

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!

Bloc 2 - Animal
Bloc 2 - Caine
Bloc 1 - SharPei
Bloc 2 - SharPei China
Bloc 1 - Animal
Bloc 1 - Caine negru
Bloc 4 - Caine
Bloc 3 - Caine
Bloc 3 - SharPei 5

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. \par \textbf{Metodele clasei:} \begin{itemize} \setlength{\itemindent}{8ex} \item \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) \end{verbatim}

\end{itemize} \par 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. \end{SaveVerbatim} \printmacroi \par Pseodocod pentru dfs: \begin{verbatim} dfs(i) {

  ia lista l a nodurilor vecine nodului i
  afiseaza nod i
  seteaza  vizitat[i] = 1;
  daca (list != null) {
      pentru fiecare nod j din lista vecinilor lui i
          daca j nu a fost vizitat
              dfs(j)
  }

} \end{verbatim}

\begin{center} \includegraphics[scale=0.5]{graphviz} \end{center} \vspace{0.5cm} \newmacroicon{0.75cm}{light} \begin{SaveVerbatim}{mc} 1 2 3 4 5 6 7 8 \end{SaveVerbatim} \printmacroi \vspace{0.5cm} \chapter{\textbf{Problema 3}} \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). \par Pentru determinarea elementului maxim folositi metoda \textbf{\textit{max}} din clasa \textbf{\textit{Collections}}! \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. \newline \newline \noindent \chapter{\textbf{Problema 4}} \par 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 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