//Készítette:    Gregorics Tibor
//Dátum:         2009.01.24.
//Feladat:       Hány azonosítatlan objektum tartózkodik az űrállomás körzetében

#include <iostream>
#include <vector>
#include "read.h"
#include "pont.h"
#include "gomb.h"

using namespace std;

//Feladat: 	    Eldönti, hogy egy valós szám nem-negatív-e
//Bemenő:       double a - valós szám
//Kimenő:       bool     - válasz (visszatérési érték)
bool NotNegative(double a){ return a>=0.0;}

//Feladat: 	    Megszámolja, hogy megadott pontok közül hány található egy adott gömbben.
//Bemenő adatok:vector<Pont> x - térbeli pontokat tartalmazó tömb
//              Gomb g        - gömb
//Kimenő adatok:int db          - gömbbeli pontok száma
//Tevékenység:	Bekéri a gömb adatait majd a térbeli pontokét, ez utóbbiakkal feltölt egy tömböt.
//              Megszámolja a gömbbe eső pontokat és kiírja az eredményt.
int main()
{
    // Űrállomás beolvasása
    double x,y,z,r;
    cout << "Az űrállomás középpontjának koordinátái:\n";
    x = ReadReal("\t x: ", "Valós számot várok!");
    y = ReadReal("\t y: ", "Valós számot várok!");
    z = ReadReal("\t z: ", "Valós számot várok!");
    Pont c;
    c.Beallit(x,y,z);
    r = ReadReal("Űrállomás védelmi körzetének sugara: ", "Nem-negatív valós számot várok!", NotNegative);

    try{
        Gomb g(c,r);

        // UFO-k beolvasása
        int n = ReadInt("\nAzonosítatlan objektumok száma: ", "Természetes számot várok!");
        vector<Pont> v(n);
        for(int i=0; i<n; ++i){
            cout << "Az " << i+1 << "-dik azonosítatlan objektum koordinátái:\n";
            x = ReadReal( "\t x: ", "Valós számot várok!");
            y = ReadReal( "\t y: ", "Valós számot várok!");
            z = ReadReal( "\t z: ", "Valós számot várok!");
            v[i].Beallit(x,y,z);
        }

        // Számlálás
        int db = 0;
        for(int i=0; i<n; ++i){
            if(g.Benne(v[i])) ++db;
        }

        // Kiírás
        cout << "\nAz űrállomáshoz közel eső azonosítatlan objektumok száma: " << db << endl;

    }catch(Gomb::Hiba e){
        if(e == Gomb::Negativ_Sugar) cout << "Negatív sugár!\n";
    }

    char ch; cin>>ch;
    return 0;
}

