04-01-2016, 12:04
Código PHP:
package p4;
import p4.Matrices;
import utilidades.Teclado;
public class ProcesarArrays {
// PRÁCTICA 4 EJERCICIO 1 ............................................................
public static void invertir(int a []){
if(a!=null){
int b[] = new int [a.length];
int j=a.length-1;
for(int i=0;i<a.length;i++){
b[j--]=a[i];
}
System.out.print("La matriz inversa de (");
for(int i=0;i<a.length;i++){
System.out.print(a[i]+ " ");
}
System.out.print(") es (");
for(int i=0;i<b.length;i++){
System.out.print(b[i]+ " ");
}
System.out.println(")");
}else System.out.println("El elemento de entrada es NULL");
if(a.length==0) System.out.println("El elemento de entrada es de dimension 0");
}
// PRÁCTICA 4 EJERCICIO 2..........................................................
public static int [] ordenar(int [] a, boolean ascendente){
int b[]= new int [a.length];
int aux;
if(a==null) return null;
for(int g=0;g<a.length;g++){
b[g]=a[g];
}
if(ascendente==true){
for(int i=0;i<b.length-1;i++){
for(int j=0;j<b.length-1-i;j++){
if(b[j]>b[j+1]){
aux=b[j];
b[j]=b[j+1];
b[j+1]=aux;
}
}
}
}else{
for(int i=0;i<b.length-1;i++){
for(int j=0;j<b.length-1-i;j++){
if(b[j]<b[j+1]){
aux=b[j];
b[j]=b[j+1];
b[j+1]=aux;
}
}
}
}
return b;
}
// PRÁCTICA 4 EJERCICIO 3.....................................................
public static boolean hayRepetidos(int a []){
if(a==null || a.length==1) return false;
for(int i=0;i<a.length;i++){
for(int j=i+1;j<a.length;j++){
if(a[i]==a[j]) return true;
}
}
return false;
}
// PRÁCTICA 4 EJERCICIO 4.......................................................
public static int cuentaOcurrencias(int [] a, int k){
if(a.length==0) return 0;
int z=0;
for(int i=0;i<a.length;i++){
if(a[i]==k) z++;
}
return z;
}
public static int [] eliminarK(int [] a, int k){
if(a.length==0){
int b[]= new int [0];
return b;
}
if(a == null) return null;
int b[]= new int [a.length-cuentaOcurrencias(a,k)];
int j=0;
for(int i=0;i<a.length;i++){
if(a[i]!=k) b[j++]=a[i];
}
return b;
}
// PRÁCTICA 4 EJERCICIO 5.................................................
public static int [] ordenarIndices (char [] s){
if(s==null) return null;
if(s.length == 0){
int b[]= new int[0];
return b;
}
char t[] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','ñ','o','p','q','r','s','t','u','v','w','x','y','z'};
int b[] = new int [s.length];
for(int i=0;i<s.length;i++){
for(int j=0;j<t.length;j++){
if(s[i] == t[j]) b[i]=j;
}
}
return b;
}
// PRÁCTICA 4 EJERCICIO 6....................................................
public static int [] busquedaBinaria (int [] a, int clave){
if(a==null) return null;
for(int i=0;i<a.length-1;i++){
if(a[i]>a[i+1]) return null;
}
int z = cuentaOcurrencias(a,clave);
if(z==0) return null;
int b[]= new int [2];
//int contador=0;
//boolean prim=true;
int bajo = 0;
int alto = a.length -1;
int medio;
while (bajo <= alto) {
medio = (bajo + alto) / 2;
if (clave == a[medio]) { // se encontró
b[0]=medio;
b[1]=medio;
if(a[medio-1]== clave){
b[0] = medio -1;
b[1] = medio;
}
if(a[medio+1]==clave){
b[0]=medio;
b[1]=medio+1;
}
//System.out.println ("Está en " + medio);
//break;
return b;
}
else if (clave < a[medio]){
alto = medio - 1;
}
else {
bajo = medio + 1;
}
}
return b;
}
// PRÁCTICA 4 EJERCICIO 7....................................................
public static int busquedaBinariaRecursiva(int [] a, int clave){
if(a==null) return -1;
for(int i=0;i<a.length-1;i++){
if(a[i]>a[i+1]) return -1;//devuelve -1 si no está ordenada de menor a mayor
}
int z = cuentaOcurrencias(a,clave);
if(z>1) return -1;//devuelve -1 si hay elementos repetidos
int bajo = 0;
int alto = a.length -1;
int medio,tmp;
if(bajo <= alto){
}
while (bajo <= alto) {
medio = (bajo + alto) / 2;
if (clave == a[medio]) { // se encontró
//System.out.println ("Está en " + medio);
//break;
return tmp;
}
else if (clave < a[medio]){
alto = medio - 1;
}
else {
bajo = medio + 1;
}
}
}
// PRÁCTICA 4 EJERCICIO 8.....................................................
/**
* Devuelve un matriz resultado de haber eliminado la fila
* n-ésima de la matriz m pasada como argumento.
* @param m matriz
* @param n número de fila
* @return matriz resultado de haber eliminado la fila
* n-ésima de la matriz m pasada como argumento.
* null si m no es matriz o no existe la fila.
*/
public static double [][] quitarFila(double [][] m, int n){
if(Matrices.esMatriz(m)==false) return null;
if(n>=m.length || n<0) return null;
double b [][] = new double [m.length-1][m[0].length];
if(n==m.length-1){
for(int i=0;i<m.length-1;i++){
for(int j=0;j<m[i].length;j++){
//System.out.println(i);
//System.out.println(j);
b[i][j] = m[i][j];
}
}
}else{
int h=0;
for(int i=0;i<m.length;i++){
if(i != n){
for(int j=0;j<m[i].length;j++){
b[h][j] = m[i][j];
}
h++;
}
}
}
return b;
}
// PRÁCTICA 4 EJERCICIO 9.....................................................
/**
* Devuelve un matriz resultado de haber eliminado la
* n-ésima columna de la matriz m pasada como argumento.
* @param m matriz
* @param n columna
* @return matriz resultado de haber eliminado la
* n-ésima columna de la matriz m pasada como argumento..
* null si m no e matriz o no existe la columna.
*/
public static double [][] quitarCol(double [][] m, int n){
if(Matrices.esMatriz(m)==false) return null;
if(n>=m.length || n<0) return null;
double b [][] = new double [m.length][m[0].length-1];
int h=0;
if(n==0){
//System.out.println("if 1º");
for(int i=0;i<m.length;i++){
h=0;
for(int j=1;j<m[i].length;j++){
b[i][h++]=m[i][j];
}
}
}else if(n==m[0].length-1){
//System.out.println("if 2");
for(int i=0;i<m.length;i++){
for(int j=0;j<m[i].length-1;j++){
b[i][j] = m[i][j];
}
}
}else{
//h=0;
//System.out.println("el else");
for(int i=0;i<m.length;i++){
h=0;
for(int j=0;j<m[i].length;j++){
if(j != n){
b[i][h++] = m[i][j];
}
}
}
}
return b;
}
// PRÁCTICA 4 EJERCICIO 10......................................................
/**
* Dado un determinante de orden n, se llama menor complementario del
* elemento aij, al determinante de orden n-1 que resulta de suprimir
* en el determinante dado la fila i-ésima y la columna j-ésima.
* @param m determinante de orden n
* @param i índice de fila (aij)
* @param j índice de columna (aij)
* @return array de dos dimensiones con los elementos del menor complementario de m.
* null si m no es matriz o i y j no representan una fila y columna válidas.
*/
public static double [][] getMenorComplementario (double [][] m, int i, int j){
if(Matrices.esMatriz(m)==false) return null;
return quitarFila(quitarCol(m,j),i);
}
public static void resultado(int a[], int b[]){
for(int v=0;v<a.length;v++){
System.out.print(a[v]+ " ");
}
System.out.print("--a--> ");
for (int n=0;n<b.length;n++){
System.out.print(b[n]+ " ");
}
System.out.println("");
}
public static void resultado(char a[], int b[]){
for(int v=0;v<a.length;v++){
System.out.print(a[v]+ " ");
}
System.out.print("--a--> ");
for (int n=0;n<b.length;n++){
System.out.print(b[n]+ " ");
}
System.out.println("");
}
public static void main(String[] args) {
int h[]={4,23,45,13,45,3,1};
int h2[] = {0,1,1,3,4,5,13,13,20,22,40,42,42,42,44};
char x[]= {'a','l','f','o','n','s','o'};
int op,s;
do{
System.out.println("1. Invertir matriz");
System.out.println("2. Orden ascentende");
System.out.println("3. Orden descendente");
System.out.println("4. Elementos repetidos?");
System.out.println("5. Eliminar elemento");
System.out.println("6. Ordenar índices");
System.out.println("7. Búsqueda binaria");
System.out.println("8. salir");
op = Teclado.readInt();
switch (op){
case 1:
System.out.println("Invertir matriz");
invertir(h);
break;
case 2:
System.out.println("Orden ascendente:");
int j[]=ordenar(h,true);
for(int v=0;v<j.length;v++){
System.out.print(h[v]+ " ");
}
System.out.print("--a--> ");
for (int n=0;n<j.length;n++){
System.out.print(j[n]+ " ");
}
System.out.println("");
break;
case 3:
System.out.println("Orden descendente");
int k[]=ordenar(h,false);
resultado(h,k);
break;
case 4:
System.out.println("Elementos repetidos: "+ hayRepetidos(h));
break;
case 5:
System.out.print("Elemento a eliminar: ");
s = Teclado.readInt();
resultado(h,eliminarK(h,s));
case 6:
System.out.println("Ordenar índices");
resultado(x,ordenarIndices(x));
case 7:
System.out.print("Introduce clave a buscar: ");
s = Teclado.readInt();
resultado(h2,busquedaBinaria(h2,s));
}
}while(op<8);
}
}
Código PHP:
package p4;
import java.text.DecimalFormat;
public class Matrices {
/**
* Comprueba si un array de dos dimensiones es matriz.
* m != null && m[i] != null para i= 0..m.length-1 && m[i].length = m.length, i = 0..length-1
* @param m array bidimensional a comprobar
* @return true si m es matriz, false si no lo es.
*/
public static boolean esMatriz(double [][] m){
if (m == null){
return false;
}
if (m.length == 0){
return true;
}
for (int i = 0; i < m.length; i++){
if (m[i] == null){
return false;
}
if (m[i].length != m[0].length){
return false;
}
}
return true;
}
/**
* Comprueba si un array de dos dimensiones es matriz cuadrada.
* m es matriz && m.length == m[0].length
* @param m array bidimensional a comprobar
* @return true si m es matriz cuadrada, false si no lo es.
*/
public static boolean esMatrizCuadrada(double [][] m){
if (!esMatriz(m)){
return false;
}
if (m.length == 0){
return true;
}
if (m.length == m[0].length){
return true;
}
return false;
}
/**
* Devuelve la traspuesta de una matriz dada
* @param m matriz
* @return traspuesta de m
* null si m no es matriz.
*/
public static double [][] traspuesta(double [][] m){
if (!esMatriz(m)){
System.out.println("traspuesta: no es matriz: retorna null");
return null;
}
double [][] tr = new double[m[0].length][m.length];
for (int i = 0; i < tr.length; i++){
for (int j = 0; j < tr[i].length; j++){
tr[i][j] = m[j][i];
}
}
return tr;
}
/**
*
* Para depuración.
*
* Imprime en consola la matriz representada por m.
* @param p polinomio.
*/
public static void printMatriz(double [][] m){
if (!esMatriz(m)){
System.out.println("no es matriz");
return;
}
// Representación de los números con dos decimales.
DecimalFormat form = new DecimalFormat();
form.setMaximumFractionDigits(2);
String [][] ms = new String[m.length][m[0].length];
// Por cada columna apuntamos el elemento que más ocupa para
// ajustar la anchura de la columna en todas las filas.
int [] anchoCol = new int[m[0].length];
for (int i = 0; i < anchoCol.length; i++){
anchoCol[i] = 0;
}
// Obtenemos las representaciones de los números con dos decimales
// y apuntamos los anchos de columna.
for (int i = 0; i < ms.length; i++){
for(int j = 0; j < ms[i].length; j++){
ms[i][j] = form.format(m[i][j]);
if (anchoCol[j] < ms[i][j].length()){
anchoCol[j] = ms[i][j].length();
}
}
}
// Reconstruimos los elementos de ms ajustando las columnas y añadiendo
// blancos de separación entre columnas.
for (int i = 0; i < ms.length; i++){
for(int j = 0; j < ms[i].length; j++){
// Ajustar
while (ms[i][j].length() < anchoCol[j]){
ms[i][j] = " " + ms[i][j];
}
// Añadir separación.
ms[i][j] = ms[i][j] + " ";
}
}
// Imprimimos
for (int i = 0; i < ms.length; i++){
for (int j = 0; j < ms[i].length; j++){
System.out.print(ms[i][j]);
}
System.out.println();
}
}
/**
* Compara dos arrays de double
* @param m1 array 1
* @param m2 array 2
* @return true si son iguales elemento a elemento o si ambas referencias son null
* false en caso contrario.
*/
public static boolean compararMatrices(double [][] m1, double [][] m2){
if (m1 == null && m2 == null){
return true;
}
if (!esMatriz(m1) || !esMatriz(m2) ){
return false;
}
if (m1 == m2){
return true;
}
if (m1.length != m2.length){
return false;
}
if (m1[0].length != m2[0].length){
return false;
}
for (int i = 0; i < m1.length; i++){
for(int j = 0; j < m1[i].length; j++){
if (m1[i][j] != m2[i][j]){
return false;
}
}
}
return true;
}
/**
*
* Para depuración.
*
* Imprime en consola los elementos de un array de doubles.
* @param a array.
*/
public static void printArray(double [] a){
if (a == null){
System.out.print("null");
return;
}
System.out.print("{");
if (a.length == 0){
System.out.print("}");
return;
}
DecimalFormat form = new DecimalFormat();
form.setMaximumFractionDigits(3);
for (int i = 0; i < a.length-1; i++){
System.out.print(form.format(a[i]) + ", ");
}
System.out.print(form.format(a[a.length-1]) + "}");
}
/**
*
* Para depuración.
*
* Coloca en un array de Strings las filas de m.
* @param m matriz.
* @return array de Strings las filas de m.
* null si m no representa a una matriz.
*/
public static String [] matrizToStringArray(double [][] m){
if (!Matrices.esMatriz(m)){
return null;
}
String [] filas = new String[m.length];
// Representación de los números con dos decimales.
DecimalFormat form = new DecimalFormat();
form.setMaximumFractionDigits(3);
String [][] ms = new String[m.length][m[0].length];
// Por cada columna apuntamos el elemento que más ocupa para
// ajustar la anchura de la columna en todas las filas.
int [] anchoCol = new int[m[0].length];
for (int i = 0; i < anchoCol.length; i++){
anchoCol[i] = 0;
}
// Obtenemos las representaciones de los números con dos decimales
// y apuntamos los anchos de columna.
for (int i = 0; i < ms.length; i++){
for(int j = 0; j < ms[i].length; j++){
ms[i][j] = form.format(m[i][j]);
if (anchoCol[j] < ms[i][j].length()){
anchoCol[j] = ms[i][j].length();
}
}
}
// Reconstruimos los elementos de ms ajustando las columnas y añadiendo
// blancos de separación entre columnas.
for (int i = 0; i < ms.length; i++){
for(int j = 0; j < ms[i].length; j++){
// Ajustar
while (ms[i][j].length() < anchoCol[j]){
ms[i][j] = " " + ms[i][j];
}
// Añadir separación.
ms[i][j] = ms[i][j] + " ";
}
}
// Copiamos;
for (int i = 0; i < ms.length; i++){
StringBuffer sb = new StringBuffer();
for (int j = 0; j < ms[i].length; j++){
sb.append(ms[i][j]);
}
filas[i] = sb.toString();
}
return filas;
}
public static void printTabla(String [][] ms){
// Por cada columna apuntamos el elemento que más ocupa para
// ajustar la anchura de la columna en todas las filas.
int [] anchoCol = new int[ms[0].length];
for (int i = 0; i < anchoCol.length; i++){
anchoCol[i] = 0;
}
// Obtenemos las representaciones de los números con dos decimales
// y apuntamos los anchos de columna.
for (int i = 0; i < ms.length; i++){
for(int j = 0; j < ms[i].length; j++){
if (ms[i][j] == null){
ms[i][j] = "null";
}
if (anchoCol[j] < ms[i][j].length()){
anchoCol[j] = ms[i][j].length();
}
}
}
// Reconstruimos los elementos de ms ajustando las columnas y añadiendo
// blancos de separación entre columnas.
for (int i = 0; i < ms.length; i++){
for(int j = 0; j < ms[i].length; j++){
// Ajustar
while (ms[i][j].length() < anchoCol[j]){
ms[i][j] = ms[i][j] + " ";
}
// Añadir separación.
ms[i][j] = ms[i][j] + " ";
}
}
// Imprimimos
for (int i = 0; i < ms.length; i++){
for (int j = 0; j < ms[i].length; j++){
System.out.print(ms[i][j]);
}
System.out.println();
}
}
}
"Que yo sepa, el español medio no es más honrado que los políticos que lo gobiernan"