online: 10; azi: 393; total: 50848 Manual clasa a xi a - Implementarea structurilor de date - Lista liniara

Probleme Rezolvate



Manual clasa a Xi a

Implementarea structurilor de date

Lista liniara

Un automobil trebuie să parcurgă un traseu care formează un poligon, cu întoarcere la stația de po rn ire. Pe traseu există n staţii de alimentare cu carburant care formează vârfurile poligonului. Fiecare stație de alimentare i este c aracterizată de coordonatele (xi ,y i ). Automobilul consumă 1 litru de carburant la fiecare 20 km şi nu există restricție pentru capacitatea rezervorului. Se citesc dintr-un fişier text următoarele informaţii: de pe primul rând numărul de staţii n, de pe urmă torul rând un şir de n numere ci care reprezintă cantitatea de combustibil cu care este alimentat la staţia i, iar de pe următ orul rând n perechi de numere xi şi yi care reprezintă coordonatele stației i. Din ce punct trebuie să plece automobilul astfel încât să parcurgă traseul cu întoarcere în punctul de pornire şi să nu rămână fără combustibil.
# include <iostream>
# include <fstream>
# include <cmath>
struct Coordonate {
int x, y;
};
double distanta (Coordonate a, Coordonate b) {
return sqrt ( pow (a.x - b.x, 2 ) + pow (a.y - b.y, 2 ));
}
int punctDePlecare ( int n, double * cantitati, Coordonate* coordonate) {
double consum = 0 ;
for ( int i = 0 ; i < n; ++i) {
Coordonate a = coordonate[i];
Coordonate b = coordonate[(i + 1 ) % n];
consum += distanta (a, b) / 20.0 ;
}
int punct = -1 ;
double rezervor = 0 ;
for ( int i = 0 ; i < n; ++i) {
rezervor += cantitati[i];
if (rezervor >= consum) {
punct = i + 1 ;
break ;
}
}
return punct;
}
int main () {
int n;
std::ifstream fisier ( "date.txt" ) ;
fisier >> n;
double * cantitati = new double [n];
Coordonate* coordonate = new Coordonate[n];
for ( int i = 0 ; i < n; ++i) {
fisier >> cantitati[i];
}
for ( int i = 0 ; i < n; ++i) {
fisier >> coordonate[i].x >> coordonate[i].y;
}
fisier. close ();
int punct = punctDePlecare (n, cantitati, coordonate);
if (punct == -1 ) {
std::cout << "Nu exista un punct de plecare potrivit.\n" ;
} else {
std::cout << "Automobilul ar trebui sa plece din punctul " << punct << ".\n" ;
}
delete [] cantitati;
delete [] coordonate;
return 0 ;
}