#include <iostream>
#include <algorithm> // Fichier à inclure pour disposer de la fonction `sort(...)'.

// Ce programme lit une suite de nombres sur le flux d'entrée standard.
// Il affiche la médiane de ces nombres.
// Il doit être appelé en redirigeant le flux d'entrée standard en utili-
// sant par exemple la commande suivante :
//           a < nombres.txt
// où `nombres.txt' est un fichier contenant la suite de nombres.

// Version 2 : le tableau, s'il déborde, est réalloué.

using namespace std ;

int main() {
	const size_t TAILLE_BLOC = 4 ;
	// La variable `tableau' est un pointeur sur l'adresse de base du
	// tableau. Cette variable s'utilise comme l'identificateur d'un
	// tableau ; on peut notamment écrire : tableau[i].
	double * tableau = 0 ;
	size_t taille = 0 ;
	size_t reste = 0 ;
	size_t indice = 0 ;
	double x ;
	while ( cin >> x ) {
		if ( reste == 0 ) {
			cout << "Réallocation du tableau\n" ;
			double * ancien_tableau = tableau ;
			taille += TAILLE_BLOC ;
			tableau = new double[taille] ;
			reste = TAILLE_BLOC ;
			for ( size_t i = 0 ; i < indice ; ++ i )
				tableau[i] = ancien_tableau[i] ;
			// La première fois, comme `tableau' est égal à zéro, l'opéra-
			// teur `delete' ne fait rien.
			delete[] ancien_tableau ;
		}
		tableau[indice] = x ;
		++ indice ;
		-- reste ;
	}
	size_t nombre = indice ;
	sort(&tableau[0], &tableau[nombre]) ;
	cout << "La médiane est " << tableau[nombre/2] ;
	// Ne pas oublier de libérer le tableau, sinon fuite de mémoire !
	delete[] tableau ;
	return 0 ;
}
