#include #include #include #include "Fraction.h" #include "Array.h" // #include "Array.cpp" template DataType average(const DataType& first, const DataType& second) { return (first + second) / 2; } template void printMedian(ecci::Array& values) { std::cerr << values.getCount() << " values\n"; values.sort(); // Si la cantidad de valores es impar if ( values.getCount() % 2 ) { // La mediana es el valor que esta en la mitad de la cantidad de valores std::cout << values[values.getCount() / 2] << std::endl; } // De lo contrario else { // La mediana es el promedio de los dos valores que estan en el centro std::cout << average(values[values.getCount() / 2], values[values.getCount() / 2 - 1]) << std::endl; } } int main(int argc, char* argv[]) { #if 0 size_t size = 0; if ( ! (std::cin >> size) ) return (std::cerr << "invalid data\n"), 1; ecci::Array values(size); #endif #if 0 // Si el constructor de conversion es implicito, C++ permitira // operaciones peligrosas como la siguiente values = 0; #endif if ( argc <= 1 || strcmp(argv[1], "double") == 0 ) { ecci::Array values; double value = 0.0; while ( std::cin >> value ) values.append(value); std::cout << std::fixed << std::setprecision(2); printMedian(values); } else if ( strcmp(argv[1], "fraction") == 0 ) { ecci::Array values; ecci::Fraction fraction; while ( std::cin >> fraction ) values.append(fraction); printMedian(values); } else { std::cerr << "median: unsupported data type: " << argv[1] << std::endl; } ecci::Array fractions2; }