Cititi de la tastatura n date de tip PUNCT (n >= 10). Afisati punctul cel mai apropiat de punctul O(0,0,0).
Răspunsuri la întrebare
Explicație:
#include <iostream>
#include <cmath> //utilizam o biblioteca speciala unor functii matematice, precum radicalul
using namespace std;
struct PUNCT //declaram o noua structura de date de tip punct in spatiu pentru care stim variabila depinde de 3 parametri
{
int x;
int y;
int z;
};
void citire(PUNCT pct[100], int &n) //citim datele
{
do
{
cout << "Numarul de puncte este "; //citim numarul de puncte
cin >> n;
} while (n < 10); //citirea se realizeaza pana cand n>=10, pentru a respecta cerinta din problema
for (int i = 0; i < n; i++) //pentru fiecare punct i din tabloul pct citim cele 3 coordonate (x,y,z)
{
cout << "Coordonata x a punctului " << i << " este ";
cin >> pct[i].x;
cout << "Coordonata y a punctului " << i << " este ";
cin >> pct[i].y;
cout << "Coordonata z a punctului " << i << " este ";
cin >> pct[i].z;
}
}
void calcul_distante(PUNCT pct[100], int n) //calculam distante
{
double distante[100]; //declaram un tablou distanta ce va memora distanta de la fiecare punct i din tabloul pct la origine
for (int i = 0; i < n; i++) //parcurgem de la 0 la n-1 cele n puncte
distante[i] = sqrt((pct[i].x - 0)*(pct[i].x - 0) + (pct[i].y - 0)*(pct[i].y - 0) + (pct[i].z - 0)*(pct[i].z - 0)); //calculam efectiv fiecare distanta
double min = distante[0]; //initializam o distanta minima cu prima distanta gasita si vedem daca este cea mai mica
for (int i = 1; i < n; i++) //parcurgem tabloul de puncte de la 1 (nu de la 0..pentru ca deja am presupus ca distanta minima este prima distanta calculata) la n-1 punctele
if (distante[i] < distante[0]) //testam daca avem distanta mai mica decat prima gasita
min = distante[i]; //in caz afirmativ, schimbam distanta minima
for (int i = 0; i < n; i++) //parcurgem de la 0 la n-1 cele n puncte
if (min == distante[i]) //testam daca distanta de la origine la punct este egala cu distanta minima si in caz afirmativ, scriem punctul
{
cout << "Punctul cel mai apropiat de origine este ";
cout << "(" << pct[i].x << "," << pct[i].y << "," << pct[i].z << ")" << endl;
}
}
int main() //apelam functiile folosite
{
int n;
PUNCT pct[100];
citire(pct, n);
calcul_distante(pct, n);
system("pause");
return 0;
}