viernes, 30 de diciembre de 2011

Multiplicación de matrices:





Multiplicación de matrices
Definición de matriz: En matemáticas, una matriz es un arreglo bidimensional de números, y en su mayor generalidad de elementos de un anillo. Las matrices se usan generalmente para describir sistemas de ecuaciones lineales, sistemas de ecuaciones diferenciales o representar una aplicación lineal (dada una base). Las matrices se describen en el campo de la teoría de matrices.

Pueden sumarse, multiplicarse y descomponerse de varias formas, lo que también las hace un concepto clave en el campo del álgebra lineal.
(Por wikipedia).

Mas informacion sobre multiplicacion de matrices aqui.

Hosting

Codigo:

//Autor: Rey Salcedo Padilla
class MultiplicacionMatrices{
 
 //Me extrae una fila dada de una matriz en forma de vector (arreglo)
 public static int []filaMatriz(int [][]matriz, int fila){
  int []arregloAuxiliar = new int[matriz[fila].length];
  for(int i = 0; i < arregloAuxiliar.length; i++){
   arregloAuxiliar[i] = matriz[fila][i];
  }
  return arregloAuxiliar;
 }
 
 //Me extrae una columna dada de una matriz en forma de vector (arreglo)
 public static int []columnaMatriz(int [][]matriz, int columna){
  int []arregloAuxiliar = new int[matriz.length];
  for(int i = 0; i < arregloAuxiliar.length; i++){
   arregloAuxiliar[i] = matriz[i][columna];
  }
  return arregloAuxiliar;
 }
 
 //Me devuelve el valor de una celda segun la multiplicacion de dos matrices
 public static int valorCelda(int [][]matrizA, int [][]matrizB, int fila, int columna){
  int suma = 0;
  /*
  Tomo la fila de la primera matriz y la columna de la segunda matriz,
  para posteriormente multiplicar celda por celda
   */
  int []filaMatrizA = filaMatriz(matrizA, fila);
  int []columnaMatrizB = columnaMatriz(matrizB, columna);  
  
   for(int i = 0; i < filaMatrizA.length; i++){
    
    /*
     * Aqui valido que la longitud de ambos vectores sean iguales,
     * en terminos mas acordes, que el numero de columnas de la primera matriz,
     * sea igual al numero de filas de la segunda matriz    
    */
    
    if(filaMatrizA.length == columnaMatrizB.length){
    suma += filaMatrizA[i] * columnaMatrizB[i];
    }else{
     System.out.println("El numero de columnas de la primera matriz es diferente al numero de filas de la segunda matriz");
     break;   
    }      
   }  
    
  return suma;
   }
   
   //Me devuelve una matriz, producto de la multiplicacion de dos matrices
 public static int [][]multiplicacionMatriz(int [][]matrizA, int [][]matrizB){
  int [][]matrizAuxiliar = new int[matrizA.length][matrizA[0].length];
  for(int i = 0; i < matrizA.length; i++){
   for(int j = 0; j < matrizA[i].length; j++){
    matrizAuxiliar[i][j] = valorCelda(matrizA, matrizB, i, j);     
   }
  }
  return matrizAuxiliar; 
 }
 //imprime los valores de una matriz
 public static void imprimirMatriz(int [][]matriz){
  System.out.println("-------------------------------");
  for(int i = 0; i < matriz.length; i++){
   for(int j = 0; j < matriz[i].length; j++){
    System.out.print(matriz[i][j]+"\t");
   }
   System.out.println();
  }
  System.out.println("-------------------------------");
 }
 
 //imprime el procedimiendo de la 'matriz de recorrido' de una matriz
 public static void main(String []args){
  /*
  Nota importante:
  - Sean las matrices A y B; A tenga el mismo número de columnas que B de filas para que  exista A*B
  - Sean las matrices B y A; B tenga el mismo número de columnas que A de filas para que  exista A*B
  */
  int [][]matrizA ={{1,0,0,1},
        {1,4,0,1},
        {1,9,0,11},
        {1,5,6,0}};
        
  int [][]matrizB ={{11,0,0,1},
        {1,8,0,1},
        {0,9,0,5},
        {1,7,6,0}};
  
  System.out.println("Matriz A");      
  imprimirMatriz(matrizA);
  
  System.out.println("Matriz B");      
  imprimirMatriz(matrizB);
  
  System.out.println("Matriz A * Matriz B");   
  imprimirMatriz(multiplicacionMatriz(matrizA,matrizB));
  
  
  //Note que si A y B son diferentes A*B diferente de B*A (A*B <> B*A)
  System.out.println("Matriz B * Matriz A");   
  imprimirMatriz(multiplicacionMatriz(matrizB,matrizA));
 }

}


Comenta acerca del código.




jueves, 8 de diciembre de 2011

Implementacion de una lista simple enlazada.





Tal vez le interese leer también sobre pilas y colas
Definición auspiciada por Wikipedia: una lista enlazada es una de las estructuras de datos fundamentales, y puede ser usada para implementar otras estructuras de datos. Consiste en una secuencia denodos, en los que se guardan campos de datos arbitrarios y una o dos referencias (punteros) al nodo anterior o posterior.




Generalmente se usa una lista enlazada cuando no sabemos de antemano en numero de datos u objetos que queremos almacenar; personalmente uso en estos caso como lista un ArrayList.
Humildemente implemento en tres clases una lista sin hace uso de ninguna librería especificada por la sentencia import; espero les guste y les sirva.




//Autor: Rey Salcedo
 public class Nodo{

 private Object dato;
 private Nodo nodo;
 
 public Nodo(){
  dato = null;
  Nodo nodo = null;
 }
 public Nodo(Object dato){
  this();
  this.dato = dato;  
 }
 public void setDato(Object dato){
  this.dato = dato;
 }
 
 public Object getDato(){
  return dato;
 }
 
 public void setNodo(Nodo nodo){
  this.nodo = nodo;
 }
 
 public Nodo getNodo(){
  return nodo;
 } 
}





//Autor: Rey Salcedo
 public class Lista{
 private Nodo cabecera;
 private int tamaño;
 
 public Lista(){
  tamaño = 0;
  cabecera = new Nodo();
 }
 
 public int getTamaño(){
  return tamaño;
 }
 
 public boolean addDato(Object dato){
  Nodo nodoUltimo = getUltimoNodo();
  if(dato != null && nodoUltimo != null){
   nodoUltimo.setNodo(new Nodo(dato));
   tamaño ++;
   return true;
  }else{
   return false;
  }
 }
 
 private Nodo getUltimoNodo(){
  Nodo nodoUltimo = null;
  if(cabecera != null){
   nodoUltimo = cabecera;
   while(nodoUltimo.getNodo() != null){
    nodoUltimo = nodoUltimo.getNodo();
   }
  }
  return nodoUltimo;
 } 
 
 public Object getDato(int pos){
  Nodo nodoUltimo = null;
  int contador = 0;
  Object dato = null;
  if(cabecera != null){
   nodoUltimo = cabecera;
   do{
    nodoUltimo = nodoUltimo.getNodo();
    if(contador == pos){
     dato = nodoUltimo.getDato();
     break;
    }else{
     contador++;
    }   
   }while(nodoUltimo.getNodo() != null);
  }
  return dato;
 }
}





//Autor: Rey Salcedo
 public class Main{
 public static void main(String []args){
  Lista lista = new Lista();
  
  //Adjuntando datos
  lista.addDato("Hola");
  lista.addDato("mundo");
  lista.addDato("aqui");
  lista.addDato("estoy");
  
  System.out.println("-------Imprimiendo datos-------");
  
  for(int i = 0;i < lista.getTamaño();i ++){
   System.out.println(lista.getDato(i));
  }
 }
}

Tal vez también te interese: Implementacion de pila y cola.



domingo, 9 de octubre de 2011

Resultados ejercicio 3

Resultados ejercicio 2

Resultados ejercicio 1


//Por admin
class ejemplo1{
public static void main(String []args){
int a = 5;
int b = 3;


//intercambiando valores
a = a + b;
b = a - b;
a = a - b;


//Imprimiendo
System.out.println("a = "+a);
System.out.println("b = "+b);
}
}
*********************************************************
Hola, favor usar únicamente el vinculo mandar respuesta para darme a conocer su solución, las cuales publicaré junto con su respectivo autor.


ahhh, traten de resolverlos ustedes mismo sin buscar el google las respuestas.

1. Teniendo dos variables enteras a, y b; intercambiar sus valores sin hacer uso de variables auxiliares o temporales... mandar respuesta... ver resultados

2. Crear un método que me permita multiplicar dos numeros enteros positivos, pero este no debe usar el operador *, como tampoco debe usar ciclos... mandar respuesta... ver resultados

3. Crear un metodo que me permita saber si un numero entero positivo es par, sin hacer uso de ciclos ni usar el operador %... mandar respuesta... ver resultados

Usando Java

domingo, 25 de septiembre de 2011

Saber si dos números son amigos

Hosting
//Autor: Rey Salcedo
public class NumerosAmigos{
        public static long sumaDivisores(long numero){
                long retornado = 0;
                for(long i = 1;i < numero-1;i++){
                        if(numero % i == 0){
                                retornado += i;
                        }
                }
                return retornado;
        }
        public static boolean operacion(long n1, long n2){
                boolean retornado = false;
                if(sumaDivisores(n1) == n2 && sumaDivisores(n2) == n1){
                        retornado = true;
                }
                return retornado;                     
        }
        public static void main(String []args){
                long numero1 = 1184;
                long numero2 = 1210;
                if(operacion(numero1, numero2)){
                   System.out.println("Los numero "+ numero1 + " y "+ numero2+" son amigos");
                }else{
                   System.out.println("Los numero "+ numero1 + " y "+ numero2+" no son amigos");
                }
 
        }
}



Identificar si un numero es perfecto

Hosting
// Rey Salcedo
class perfecto {
    public static void main(String args[]) {
        int numero=6;
        int sumas=0;
        for(int i = 1;i < numero - 1;i++){
                if(numero % i == 0)
                    sumas += i;
                }
        if (sumas == numero) {
            System.out.println("El numero "+numero+" es un numero perfecto;");
        } else {
            System.out.println("El numero "+numero+" no es un numero perfecto;");
        }
    }
}



Ejercicios varios

La mayoría de los presentes no los documente, pero pueden hacer preguntas.


- Ver numeros en terminal de manera diferente.

Ver numero en terminal de manera diferente





class verNumeros{
 public static void cero(int linea){
  switch (linea){
   case 0: System.out.print("   OOO");break;
   case 1: System.out.print("   O O");break;
   case 2: System.out.print("   O O");break;
   case 3: System.out.print("   O O");break;
   case 4: System.out.print("   OOO");break;
  }
 }
 public static void uno(int linea){
  switch (linea){
   case 0: System.out.print("     O");break;
   case 1: System.out.print("   O O");break;
   case 2: System.out.print("     O");break;
   case 3: System.out.print("     O");break;
   case 4: System.out.print("     O");break;
  }
 }
 public static void dos(int linea){
  switch (linea){
   case 0: System.out.print("   OOO");break;
   case 1: System.out.print("     O");break;
   case 2: System.out.print("   OOO");break;
   case 3: System.out.print("   O  ");break;
   case 4: System.out.print("   OOO");break;
  }
 }
 public static void tres(int linea){
  switch (linea){
   case 0: System.out.print("   OOO");break;
   case 1: System.out.print("     O");break;
   case 2: System.out.print("   OOO");break;
   case 3: System.out.print("     O");break;
   case 4: System.out.print("   OOO");break;
  }
 }
 public static void cuatro(int linea){
  switch (linea){
   case 0: System.out.print("   O O");break;
   case 1: System.out.print("   O O");break;
   case 2: System.out.print("   OOO");break;
   case 3: System.out.print("     O");break;
   case 4: System.out.print("     O");break;
  }
 }
 public static void cinco(int linea){
  switch (linea){
   case 0: System.out.print("   OOO");break;
   case 1: System.out.print("   O  ");break;
   case 2: System.out.print("   OOO");break;
   case 3: System.out.print("     O");break;
   case 4: System.out.print("   OOO");break;
  }
 }
 public static void seis(int linea){
  switch (linea){
   case 0: System.out.print("   OOO");break;
   case 1: System.out.print("   O  ");break;
   case 2: System.out.print("   OOO");break;
   case 3: System.out.print("   O O");break;
   case 4: System.out.print("   OOO");break;
  }
 }
 public static void siete(int linea){
  switch (linea){
   case 0: System.out.print("   OOO");break;
   case 1: System.out.print("     O");break;
   case 2: System.out.print("     O");break;
   case 3: System.out.print("     O");break;
   case 4: System.out.print("     O");break;
  }
 }
 public static void ocho(int linea){
  switch (linea){
   case 0: System.out.print("   OOO");break;
   case 1: System.out.print("   O O");break;
   case 2: System.out.print("   OOO");break;
   case 3: System.out.print("   O O");break;
   case 4: System.out.print("   OOO");break;
  }
 }
 public static void nueve(int linea){
  switch (linea){
   case 0: System.out.print("   OOO");break;
   case 1: System.out.print("   O O");break;
   case 2: System.out.print("   OOO");break;
   case 3: System.out.print("     O");break;
   case 4: System.out.print("   OOO");break;
  }
 }
 public static void imprimir(String []numeros){
  for(int i = 0;i < 5;i++){
   for(int j = 0;j < numeros.length;j++){
    int num = Integer.parseInt(numeros[j]);
    switch(num){
     case 0: cero(i);break;
     case 1: uno(i);break;
     case 2: dos(i);break;
     case 3: tres(i);break;
     case 4: cuatro(i);break;
     case 5: cinco(i);break;
     case 6: seis(i);break;
     case 7: siete(i);break;
     case 8: ocho(i);break;
     case 9: nueve(i);break;
    }
   }
   System.out.println();
  }
 }
 public static void main(String []args){
  String []vector = {"1","9","8","2"};
  imprimir(vector);
 }
}

lunes, 31 de enero de 2011

Manipulando matrices.





public class Matriz{
  /* Las matrices son generalmente llamadas-
     arreglos bidimensionales*/
  public static void main(String []args){
     //creando y llenando matriz de manera implicita.
     int [][]matriz={{1,2,3,4,5,6},{7,8,9,10,11,12},{13,14,15,16,17,18},
             {19,20,21,22,23,24},{25,26,27,28,29,30}};
    /*Creamos la matriz con 5 filas y 6 columnas; 
     Esta matriz es regular (aunque no tiene porque serlo),
     pues cada fila tiene un numero igual de columnas.
     Asi se ve nuestra matriz:
     [ 1][ 2][ 3][ 4][ 5][ 6]
     [ 7][ 8][ 9][10][11][12]
     [13][14][15][16][17][18]
     [19][20][21][22][23][24]
     [25][26][27][28][29][30]

     nota: en java la posicion de las filas y columnas siempre-
           inician desde 0
    */
    for(int fila=0;fila < matriz.length;fila++){ *'matriz.length'="" *'matriz[fila].length'="" *="" *esta="" *llenando="" 0.="" 0="" 10][="" 1="" 20][="" 2="" 30][="" 3="" 40]="" 50][="" 5="" 60][="" 6="" 70]="" 80][="" 90]="" <="" [0]="" [0][0]="" [0][0][0][0][0]="" [100][110][120]="" [130]="" [="" [][]matriz2="{{10,20,30,40},{50,60,70},{80,90}," [][]matriz3="new" [][]matriz4="new" a="" asi="" asignamos="" automaticamente="" caso="" celda(s)-="" columna="0;columna<matriz[fila].length;columna++){" columnas*="" columnas.="" columnas="" compuestas="" con="" consecutivos*="" creando="" cuando="" da(n)="" da="" dada="" de="" despues="" e="" el="" en="" enter="" entero="" es="" escribir="" esta(s)="" esta="" estan="" este="" esto="" explicitamente="" fila.="" fila="" filas.="" filas="" for(int="" generar="" iguales.="" implicita.="" imprimimos.="" incremento="" inicializa(n)="" inicializando="" int="" int[1];="" int[2];="" int[3][5];="" int[3][];="" int[5];="" irregular,="" irregular="" java-="" la(s)="" la="" las="" le="" llenando="" lleno,="" manera="" matriz*="" matriz.="" matriz3[fila][columna]="numeros;" matriz4[0]="new" matriz4[1]="new" matriz4[2]="new" matriz4[fila][columna]="numeros;" matriz:="" matriz="" me="" no="" nos="" nota:="" nuestra="" nuevamente="" numero="" numeros++;="" numeros-="" numeros="0;" por="" pre="" pues="" que="" regular="" representa="" se="" son="" system.out.print(matriz2[fila][columna]+",");="" system.out.print(matriz3[fila][columna]+",");="" system.out.print(matriz4[fila][columna]+",");="" system.out.print(matriz[fila][columna]+",");="" system.out.println("------------");="" system.out.println();="" todas="" un="" una="" valor(es)="" ve="" vez="" y="" {100,110,120},{130}};="" }="">

viernes, 28 de enero de 2011

Un pequeño juego de azar.

Hosting
import java.util.Scanner;
public class JuegoAzar{
 public static void main(String args[]){
  Scanner in = new Scanner(System.in);
  int numero;
  int valor;
  int contador=0;
  boolean ganar=false;
  System.out.println("--------------------------------------");
  System.out.println("|         Bienvenido al juego        |");
  System.out.println("--------------------------------------");
  numero=1+(int)(Math.random()*100);
  System.out.println("En estos momentos se ha generado un numero comprendido entre-\n"+
                     "1 y 100, que usted debe adivinar");
  System.out.println("--------------------------------------");
   do{//este ciclo es tambien llamado repeat en otros lenguajes
     contador++;
     System.out.print("-Digite el numero ");
     valor = in.nextInt();//capturamos en numero digitado
      if(valor==numero){
       System.out.println("Felicitaciones, GANASTES con "+contador+" intentos");
       ganar=true;
      }else{
         String temp="";
         if(numero>valor){
          temp="mayor";
         }else{
          temp="menor";
         }
        System.out.println("El numero que intentas adivinar es "+temp+" que "+valor);
      }
   }while(contador<6 && ganar==false);//cerramos el ciclo 'do'
   //'contador<6' representa el numero de oportunidades del jugador
   if(ganar==false){
    System.out.println("Lo siento, no has adivinado, el numero era el "+numero);
   }
 }
}

Fibonacci recursivo.

Hosting
public class FibonacciRecursivo{
 public static long FiboRecursivo(long pos){
  long retornado=0;
  if(pos==0 || pos==1){
   retornado=pos;
  }else{
   retornado=FiboRecursivo(pos-2)+FiboRecursivo(pos-1);
  }
  return retornado;
 }
 public static void main(String args[]){
  System.out.println(FiboRecursivo(10));
 }
}



Buscando valores dentro de una matriz.





import java.util.Scanner;
public class BuscarEnMatriz{
 /*Llenaremos una matriz 10 X 10
   con numeros aleatorios del 1 al 100
   y buscaremos un valor dentro
   de la misma*/
 public static void main(String []args){
  Scanner in = new Scanner(System.in);
  int matriz[][]=new int[10][10];
  //llenamos nuestra matriz
  for(int filas=0;filas < matriz.length;filas++){
   for(int columnas=0;columnas < matriz[filas].length;columnas++){
    matriz[filas][columnas]=1+(int)(Math.random()*100);;
   }
  }
System.out.println();//damos un enter
System.out.println("---Esta es nuestra matriz");
  for(int filas=0;filas < matriz.length;filas++){
   for(int columnas=0;columnas < matriz[filas].length;columnas++){
    System.out.print(matriz[filas][columnas]+",");
   }
   System.out.println();//damos un enter
  }
System.out.println("---Digite un valor a buscar---");
int buscar = in.nextInt();
String coordenadas="";
//La busqueda es de manera iterativa y secuencial
  for(int filas=0;filas < matriz.length;filas++){
   for(int columnas=0;columnas < matriz[filas].length;columnas++){
    if(matriz[filas][columnas]==buscar){
     coordenadas+="["+filas+","+columnas+"]"+"\n";
     //'\n' me permite dar enter's(saltos de linea) dentro de la cadena;
    }
   }
  }

  if(coordenadas.equals("")){
   System.out.println("El valor "+buscar+" no existe en la matriz--");
  }else{
   System.out.println("El valor "+buscar+" esta en la(s) siguiente(s) coordenadas.");
   System.out.print(coordenadas);
  }
 }
}



Entrada destacada

Matriz de adyacencia para un grafo

"La matriz de adyacencia es una matriz cuadrada que se utiliza como una forma de representar relaciones binarias."; aunque pa...