Differences

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

Link to this comparison view

programare-ca:laboratoare:lab14 [2012/11/04 15:24]
emil.racec [Structura datelor de intrare și de ieșire]
— (current)
Line 1: Line 1:
-===== Tema 2. Conquering Provinus ===== 
  
-**Responsabili:​** [[emil.racec@gmail.com|Emil Racec]], [[laura.vasilescu@cti.pub.ro|Laura Vasilescu]] 
- 
-**Termen de predare:** 18 noiembrie 2012 23:55. Tema se va trimite prin intermediul platformei de cursuri [[http://​cs.curs.pub.ro|cs.curs]] 
- 
-**Obiective:​** 
-După realizarea acestei teme de casă studentul va fi capabil să: 
-  * construiască un program pe baza unor specificații date 
-  * lucreze modularizat 
-  * implementeze funcții ajutătoare ​ 
-  * respecte formate stricte de intrare/​ieșire 
- 
-Cunoștințe necesare rezolvării acestei teme de casă: 
-  * lucrul cu funcții 
-  * laboratoarele 1 - 4 
-  * elemente de geometrie analitică 
-==== Introducere ==== 
- 
-Acuzat de trădare (pentru că a prezis declinul Imperiului Galactic), Hari Seldon este exilat alături de echipa sa de „Enciclopediști” pe planeta Terminus. Aceștia însă implementează ​ în secret un plan de rezervă –  A doua fundație – la celălalt capăt al galaxiei. 
- 
-Cea mai importantă parte din plan este însă cunoașterea în amănunt a celuilalt capăt al galaxiei. Analizând cu atenție harta Universului,​ Seldon constată că există o planetă îndepărtată,​ numită Planeta Provinus, despre care se cunosc foarte puține date, și hotărăște să facă o expediție intergalactică pe aceasta. 
- 
-Lipsa de informații despre această planetă se datorează numeroaselor expediții eșuate datorită unor fenomene stranii de pe suprafața ​ planetei, soldate cu dispariții sau avarieri fatale ale navelor. 
- 
-Hari Seldon și cu echipa sa de filosofi construiesc,​ pentru această expediție aparent imposibilă,​ un sistem de sateliți performanți, ​ cu ajutorul cărora reușesc să facă o analiză a fenomenelor stranii de pe Planeta Provinus, bazându-se pe parametrii colectați de sateliți. 
- 
-Astfel, ei au constatat că planeta are o Zonă Periculoasă, ​ aproximativ delimitată de un triunghi, in care sunt fenomene electrice și magnetice de o forță nemaiîntâlnită. De asemenea, această zonă poate să își schimbe poziția pe suprafața planetei, însă își menține întotdeauna forma triunghiulară. 
- 
-==== Cerința problemei ==== 
- 
-Deoarece Nava lui Sheldon nu dispune de un sistem de navigare atât de avansat încât să evite pericolul, proiectați componenta computerului de bord a navei care ajută la sistemul de ghidare. Pentru aceasta, aveți la dispoziție datele furnizate de sistemul de sateliți, care pot fi de două tipuri: ​ 
-  * ''​TIPUL 1:''​ (V1x,V1y) (V2x,V2y) (V3x,​V3y) ​ 
-    * reprezentând coordonatele celor 3 puncte ce determină Zona Periculoasă de pe planeta Provinus (coordonate de tip real, cu exact două zecimale după virgulă) 
-  * ''​TIPUL 2:''​ N (P1x,P1y) (P2x,P2y) (P3x,P3y) .... (P(n-1)x,​P(n-1)y) (Pnx,Pny) 
-    * reprezentând N poziții ale navei (coordonate de tip real, cu exact două zecimale după virgulă) 
- 
-In momentul in care se primesc date de ''​TIPUL 2'',​ va trebui să calculați dacă nava se află sau nu in Zona Periculoasă (pentru fiecare poziție a sa din cele n poziții), și dacă da, să afișați distanța cea mai scurtă până la ieșirea din această zonă (număr de tip real, cu exact două zecimale după virgulă). Un exemplu de afișare este: 
-  * (YES,23.46) 
-    * cu semnificația:​ nava se află in Zona Periculoasă și distanța cea mai scurtă până la ieșire este 23.46 
-<​html>​ 
-<​body>&​nbsp;&​nbsp;&​nbsp;&​nbsp;&​nbsp;​ SAU</​body>​ 
-</​html>​ 
-  * (NO) 
-    * cu semnificația:​ nava nu se află in Zona Periculoasă 
-  * SATELLITE COMPUTATION ERROR! 
-    * cu semnificația:​ datele de ''​TIPUL 1''​ furnizate nu pot forma o arie a Zonei Periculoase ​ 
- 
-In momentul in care sateliții furnizează date de tipul 1 înseamnă că Zona Periculoasă s-a modificat, deci calculele pentru pozițiile ulterioare ale navei se vor face raportat la noile coordonate ale zonei. Astfel, **o poziție a navei se va calcula întotdeauna raportat la ultimul set de coordonate ale Zonei Periculoase transmise de sateliți**. 
- 
-Încheierea transmisiei de către sateliți, reprezentând finalul expediției de pe planeta Provinus, va fi marcată prin transmiterea unei linii noi(goale). De asemenea, afișarea rezultatelor voastre va trebuie să se încheie tot printr-o linie nouă(goală). 
- 
-==== Structura datelor de intrare și de ieșire ==== 
- 
-Datele de intrare se vor citi de la tastatură. Acestea vor fi furnizate alternativ de către sateliți și se garantează că transmisia lor începe cu date de ''​TIPUL 1''​ și se termină cu date de ''​TIPUL 2''​. Coordonatele punctelor (pentru ambele tipuri de date) vor fi de forma (Cx,Cy): cele doua coordonate reale vor fi incadrate intr-o paranteza rotunda si despartite printr-o virgula. Două puncte sunt despărțite între ele printr-un singur spațiu iar două tipuri de date consecutive printr-o linie nouă('​\n'​). ​ 
- 
-Rezultatele analizei se vor afișa pe ecran astfel: fiecare linie va conține la început N - numărul de puncte analizate pentru **aceeași** zonă de ''​TIPUL 2''​ urmat de rezultatele obținute pentru cele N puncte (de forma: (N0) sau (YES,<​d_min_ieșire_din_undefined>​)) separate printr-un singur spațiu. Două zone consecutive de ''​TIPUL 2''​ vor fi despărțite prin linie nouă. 
- 
-=== Restricții și precizări === 
- 
-   * dacă un punct se află pe granița Zonei Periculoase,​ acesta va fi considerat în interior la distanța 0.00 de ieșire. ​ 
-   * toate coordonatele punctelor (atât pentru datele de intrare cât și pentru cele de ieșire) se vor da sub formă de numere reale cu exact două cifre după virgulă 
- 
-==== Validitatea datelor de intrare ==== 
- 
-Determinarea Zonei Periculoase se face de către sateliți folosind proceduri complexe de aproximare și interpolare a diferitelor valori ale parametrilor inregistrați. Totuși, datorită unor truncheri a valorilor coordonatelor este posibil ca cele 3 puncte furnizate să nu poată constitui o arie validă a Zonei Periculoase. În acest caz, se va afișa(pe o linie nouă) "​SATELLITE COMPUTATION ERROR!"​ (fără ghilimele) și secvența de N puncte corespunzătoare acestei zone NU va fi analizată. 
- 
-==== Exemplu ==== 
- 
-Fie următoarea secvență de date de intrare, furnizate de sateliți: 
-<​code>​ 
-(0.00,0.00) (0.00,1.50) (2.11,​-1.37) 
-4 (1.00,2.00) (2.23,45.1) (0.12,0.73) (0.00,0.00) 
-(1.16,2.12) (9.14,3.21) (1.16,2.12) 
-2 (-15.21,​0.99) (5.55,​-8.93) 
-</​code>​ 
- 
-Se va afișa la ecran: ​ 
- 
-<​code>​ 
-4 (NO) (NO) (YES,0.12) (YES,0.00) 
-SATELLITE COMPUTATION ERROR! 
-</​code>​ 
- 
-==== Detalii de implementare ==== 
- 
-Fișierul sursă trimis de voi va trebui să se numească ''​tema2.c''​ (fără majuscule!). El va fi compilat folosind ''​gcc''​ sub Linux, astfel că indiferent de mediul de programare folosit la elaborarea programului,​ tema voastră va trebui să fie compilabila cu ''​gcc''​. Makefile-ul folosit la compilarea temei voastre este cel folosit în cadrul Laboratorului 1, cu actualizările de rigoare. 
- 
- 
-  ​ 
-În afară de avertizările de la secțiunea validității datelor de intrare, puteți fi siguri că nu se vor strecura alte date nevalide sau incompatibile între ele (precum neconcordanta între numărul de puncte N și numărul actual de puncte, etc.)  
-  ​ 
-Deși programul vostru va trebui să citească direct de la tastatură și să afișeze pe ecran (folosind, de exemplu, scanf și printf), puteți să citiți datele și să le scrieți în fișiere text, folosind redirectarile din consolă, fără să modificați programul. Dacă fișierul de intrare este ''​example.in'',​ și cel de ieșire este ''​example.out'',​ iar programul vostru se numește tema2, comanda la consolă va fi:  
- 
- ./tema2 < example.in > example.out 
- 
-De asemenea, se garantează că dimensiunea unei coordonate nu va depăși tipul ''​float''​ iar N (numărul de puncte) va fi un întreg fără semn pe 32 de biți. 
- 
-=== Observații === 
-  * în cadrul temei este permis lucrul cu tablouri (vectori sau matrici), dar acesta nu reprezintă o cerință a temei  
-  * truncherile coordonatelor la două zecimale după virgulă se face **numai** la afișare, NU și în timpul calculelor ​ 
-  * tema se va trimite într-o arhivă conform cu [[programare-ca:​regulament#​reguli_de_trimitere_a_temelor|specificațiile din regulamentul general al materiei]] 
-  * tema trebuie sa aiba un aspect ingrijit si un coding-style adecvat. Un exemplu de tutorial se gaseste [[programare-ca:​coding-style|aici]] 
programare-ca/laboratoare/lab14.1352035490.txt.gz · Last modified: 2012/11/04 15:24 by emil.racec
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