Răspuns :
Am sa incerc sa dau detalii despre cum as face eu acest program.
1. Construiesc o structura de date ce va contine:
- x: double: coordonata x a centrului discului
- y: double: coordonata y a centrului discului
- R: double: raza discului.
struct StructDiscInfo {
double x;
double y;
double R;
};
2. Din fisierul de intrare, citesc prima linie, numarul n.
3. Construiesc un vector de n elemente
StructDiscInfo *discInfo = new StructDiscInfo[n];
ale carui elemente sint chiar structurile de mai sus.
3. Cu ajutorul unui ciclu de la 0 la n-1 (adica n elemente) citesc linie cu linie fisierul de intrare. Pentru fiecare linie construiect o structura pe care o adaug in vectorul de elemente:
StructDiscInfo structDiscInfo = {.x = value_X_din_fisier, .y = value_Y_din_fisier, .R = value_R_din_fisier};
discInfo[i] = structDiscInfo;
4. Ordonez crescator, dupa raza, elementele din discInfo. Voi folosi metoda bulelor in acest sens, deoarece este cea mai simpla si populara.
5. Determin discul cu cea mai mare raza. Acesta va fi ultimul element din array-ul discInfo:
StructDiscInfo discInfoMaxRadius = discInfo[n - 1]
Fie xo, yo, Ro pentru acest disc.
5. Pentru toate celelalte n-1 discuri (adica primele n-1 elemente din discInfo), cu un ciclu for, determin daca acestea sint in exteriorul discului cu raza maxima.
Adica determin distanta dintre centrele celor 2 discuri:
d = rad((xi - xo)² + (yi - yo)²)
Discul i este in exteriorul discului cu raza maxima daca: d > Ri + Ro
Daca conditia este indeplinita, scriu o linie (cu datele din discInfo[i]) in fisierul de iesire.
Observatie: liniile in fisierul de iesire vor fi deja ordonate crescator dupa raza, deoarece array-ul de intrare discInfo este ordonat crescator dupa raza,
6. Si cam asta este tot.
Succes
Vă mulțumim că ați vizitat site-ul nostru dedicat Informatică. Sperăm că informațiile oferite v-au fost de ajutor. Dacă aveți întrebări sau nevoie de asistență suplimentară, nu ezitați să ne contactați. Vă așteptăm cu drag data viitoare și nu uitați să ne adăugați la favorite!