//Készítette:   Gregorics Tibor
//Dátum:        2008.12.06.
//Feladat:      segédfüggvények számok billentyűzetről való beolvasásához

#include "read.h"
#include <iostream>

using namespace std;

bool ci(int k)
{
    return true;
}

bool cd(double k)
{
    return true;
}

bool Pos(int k)
{
    return k>0;
}

//Feladat: 	    Megadott feltételt kielégítő egész számot olvas be.
//Bemenő adatok:string msg	- kiírandó üzenet
//              string errormsg	- kiírandó hibaüzenet
//              bool cond(int)	    - ellenőrző függvény
//Kimenő adatok:int n		- beolvasott természetes szám (visszatérési érték)
//Tevékenység:	Billentyűzetről olvas be egy a cond() feltételnek megfelelő természetes számot.
//              A  cond()feltétel alapértelmezés szerint mindent elfogad, , azaz ci()
int ReadInt(string msg, string errormsg, bool cond(int) )
{
    int n;
    bool hiba;
    do{
        cout << msg;
        string str;
        cin >> str;
        n = atoi(str.c_str());
        hiba = n==0 && str!="0" || !cond(n);
       if(hiba) cout<< errormsg<< endl;
    }while(hiba);
    return n;
}

//Feladat: 	    Megadott feltételt kielégítő természetes számot olvas be.
//Bemenő adatok:string msg	    - kiírandó üzenet
//              string errormsg	- kiírandó hibaüzenet
//              bool cond(int)	- ellenőrző függvény
//Kimenő adatok:int n		    - beolvasott természetes szám (visszatérési érték)
//Tevékenység:	Billentyűzetről olvas be egy a cond() feltételnek megfelelő természetes számot.
//              A  cond()feltétel alapértelmezés szerint mindent elfogad, azaz ci()
int ReadNat(string msg, string errormsg, bool cond(int) )
{
    int n;
    bool hiba;
    do{
        cout << msg;
        string str;
        cin >> str;
        n = atoi(str.c_str());
        hiba = n==0 && str!="0" || n<0 || !cond(n);
       if(hiba) cout<< errormsg<< endl;
    }while(hiba);
    return n;
}

//Feladat: 		Megadott feltételt kielégítő valós számot olvas be.
//Bemenő adatok:string msg	    - kiírandó üzenet
//				string errormsg	- kiírandó hibaüzenet
//              bool cond(double)- ellenőrző függvény
//Kimenő adatok:double a	    - beolvasott egész szám (visszatérési érték)
//Tevékenység:	Billentyűzetről olvas be egy a cond() feltételnek megfelelő egész számot.
//              A  cond() feltétel alapértelmezés szerint mindent elfogad, azaz cd()
double  ReadReal(string msg, string errormsg, bool cond(double))
{
    double a;
    bool hiba;
    do{
        cout << msg;
        string str;
        cin >> str;
        a = atof(str.c_str());
        hiba = a==0 && str!="0";
       if(hiba) cout<< errormsg<< endl;
    }while(hiba);
    return a;
}
