Table of Contents

Tema 1: Depot Manager 2014

Responsabili

Deadline soft: 23 martie, ora 23:55

Depunctare întârziere după depășirea deadline-ului soft: -10p/zi

Deadline hard: 26 martie, ora 23:55

Modificări și actualizări

Obiective

În urma realizării acestei teme:

Ne propunem să simulăm funcționalitatea unui depou feroviar, pentru a face CFR să dea faliment.

Cum funcționează

Avem un depou feroviar cu N linii în care pot intra vagoane de trenuri, ca în figura de mai jos. Maxim M vagoane (presupuse de dimensiune identică) pot încăpea pe fiecare linie.

Trenurile sunt, în general, eterogene (pot conține vagoane de tipuri diferite), dar trebuie să permitem intrarea lor în depou, ceea ce presupune descompunerea lor în vagoanele constituente și inserarea vagoanelor pe liniile corespunzătoare. De asemenea, trebuie să permitem compunerea de noi trenuri din vagoanele disponibile și punerea lor în circulație. În caz de imposibilitate a oricărei operații, vom semnala o eroare.

 Diagramă

Trebuie să suportăm două mari operații posibile:

Aceste operații se realizează astfel:

Cerințe

Implementați, folosind cunoștințele pe care le-ați dobândit la cursul de Programare și in primele 3 laboratoare de SD, scenariul descris mai sus.

Veți citi dintr-un fișier de intrare (primit ca parametru în linia de comandă) parametrii scenariului și fiecare operație în parte, urmând ca voi să scrieți la consolă (sandard out) configurațiile depoului după fiecare operație.

Formatul datelor de intrare

Veți citi pe rând:

Nu e nevoie să faceți validări ale datelor, fișierele vor respecta constrângerile care intervin (de tipul: suma valorilor nrVag din descrierea unui tren va da tot timpul lungimea trenului)

Formatul datelor de ieșire

Veți afișa, după fiecare operație pe care o faceți, configurația depoului și eventual mesajele de eroare.

Configurația depoului va arăta astfel:

Dacă operația curentă este imposibilă, veți afișa mesaje de eroare specifice, înainte de a afișa și configurația depoului. Mesajele sunt:

În caz de operație imposibilă, veți afișa mesajul de eroare, iar începând cu linia imediat următoare configurația depoului.

Cum vom implementa

Vom modela fiecare componentă importantă a scenariului nostru printr-o clasă C++. Astfel, vom avea nevoie de vagoane, trenuri și depou ca tipuri separate de obiecte.

Atât trenurile, cât și liniile în care vor intra vagoanele, vor folosi stive generice (veți folosi, deci template-uri). Ne gândim la o implementare simplă pentru stive, utilizând vectori alocați dinamic. Un tren va fi asemănat cu o stivă în care locomotiva este primul vagon de la bază, iar liniile de depou mărginite la un capăt au o structură în mod natural similară stivelor. Vă puteți imagina depoul ca un vector de astfel de linii.

Tipurile diferite de vagoane se vor diferenția printr-un id întreg. Chiar dacă acest număr este singura informație utilizată curent în cadrul vagoanelor, veți considera vagonul ca o clasă de sine stătătoare, din considerente de design extensibil (dacă, de exemplu, adăugăm și informații legate de tipul de marfă, capacitate de transport etc, utilizarea clasei pentru vagoane este mult mai facilă).

De asemenea, stiva voastră generică trebuie să suporte operațiile de bază specifice, anume

În rest, este la latitudinea voastră cum vă organizați funcționalitățile (clase/metode/funcții auxiliare etc.).

(5 martie) În secțiunea de comportament am menționat faptul că atunci când ne dorim un tren nou, ne uităm pe fiecare linie și căutăm vagoanele necesare. Chiar dacă liniile se comportă ca stive, aveți voie să vă uitați la conținutul lor, dar nu aveți voie să modificați structura lor decât prin mecanisme specifice stivelor.

Teste publice

Aveți la dispoziție o arhivă ce conține o suită de teste publice (singurele cu care va fi testată tema) și un script de testare automată a temei. Scriptul este de bash(Linux).

Atenție! Pentru ca testarea sa mearga, executabilul generat de tema voastră trebuie să fie în același director cu scriptul test.sh, respectiv cu directoarele input și ref din arhiva de mai jos.

Arhiva de testare

Reguli pentru trimitere

Temele vor trebui trimise pe vmchecker. Atenție! Temele trebuie trimise în secțiunea Structuri de Date (CA).

Arhiva trebuie să conțină:

Punctaj

Coding style-ul trebuie sa fie consistent și ușor de citit. Ca ghid vă recomandăm:

sau

Atenție! Tema valorează 1 punct din nota finală. Citiți cu atenție Regulamentul General de Trimitere a Temelor.

Nu copiați! Toate soluțiile vor fi verificate folosind o unealtă de detectare a plagiatului. În cazul detectării unui astfel de caz, atât plagiatorul cât și autorul original (nu contează cine care e) vor primi punctaj 0 pe toate temele!

De aceea, vă sfătuim să nu vă lăsați rezolvări ale temelor pe calculatoare partajate (la laborator etc), pe mail/liste de discuții/grupuri etc.

FAQ

Q: Se poate folosi STL?

A: Nu puteți folosi structurile gata implementate în STL. Obiectivul principal al cursului de structuri de date este acela ca voi să implementați structurile respective.

Resurse

C++ Tutorial