Sunteți pe pagina 1din 14

Problema 1 [3 studenti] Realizati un container eterogen de figuri. Containerul va gestiona in acelasi timp cercuri, triunghuri, patrate.

Fara a modifica in nici un fel codul sau, acesta va putea gestiona si alte tipuri de figuri ce pot fi adaugate ulterior. Programul va permite serializare/deserializare intrun/dintr-un fisier a figurilor gestionate. Sistemul de deserializare va trebui conceput in asa fel incat codul sa nu necesite nici o modificare atunci cand se adauga un nou tip de figura. Implementati sistemul in limbajele: C++, Java, C#. Discutati despre avantajele si dezavantajele fiecarui limbaj in contextul acestei probleme. Aveti in vedere: licentele necesare implementarii programului (pentru dezvoltatori, pentru potentialii utilizatori), portabilitatea intre platforme (Linux/Windows), portabilitatea intre uneltele de dezvoltare majore existente (diferente la nivelul codului sursa, diferente la nivelul modului de definire a proiectului si a compilarii). Problema 2 [4 studenti] Realizati o biblioteca pentru lucrul cu intregi mari, reprezentati pe 32, 64, 128, posibil mai multi, biti. Pentru aceasta, implementati o clasa Int care sa poate fi folosita in diversi algoritmi intersanjabil cu tipul nativ int. Operatiile care trebuie suportate sunt: and, or, not, xor, left shift, right shift, addition. Aveti in vedere eficienta operatiilor. Proiectati sistemul astfel incat utilizatorul sa poata selecta pe cate cuvinte de memorie sunt reprezentati intregii. Este posibila o proiectare eleganta care sa permita lucrul in acelasi program (posibil multithreading) cu intregi de dimensiuni diferite? Alegeti limbajul de programare cel mai potrivit pentru indeplinirea cerintelor. Justificati alegerea facuta (mentionati inclusiv dezavantajele limbajelor respinse). Problema 3 [1 student] Realizati un program mod consola care rezolva ecuatia de gradul 2. Parametrii ecuatiei sunt cititi din linia de comanda. Rezultatul poate fi scris fie in fluxul standard de iesire, fie intr-un fisier, in functie de optiunea utilizatorului, exprimata la linia de comanda. Programul va avea o optiune "verbose" care va explica pas cu pas algoritmul de calculare a solutiilor. Tot in functie de o optiune specificata la linia de comanda programul va calcula sau nu solutiile complexe.

Exemplu de utilizare: solver2 -a 10 -b 5 -c 0 --verbose --complex Parametrii pot fi dati in orice ordine. Exista vreo biblioteca in limbajul pe care l-ati ales care ofera servicii convenabile de parsare a parametrilor? Daca nu, motivati de ce si propuneti o astfel de biblioteca.

Laboratorul 3

Problema 1: Scenarii [2 studenti] Rezolvati una dintre problemele de mai jos: A. O noua companie care fabrica telefoane celulare va angajeaza pentru a scrie programul care controleaza functionalitatea telefonului. Programul trebuie sa ofere cel putin urmatoarele functii:

apelarea unui numar (format de utilizator, din agenda), preluarea unui apel scrierea/citirea unui mesaj introducerea unui numar in agenda, stergerea unui numar din agenda vizualizarea apelurilor ratate

Dezvoltati scenarii de utilizare care sa descrie modul de interactiune al unui utilizator cu telefonul. B. Dezvoltati scenarii de utilizare care sa descrie interactiunea cu un utilizator al unui automat de bauturi. Exemplu de facilitati:

oferire ceai oferire cafea selectare nivel de zahar selectare lapte (doar pentru cafa) gestionare suma utilizator, oferire rest anularea comenzii

De predat: fisier text sau html(obtinut din xml/xslt) Problema 2: WSS [6 studenti] Web Services Security este un standard nou pentru specificarea securitatii serviciilor Web. La adresa http://www.ws-i.org/ puteti afla despre cum se defineste securitatea de baza (folosind, de ex. nume

de cont si parola). Implementati un exemplu de serviciu web care sa foloseasca WS-I Basic Security Profile. Scoateti in evidenta cum utilizatori diferiti au drepturi diferite. De predat: seviciu web in Java (platforma Sun, Apache Axis?), client in Java si C#. Un scurt document va indica modul de instalare si de rulare. Problema 3: CD-Cat [6 studenti] Realizati un sistem de catalogare a CD-urilor. Programul va avea o optiune de importare a unui CD nou, ce va avea ca efect scanarea CD-ului si adaugarea fisierelor si directoarelor la o baza de date. Pentru cautare, programul va oferi un modul care sa creeze un sistem de fisiere virtual. De exemplu, daca am adaugat la baza de date un CD cu numele CD1, continutul acestuia va putea fi accesat prin "ls /usr/local/cd-catalog/CD1" (pe linux) sau "dir q:\CD1" (unde q este numele unui sistem de fisiere cu numele cd-catalog, pe windows). Din motive de eficienta, CD-urile nu vor fi copiate efectiv pe hard-disk, si nici nu se va crea o structura de directoare ce contine fisiere vide. Dimensiunea fisierelor virtuale va corespunde cu dimensiunea fisierelor reale. Daca utilizatorul va deschide fisierele, continutul lor va contine la inceput textul: "Acesta este un fisier virtual. Varianta originala sa gaseste pe CD-ul ... in directorul ..." Daca un CD a mai fost introdus in baza de date, programul va detecta acest lucru si nu il va mai introduce inca o data. Programul isi va crea propria baza de date, putand rula in spatiul de drepturi al unui utilizator normal. Daca se va folosi un sistem de baze de date, acesta va fi open-source. Problema 4: NetSwitch [6 studenti] Realizati un program pentru schimbarea setarilor de retea, util atunci cand un calculator este mutat dintr-o retea in alta. Programul va memora setarile specifice (IP, net mask, gateway etc. ori DHCP). Utilizatorul va putea selecta dintr-un meniu ce setari de retea doreste sa aplice la un moment dat. Aplicatia se va integra in tray; meniul cu setari va putea fi accesat direct din tray, folosind click dreapta. Meniul va contine o comanda de creare a unei noi setari de retea, precum si una de administrare a setarilor (redenumire, stergere).

Daca programul nu are suficiente drepturi pentru a realiza o anumita operatie, va solicita utilizatorului sa se autentifice intr-un cont care are drepturile necesare, continuand apoi operatia. Programul va renunta apoi la drepturile suplimentare (eventual dupa o perioada configurabila de timp. Programul va functiona in Linux, pentru Gnome. Publicarea unui rpm pe siturile de specialitate: bonus 100%. Acceptarea programului intr-o distributie majora: bonus 100%. Problema 5:site.ro [6 studenti] Realizati sit web pentru apararea drepturilor persoanelor fata de fumatul pasiv. Continutul sitului va trece in revista, in registru informal, legile romanesti in domeniu si va propune o campanie pentru respectarea acestora. O sectiune va prezenta reactii fata de legi internationale ce merg mai departe decat reglementarile romane (de ex. Irlanda). O sugestie ar fi prezentarea problemei din perspectiva personalului care lucreaza intr-un local in care se fumeaza. Scopul nu este de a convinge fumatorii sa renunte la fumat, ci sa atraga atentia asupra faptului ca fumatul in spatii publice este o agresiune gratuita la adresa celorlalti. Realizati si un poster care sa surprinda aceasta idee. Echipele selectate dupa interviu vor intra intr-un concurs. Castigatorii concursului vor avea posibilitatea sa militeze pentru instalarea sitului pe pagina facultatii si pentru permisiunea de a afisa posterele create. In cazul unei campanii de succes, bonus-ul este de 150%. La interviu pot participa doar echipele cu experienta in design si design web. Este necesar sa se prezinte design-uri anterioare si o scrisoare de motivatie (1/2 pagina).

Laboratorul 4 Problema 3: SVG plot [6 studenti] Realizati un program care realizeaza grafice (de functii) in format SVG. Programul va citi datele in dintr-un fisier CSV (Comma Separated Values). Capul de tabel va contine un prim camp id si apoi o lista de titluri pentru celelalte coloane. Campurile id contin date ce pot fi privite ca siruri de caractere; celelalte coloane contin date numerice (nu neaparat intregi). Programul va primi ca parametru

fisierul din care sa citeasca datele, numele coloanei ale carei date se doresc desenate precum si doua id-uri (cel de inceput si cel de sfarsit) intre care se doreste sa se deseneze datele din coloana aleasa. Un exemplu de astfel de fisier CSV se gaseste mai jos: DATE, HEIGHT, WEIGHT 10.10.2005, 4, 5.5 11.10.2005, 4.1, 5.8 12.10.2005, 4.2, 5 Programul va fi conceput modular, astfel incat sa permita citirea datelor si dintr-un tabel cu aceasta structura dintr-o baza de date. Implementati si o versiune a programului care sa aiba ca sursa de date o baza de date. In acest context, este esential sa nu existe cod duplicat: codul care realizeaza o functionalitate anume (de ex. crearea fisierului SVG) este acelasi indiferent de unde sunt citite datele. Programul va fi scris folosind o tehnologie ce se preteaza la utilizarea pentru aplicatii Web, pe sisteme tip UNIX/Linux. In particular, implementati o fatada a programului (fatada care poate fi scrisa de exemplu in PHP) pe care sa o instalati pe fenrir si cu ajutorul careia un utilizator va putea comanda afisarea de grafice cu diverse setari. De remarcat: nucleul aplicatiei NU trebuie sa fie o aplicatie web, putand functiona si singur, din linia de comanda, de exemplu: svggraph JonnyTheMouse.csv -column HEIGHT -begin 10.09.2000 -end=10.10.2001 Aceasta nu inseamna ca pentru implementarea acestei aplicatiei de sine statatoare nu puteti folosi, de exemplu, Python sau PHP, care sunt limbaje folosite si la generarea de pagini Web. Limbajele "de script", rapide, sunt preferate, desigur in conditiile unei proiectari orientate obiect. Fatada web a aplicatiei ar putea fi apelata, de exemplu, de la o adresa de tipul: http://fenrir.infoiasi.ro/~jonny/svggraph?who=JonnyTheMouse [etc] Aplicatia web va functiona fie returnand un SVG (ce va fi afisat de browser cu un plug-in specific) fie returnand un PNG (ce va fi creat

din versiunea SVG a graficului folosind o metoda corespunzatoare, de exemplu prin procesarea cu Apache batik). Interviul consta intr-o discutie cu privire la XML, SVG, tehnologii web. Prezentati un SVG creat de dvs. si fisierul PNG rezultat din acesta. Problema 4: Quick SVG plot [2 studenti] In conditiile generale ale problemei de mai sus, realizati fisier XSLT parametrizat care sa transforme un XML de date intr-un fisier SVG ce contine graficul datelor. Un exemplu ce sugereaza formatul fisierul XML de date este: [data description="JonnyTheMouse"] [item date="10.10.2000" height="3.3" weight="5" /] [item date="11.10.2000" height="5.3" weight="7" /] [/data] Interviul consta intr-o discutie cu privire la XML/XSLT, SVG. Prezentati o pereche XML/XSLT pe care ati creat-o. Laborator 4 Problema 1: Referat Apache Forrest [2 studenti] Realizati un referat cu privire la Apache Forrest: scop, utilizare, sumarul tehnologiilor folosite. Realizati un tutorial de creare a unui site simplu ce foloseste JavaScript in continutul sau si care este internationalizat in doua limbi. Aratati cum poate fi modificat un "skin" existent (XSLT) pentru a crea un efect interesant (la alegerea Dvs.). Cerinte interviu: familiaritate XML/XSLT/CSS/XHTML, cunostinte JavaScript, exemplu de document tehnic scris anterior. Pentru interviu sunt eligibili studentii care au acumulat 150E. Problema 3: Referat LaTeX [2 studenti] Realizati un referat cu privire la sistemul TeX/LaTeX. Tratati subiectele: instalare, utilizare de baza. Evidentiati avantajele si dezavantajele acestui sistem si aratati care sunt dificultatile cu care credeti ca se poate confrunta un utilizator incepator. Comparati realizarea de documente in (La)TeX cu cea intr-un word-processor

(de ex. cel din OpenOffice): usurinta, intuitivitatea, posibilitatea de citire si (re)utilizare a datelor in situatia unei statii de lucru in mod text. Cerinte interviu: exemplu de document tehnic scris anterior.

Laborator 5 Problema 2: Source to XML [3 studenti] Cercetati ce pachet de programe ar fi potrivit pentru a extrage din surse (C++, Java etc.) informatii privind structura si relatiile dintre clase, intr-un format XML. Pentru programele luate in considerare, portabilitatea este o cerinta stricta. Puteti propune formatul fisierului XML de retinere a structurii claselor. Realizati o procesare XSLT a unui astfel de fisier XML care sa rezulte intr-o pagina HTML tip doxygen/javadoc. Problema 3: Referat HUTN [3 studenti] Realizati un referat asupra HUTN. Prezentati scopul, utilizatea, unelte existente. Interviu: cunoastere foarte buna a notiunilor orientat-obiect, UML. Problema 4: MetaUML typesetting [2 studenti] Editati diagramele UML de stari si de activitati din cursul 6 folosind MetaUML. Cerinte interviu: familiaritate cu MetaUML. Studentii care ofera solutii bune la aceasta problema vor putea participa la proiecte ulterioare pe acest subiect. Problema 5: Generic software development [2 studenti] Contribuiti in vreun fel la un program open-source existent pe internet. Pentru a primi punctaj, aratati ca rezultatul muncii Dvs. (cod, documentatie (diagrame UML?), tutorial etc.) este acceptat de catre conducatorul proiectului respectiv si publicat. Anuntati conducatorul de lucrari la ce lucrati si ce intentionati sa faceti. Obtineti acceptul acestuia inainte de a incepe lucrul.

Problema 6: Refactoring [2 studenti] Consideram ca lucram la un proiect in C++ in care se respecta conventia ca o clasa X este declarata intr-un fisier X.hpp (sau X.h) si definita intr-un fisier X.cpp. La un moment dat, se doreste redenumirea clasei X in clasa Y. Aceasta presupune redenumirea fisierelor X.hpp si X.cpp, actualizarea directivelor #include, actualizarea garzii de includere multipla din X.hpp (sau X.h), inlocuirea tipului variabilelor de tip X (inclusiv pointeri, referinte etc.) cu tipul Y in intreg programul etc. Se va considera ca proiectul asupra caruia este efectuata refactorizarea este gestionat cu automake/autoconf, deci fisierele Makefile(.am/.in) vor trebui si ele actualizate. In cazul unor proiecte organizate pe subdirectoare, programul va fi invocat in directorul radacina al surselor si va functiona efectuand actiunile corespunzatoare in mod recursiv prin subdirectoare. Programul va fi invocat astfel: refactor class X Y Programul va fi scris in python sau perl. Pentru cei care rezolva problema, proiectul va avea continuare (de ex. redenumire metode, modificare numar/ordine parametri) si buget suplimentar.

Laborator 6 Problema 1: DBProxy [1 student] Implementati un singleton care gestioneaza o conexiune la o baza de date. Programul va fi scris in Java si va folosi JDBC. Testati aplicatia pentru conectarea la un server de baze de date MySQL. La predare se vor prezenta codul sursa si diagramele de clase si secventa corespunzatoare codului sursa. Problema 2: Graph Iterator [2 studenti] Implementati iteratori pentru parcurgerea DFS si BFS a unui graf neorientat. Graful va fi citit dintr-un fisier avand urmatoarea structura:

pe prima linie nr de noduri n, 0<n<2000000 pe a doua linie nr de muchii m, 0<m<1000000 urmeaza m linii, fiecare continand o pereche de numere i j care definesc o muchie Numele fisierului de intrare va fi citit din linia de comanda. Codul de test va folosi cei doi iteratori pentru a afisa ordinea de parcurgere a nodurilor corespunzatoare fiecaruia. Recomandari: Graful se va incarca in memorie. Algoritmii de iterare vor minimiza consumul de memorie. La predare se vor prezenta codul sursa si diagramele de clase si secventa corespunzatoare codului sursa. Problema 3: Fractals [2 studenti] Realizati un program care sa deseneze fractali (macar doua tipuri diferite). Programul va oferi posibilitatea ca utilizatorul sa faca "zoom" pe o regiune pe care o selecteaza cu soarecul. Fractalii pe care programul ii va putea desena vor avea niste parametri de configurare (diferiti). Aratati cum poate programul gestiona aceasta situatie intr-un mod general (ca atunci cand se adauga un nou tip de fractal, cu alti parametri, programul principal sa functioneze fara modificari). Este fezabila separarea codului de generare a fractalului de codul de afisare? Daca da, cum, daca nu, de ce. De predat: programul si diagrama UML de clase corespunzatoare arhitecturii acestuia. Problema 4: Interactive Process Management [2 studenti] In Linux, o modalitate usoara de a vedea lista proceselor cu un anumit nume este de a da o comanda de tipul: ps -A | grep ou Rezultatul unei astfel de comenzi este de forma: 14 ? 468 ? 2036 ? 2872 ? 1112 ? 00:00:00 kjournald 00:00:00 kjournald 00:00:00 rpc.mountd 00:00:00 smbmount 00:00:00 smbmount

Utilizatorul poate apoi sa trimita semnale proceselor folosind programul kill, de exemplu: kill -9 2872 Scopul proiectului este sa realizeze un program ipm (interactive process management) care sa permita gestionarea proceselor dintr-o lista obtinuta ca mai sus. Programul va putea fi folosit ca mai jos: ps -A | grep ou | ipm Programul va afisa lista proceselor si va permite selectarea vizuala a unor procese (ca dintr-un meniu), folosind tasta insert. Meniul va fi afisat in mod text, in consola. Utilizatorul va putea apasa apoi tasta 'k', ceea ce va avea ca efect similar cu kill -9 pid unde pid va itera printre toate numerele de procese selectate. Daca se apasa tasta 's' se va cere explicit semnalul care va fi trimis. Daca se apasa tasta 'q' programul se va termina. Realizati un astfel de program pentru Linux sau Windows.

Laborator 7

Problema 3: e-democracy [5 studenti] Pentru a putea vota (cel mai bun site, cat de mult va place la IP), realizati un sistem de vot pe internet. Utilizatorii pot vota la o intrebare introducandu-si adresa de email, confirmarea votului facandu-se prin accesarea link-ului dintr-un mail trimis din aplicatie. Link-ul va fi realizat in asa fel incat sa se previna votarea multipla. Programul va oferi posibilitatea prezentarii rezultatelor votarii (numar de voturi, procentaje, eventual pie-chart). Sistemul trebuie sa poate fi rulat pe fenrir, sub serverul apache2, folosind o baza de date postgresql pentru memorarea voturilor. Detaliile de conexiune la baza de date vor fi memorate pe server intr-un fisier de configurare. Intrebarile si variantele de raspunsuri vor fi citite dintr-un XML exportat pe web, la o adresa de tipul http://www.site.ro/~john/questions.xml

La prima rulare cu drepturi de administrator (configurare facuta prin fisierul .htaccess), aplicatia se va auto-configura, initializandu-si tabelele in care va tine minte voturile exprimate.

Problema 1: Test FillAlg [3 studenti] Un program implementeaza un algoritm de umplere (fill) a unei retele. Programul creeaza o retea (matrice) patratica de dimensiune NxN. Fiecare celula din retea este initializata cu un numar pozitiv. Algoritmul de umplere incepe cu celula din centrul retelei. Aceasta este marcata ("filled"). Dupa aceea programul cauta in mod repetat un vecin al celulelor marcate care sa aiba cea mai mica valoare si il marcheaza. Un vecin este o celula adiacenta orizontal sau vertical cu o celula marcata. In cazul in care exista mai multi vecini cu valoare minima, este ales unul dintre ei. Procesul continua pana cand regiunea marcata atinge granitele matricei (ultima celula marcata se gaseste pe prima linie, prima coloana, ultima linie sau ultima coloana). Exemplu: presupunem ca programul ruleaza pe o retea de dimensiuni 5x5 avand valorile de mai jos. Este "umpluta" celula din centru (marcata cu un "X"): V +---+---+---+---+---+ | 2 | 1 | 2 | 2 | 0 | +---+---+---+---+---+ | 3 | 4 | 1 | 1 | 3 | +---+---+---+---+---+ | 1 | 3 | X | 4 | 0 | < +---+---+---+---+---+ | 0 | 2 | 3 | 1 | 4 | +---+---+---+---+---+ | 4 | 0 | 4 | 2 | 4 | +---+---+---+---+---+ In prima iteratie, cea mai mica valoare adiacenta unui "X" este cea de deasupra centrului, deci celula corespunzatoare va fi "umpluta": V +---+---+---+---+---+ | 2 | 1 | 2 | 2 | 0 | +---+---+---+---+---+ | 3 | 4 | X | 1 | 3 | <

+---+---+---+---+---+ | 1 | 3 | X | 4 | 0 | +---+---+---+---+---+ | 0 | 2 | 3 | 1 | 4 | +---+---+---+---+---+ | 4 | 0 | 4 | 2 | 4 | +---+---+---+---+---+ Acum sunt sase celule adiacente celulelor "umplute" (diagonalele nu se iau in considerare). Dintre acestea, celula aflata la dreapta ultimei celule marcate are cea mai mica valoare, deci va fi urmatoarea marcata. V +---+---+---+---+---+ | 2 | 1 | 2 | 2 | 0 | +---+---+---+---+---+ | 3 | 4 | X | X | 3 | < +---+---+---+---+---+ | 1 | 3 | X | 4 | 0 | +---+---+---+---+---+ | 0 | 2 | 3 | 1 | 4 | +---+---+---+---+---+ | 4 | 0 | 4 | 2 | 4 | +---+---+---+---+---+ Acum trebuie luate in considerare sapte celule: doua cu valoarea "4", trei cu valoarea "3" si doua cu valoarea "2". Programul alege in mod arbitrar una dintre celulele care contin valoarea "2". V +---+---+---+---+---+ | 2 | 1 | X | 2 | 0 | < +---+---+---+---+---+ | 3 | 4 | X | X | 3 | +---+---+---+---+---+ | 1 | 3 | X | 4 | 0 | +---+---+---+---+---+ | 0 | 2 | 3 | 1 | 4 | +---+---+---+---+---+ | 4 | 0 | 4 | 2 | 4 | +---+---+---+---+---+ Deoarece regiunea umpluta atinge acum granitele retelei, algoritmul se opreste si returneaza numarul celulelor umplute, adica 4. Vi se propun mai multe implementari java pentru algoritmul de umplere (FillA..FillF). Fiecare dintre acestea implementeaza interfata IFill. Clasa World implementeaza reteaua. Testati implementarile

FillA, FillB...FillF si identificati greselile (bug-urile) existente in fiecare. Bug-urile trebuie doar identificate, nu si corectate. Pentru testare folositi JUnit. Punctul de plecare il constituie clasa FillTest. Extindeti aceasta clasa prin adaugarea de noi cazuri de test astfel incat sa scoateti in evidenta bug-urile. Clasa FillTest primeste un parametru in linia de comanda care specifica care dintre implementari va fi testata. De exemplu FillTest A va avea ca efect testarea implementarii FillA. Creati un fisier numit fillbugs.txt care sa descrie bug-urile descoperite. O descriere a unui bug trebuie sa fie o singura propozitie si trebuie sa includa la sfarsit, intre paranteze, numele metodei/metodelor de test care au descoperit bug-ul. Exemplu: FillF -pozitia de inceput este (0,0) si nu centrul retelei (testFillOneDirection) Bug-urile corespunzatoare unei implementari vor fi grupate: FillA -descriere bug 1 -descriere bug 2 ... FillB -descriere bug 1 -descriere bug 2 ... ... Fisiere:

FillTest.java World.java IFill.java FillA.class FillB.class FillC.class FillD.class FillE.class FillF.class [all-files]

Notarea va lua in considerare cat de temeinic au fost testate cele 6 clase, precum si calitatea generala a codului. Puteti pierde puncte pentru functii de test care duplica acelasi caz de test. Scopul este crearea unui numar minim de functii de test care sa testeze temeinic cele 6 clase. De predat: o arhiva zip care sa contina fisierele FillTest.java si fillbugs.txt.

S-ar putea să vă placă și