// 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);
}
}
}