Programarea Calculatoarelor, seria CC
După ce a fost eliberat de către băștinașii de pe insulă, Marcvs, fiind un spirit întreprinzător, a decis să intre în afaceri cu ei. După ce au proiectat împreună plantația de cafea și au intrat în producție, și-au dat seama repede că au nevoie de un sistem eficient de transport.
Șefii de trib l-au recomandat pe un contractor local, numit Julien, care a proiectat o rețea de străzi prin plantație. Pe aceste străzi vor circula vehicule conduse de angajați băștinași (vezi Figura 1).
Marcvs, însă, ține foarte mult la viața localnicilor și îl suspectează pe Julien că a proiectat o rețea de transport în care accidentele sunt inevitabile. El vrea să îi convingă pe șefii de trib de intențiile egoiste și non-etice ale lui Julien, dar pentru asta are nevoie de dovezi concrete.
De aceea, el vă cere să scrieți un program care simulează traficul pe plantație, în speranța că va putea demonstra că accidentele sunt inevitabile și viețile șoferilor au fost puse în pericol de munca neglijentă a lui Julien.
Se știe că plantația are formă dreptunghiulară și măsoară 20km lățime cu 30km lungime. Mai mult, harta plantației este împărțită în parcele pătrate cu latura de 1km (de unde rezultă că întreaga plantație se poate reprezenta sub forma unei matrici de 20 x 30 parcele).
Fiecare parcelă este complet descrisă printr-un număr natural de maxim
Intrare (island.map) |
03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 02 02 02 02 02 03 02 02 02 02 03 03 03 03 03 03 02 02 02 02 03 03 03 03 03 03 03 03 02 02 02 01 01 01 02 02 02 01 01 02 02 03 03 03 03 02 02 01 02 02 02 02 03 03 03 03 02 02 02 01 01 01 01 01 01 01 01 01 01 01 02 02 03 03 02 02 01 01 01 02 02 02 02 03 03 02 02 02 01 01 01 01 01 01 01 01 01 01 01 01 01 02 02 02 02 01 01 01 01 01 02 02 02 03 03 03 02 02 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 02 02 03 03 03 03 02 02 02 02 01 01 30 40 40 40 40 40 40 40 40 40 40 40 40 40 40 01 01 01 01 02 03 03 03 02 02 02 01 01 01 01 30 01 01 01 01 10 01 01 01 01 10 01 01 01 10 01 01 01 01 02 02 03 03 02 02 02 02 01 01 01 30 01 01 01 01 10 01 01 01 01 10 01 01 01 10 01 01 01 02 02 02 03 03 03 03 02 02 01 01 01 30 01 01 01 01 10 01 01 01 01 10 01 01 01 10 01 01 01 01 02 02 03 03 03 03 02 02 02 01 01 30 01 01 01 01 110 01 01 01 01 10 01 01 01 10 01 01 01 02 02 02 03 03 03 03 03 02 02 01 01 30 40 40 40 440 10 40 40 440 40 10 40 40 40 40 01 01 01 02 02 03 03 03 03 03 02 02 02 01 01 30 01 01 01 01 10 01 01 01 01 01 01 01 01 10 01 01 01 02 03 03 03 03 03 03 02 02 02 02 01 30 01 01 01 01 10 01 01 01 01 01 01 01 01 10 01 01 01 02 02 03 03 03 03 03 03 03 02 02 01 20 20 20 20 20 20 220 20 20 20 20 20 20 20 10 02 02 02 02 03 03 03 03 03 03 03 03 02 02 02 01 01 01 01 01 01 01 01 01 01 01 01 01 01 02 02 02 02 03 03 03 03 03 03 03 03 02 02 02 02 02 02 02 02 02 02 02 02 01 01 01 01 02 02 02 02 02 03 03 03 03 03 03 03 03 03 03 03 02 02 03 03 03 02 02 02 02 02 02 02 02 02 02 02 02 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 02 02 03 03 03 02 02 02 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 |
Ieșire (oglindește intrarea - atenție la linia liberă de la sfârșit) |
03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 02 02 02 02 02 03 02 02 02 02 03 03 03 03 03 03 02 02 02 02 03 03 03 03 03 03 03 03 02 02 02 01 01 01 02 02 02 01 01 02 02 03 03 03 03 02 02 01 02 02 02 02 03 03 03 03 02 02 02 01 01 01 01 01 01 01 01 01 01 01 02 02 03 03 02 02 01 01 01 02 02 02 02 03 03 02 02 02 01 01 01 01 01 01 01 01 01 01 01 01 01 02 02 02 02 01 01 01 01 01 02 02 02 03 03 03 02 02 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 02 02 03 03 03 03 02 02 02 02 01 01 30 40 40 40 40 40 40 40 40 40 40 40 40 40 40 01 01 01 01 02 03 03 03 02 02 02 01 01 01 01 30 01 01 01 01 10 01 01 01 01 10 01 01 01 10 01 01 01 01 02 02 03 03 02 02 02 02 01 01 01 30 01 01 01 01 10 01 01 01 01 10 01 01 01 10 01 01 01 02 02 02 03 03 03 03 02 02 01 01 01 30 01 01 01 01 10 01 01 01 01 10 01 01 01 10 01 01 01 01 02 02 03 03 03 03 02 02 02 01 01 30 01 01 01 01 110 01 01 01 01 10 01 01 01 10 01 01 01 02 02 02 03 03 03 03 03 02 02 01 01 30 40 40 40 440 10 40 40 440 40 10 40 40 40 40 01 01 01 02 02 03 03 03 03 03 02 02 02 01 01 30 01 01 01 01 10 01 01 01 01 01 01 01 01 10 01 01 01 02 03 03 03 03 03 03 02 02 02 02 01 30 01 01 01 01 10 01 01 01 01 01 01 01 01 10 01 01 01 02 02 03 03 03 03 03 03 03 02 02 01 20 20 20 20 20 20 220 20 20 20 20 20 20 20 10 02 02 02 02 03 03 03 03 03 03 03 03 02 02 02 01 01 01 01 01 01 01 01 01 01 01 01 01 01 02 02 02 02 03 03 03 03 03 03 03 03 02 02 02 02 02 02 02 02 02 02 02 02 01 01 01 01 02 02 02 02 02 03 03 03 03 03 03 03 03 03 03 03 02 02 03 03 03 02 02 02 02 02 02 02 02 02 02 02 02 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 02 02 03 03 03 02 02 02 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 |
După ce v-ați asigurat că funcțiile de I/O funcționează corect, este momentul să precizăm cum este codificată harta. Fiecare element din matrice este un număr natural pozitiv de maxim
Cifra unităților semnifică tipul de teren de pe hartă și poate fi:
Cifra zecilor semnifică tipul de viraj obligatoriu de pe o porțiune de drum:
Cifra sutelor semnifică tipul de vehicul aflat pe o porțiune de drum:
Cifra miilor semnifică dacă pe respectiva parcelă a avut loc vreun accident:
De exemplu, matricea din exemplul de la Taskul 1 codifică de fapt următoarea hartă inițială:
La fiecare pas, mașinile se mișcă după următoarele reguli:
Adăugați funcționalitatea de a simula
Pentru acest Task, se garantează că:
După ce v-ați asigurat că primul pas este simulat corect în condițiile de la Task-ul 2, este timpul să mai înlăturăm o garanție: existența virajelor obligatorii.
Modificați funcționalitatea de a simula
Pentru acest Task, se garantează în continuare că:
După ce v-ați asigurat că primul pas este simulat corect în condițiile de la Task-ul 3, este timpul să luăm în considerare și situațiile în care se produc accidente.
Modificați funcționalitatea de a simula
Pentru acest Task, vi se garantează în continuare că:
Starea inițială |
![]() Mașina de sus va ieși în decor |
După primul pas |
![]() Mașina de sus a ieșit în decor și a făcut accident |
După ce v-ați asigurat că simularea primului pas funcționează corect conform Task-urilor precendente, este timpul să simulăm și următorii 99 de pași.
Modificați funcționalitatea programului astfel încât să simuleze primii 100 de pași (101, dacă numărăm și starea inițială de la Taskul 1).
Pe ecran se va afișa, succesiv, fiecare stare astfel simulată (în total, 101 matrici, daca luăm în considerare și afișarea de la Task-ul 1).
Pentru acest Task, vi se garantează în continuare că:
Pentru ca învingerea lui Julien să fie deplină, creați un nou proiect de plantație și proiectați un sistem de trafic prin acesta.
Descrieți o hartă nouă pentru a o folosi la simulat (de exemplu, o puteți scrie în vim/gedit).
Harta va respecta convențiile de codificare de la Task-ul 2, și va fi salvată într-un fișier denumit harta
Harta proiectată poate genera în continuare accidente, dacă harta este proiectată pentru a testa Task-ul 4 (daca