Crea_NVectores.java_



// Entrada:	Una matriz de cadenas
// Salida:	N vectores como palabras diferentes existan en la matriz
//		y cada palabra se repite M veces como palabras existan con
//		la misma inicial de ella.
class Crea_NVectores
{
	public static void main(String RAFA[])
	{
		String MAT[][] = {{"Pepe", "Pico", "Xavier"},{"Xavier", "Raton", "Rafa"},{"Roberto", "Canon", "Cesped"}};

		ImprimeMatriz(MAT);
		CreaVectores(MAT);
	}
	
	static void CreaVectores(String MAT[][])
	{
		String Nombres[] = new String[MAT.length*MAT[0].length];
		int Cantidades[] = new int[MAT.length*MAT[0].length];
		int indice = 0;

		// Vector de palabras diferentes
		// Se hace un barrido de la matriz
		for (int r = 0; r < MAT.length; r++)	// Cantidad de renglones
			for (int c = 0; c < MAT[0].length; c++)	// Cantidad de columnas
			{
				if (!Existe_En_Vector(Nombres, MAT[r][c]))	// Si no existe
				{
					Nombres[indice] = MAT[r][c];	// Se obtiene la palabra
					indice++;			// incremento del indice
				}
			}
		// Calculo de las cantidades
		for (int i = 0; i < Nombres.length; i++)	// Longitud del vector Nombres
			for (int r = 0; r < MAT.length; r++)	// Barrido de la matriz
				for (int c = 0; c < MAT[0].length; c++)
					if (Nombres[i] != null)		// Tiene dato?
						if (Nombres[i].charAt(0) == MAT[r][c].charAt(0))	// son iguales las iniciales?
							Cantidades[i]++;				// entonces se incrementa el indice
		// Crea los N vectores.
		String VecSalida[][] = new String[MAT.length*MAT[0].length][MAT.length*MAT[0].length];	// Vector[r*c][r*c]
		{
			if (Nombres[in] != null)	// Tiene dato?
				for (int ic = 0; ic < Cantidades[in]; ic++)	// Se repite la cantidad de veces indicada
					VecSalida[in][ic] = Nombres[in];	// Se guarda la palabra en el vector de salida
		}

		ImprimeVector(Nombres);
		ImprimeVectorEntero(Cantidades);
		ImprimeMatriz(VecSalida);
	}

	// Existe "Palabra" en el vector Nombres?
	static boolean Existe_En_Vector(String Nombres[], String Palabra)
	{
		boolean Salida = false;		// por defecto no existe

		for (int x = 0; x < Nombres.length; x++)	// recorrido por el vector
			if (Nombres[x] != null)		// Tiene dato?
				if (Nombres[x].compareTo(Palabra) == 0)		// Son iguales?
					Salida = true;		// Si existe
		return Salida;
	}

	static void ImprimeVectorEntero(int VECT[])
	{
		for (int x = 0; x < VECT.length; x++)
			if (VECT[x] != 0)
				System.out.println(VECT[x]);
	}

	static void ImprimeVector(String VECT[])
	{
		for (int x = 0; x < VECT.length; x++)
			if (VECT[x] != null)
				System.out.println(VECT[x]);
	}

	static void ImprimeMatriz(String MAT[][])
	{
		String Renglon = "";

		for (int r = 0; r < MAT.length; r++)
		{
			Renglon = "";
			for (int c = 0; c < MAT[0].length; c++)
				if (MAT[r][c] != null)
					Renglon += "\t\t" + MAT[r][c];
			System.out.println(Renglon);
		}	
	}
}