Ayuda con Ejercicio

Publicado en 'Programación' por celsoxvi, 11 May 2011.





  1. celsoxvi

    celsoxvi Miembro de bronce

    Registro:
    1 Mar 2009
    Mensajes:
    1,196
    Likes:
    72




    Bueno, tengo una pequeña duda con Programacion en java, me piden Utilizando una Matriz de 3x3, Ayar la suma de los Extremos y en forma de cruz por ejemplo

    12 11 13
    12 12 13
    14 15 16

    Por ejemplo ahí lo extremos son 12, 13,14,16

    y hay otro en forma de cruz.

    12 11 13
    12 12 13
    14 15 16

    Esta es la primera vez que pido ayuda en programación :(, Para la segunda tengo mas o menos una idea y es Divir el valor de la Array entre 3, Por ejemplo Para las Columnas 2/3 que equivale a 1, y para las Columnas lo mismo y que haga el recorrido, pero haber ustedes tal vez alguien tiene la idea :D, Gracias.
     


  2. Tr4ck3r

    Tr4ck3r Miembro nuevo

    Registro:
    23 May 2009
    Mensajes:
    33
    Likes:
    1
    Hola, no entiendo que es lo q quieres hacer. Para matriz si estas usando un arreglo bidimensional solamente llama al objeto de la posicion q corresponde.

    matriz[0][0]+matriz[0][2]+matriz[2][0]+matriz[2][2]
     
  3. celsoxvi

    celsoxvi Miembro de bronce

    Registro:
    1 Mar 2009
    Mensajes:
    1,196
    Likes:
    72
    Claro, Así también lo he estado haciendo pero digamos, que se ponga una matriz por ejemplo de 5x5 o de 7x7 o de 9x9, La cosa es hacerlo con el For y con Condiciones, ya agarre un poco la idea haber mas tarde publico mis avances tal vez a alguien le sirva. pero haber idea para terminarlo poco no estaría mal :D
     
  4. tenguman

    tenguman Miembro de plata

    Registro:
    15 Nov 2010
    Mensajes:
    3,142
    Likes:
    1,016
    puedes intentar esto

    int ancho = 5;
    int alto = 5;

    Object sumaExtremos = matriz[0][0] + matriz[0][ancho] + matriz[alto][0] + matriz[alto][ancho];

    Object sumaInternos=0;

    for(int i=0;i<ancho;i++)
    { for(int j=0;j<alto;j++)
    { sumaInternos= sumaInternos + matriz[j]
    }
    }
    sumaInternos = sumaInternos - sumaExtremos;
     
    Última edición: 12 May 2011
  5. celsoxvi

    celsoxvi Miembro de bronce

    Registro:
    1 Mar 2009
    Mensajes:
    1,196
    Likes:
    72
    Bueno hoy día me tome la molestia de comenzar a programar, así que aquí les dejo tal vez a alguien le servirá. lo bueno es Compartir

    Clase Operaciones;
    PHP:
    /*
     * Team CoreJ4
     * Autor: Guzman Diaz Celso
     */
    import javax.swing.*;
    public class 
    Operaciones {
        private 
    int filas 3;
        private 
    int columnas 3;
        private 
    int Matriz[][] = new int [filas][columnas];

        
    //Metodo Ingreso de Datos
        
    public void ingresoDatos(){
            
    int i;
            
    int j;
            for(
    i=0;i<filas;i++){
                for(
    j=0;j<columnas;j++){
                    
    Matriz[i][j]=Integer.parseInt(JOptionPane.showInputDialog("Ingresa Valor de Matriz: "+i+","+j));
                }
            }
        }

        
    //Metodo Suma Diagonal Primaria
        
    public void sumaDiagonalPrimaria(){
            
    int AcumuSuma=0;
            
    int i;
            
    int j;
            for(
    i=0;i<filas;i++){
                for(
    j=0;j<columnas;j++){
                    if(
    i==j)
                        
    AcumuSuma=AcumuSuma+Matriz[i][j];
                }
            }
            
    JOptionPane.showMessageDialog(null"La Suma Diagonal Primaria Es: "+AcumuSuma);
        }

        
    //Metodo Suma Diagonal Secundaria
        
    public void sumaDiagonalSecun(){
            
    int i;
            
    int sumaIndices;
            
    int j;
            
    int Acumulador=0;
            
    int nFilas=filas-1;
            for(
    i=0;i<filas;i++){
                for(
    j=0;j<columnas;j++){
                    
    sumaIndices=i+j;
                    if(
    sumaIndices==nFilas){
                        
    Acumulador=Acumulador+Matriz[i][j];
                    }
                }
            }
            
    JOptionPane.showMessageDialog(null"La Suma Diagonal Secundaria Es: "+Acumulador);
        }

        
    //Metodo Suma de Valores Extremos
        
    public void sumaValoresExtre(){
            
    int primerValor=0;
            
    int segundoValor=0;
            
    int tercerValor=0;
            
    int cuartoValor=0;
            
    int nColumnas=columnas-1;
            
    int nFilas=filas-1;
            
    int i;
            
    int j;
            
    int sumaTotal=0;
            for(
    i=0;i<filas;i++){
                for(
    j=0;j<columnas;j++){
                    if(
    i==&& j==0)
                    {
                        
    primerValor=Matriz[i][j];
                    }
                    if(
    i==&& j==nColumnas)
                    {
                        
    segundoValor=Matriz[i][j];
                    }
                    if(
    i==nFilas && j==0)
                    {
                        
    tercerValor=Matriz[i][j];
                    }
                    if(
    i==nFilas && j==nColumnas)
                    {
                        
    cuartoValor=Matriz[i][j];
                    }
                    
    sumaTotal=primerValor+segundoValor+tercerValor+cuartoValor;
                }
            }
            
    JOptionPane.showMessageDialog(null"La Suma de los Valores Extremos Es: "+sumaTotal);
        }

        
    //Metodo Suma en Cruz
        
    public void sumaCruz(){
            
    int i;
            
    int j;
            
    int mitadFila=filas/2;
            
    int mitadColumna=columnas/2;
            
    int primerAcumulador=0;
            
    int segundoAcumulador=0;
            
    int sumaTotal;
            for(
    i=0;i<filas;i++){
                for(
    j=0;j<columnas;j++){
                    if(
    i==mitadFila){
                        
    primerAcumulador=primerAcumulador+Matriz[i][j];
                    }
                    if(
    j==mitadColumna){
                        
    segundoAcumulador=segundoAcumulador+Matriz[i][j];
                    }
                }
            }
            
    sumaTotal=primerAcumulador+segundoAcumulador;
            
    JOptionPane.showMessageDialog(null"La Suma en Cruz Es: "+sumaTotal);
        }
    }
    Clase Main
    PHP:
    /*
     * Team CoreJ4
     * Autor: Guzman Diaz Celso
     */
    import javax.swing.*;
    public class 
    Principal {
        public static 
    void main(String[] args) {
            
    int n1;
            
    Operaciones JuegoOP = new Operaciones();
            do{
            
    n1=Integer.parseInt(JOptionPane.showInputDialog("Ingresa La Opcion:\n1.-Ingresa los Numeros\n2.-Suma Diagonal Primaria\n3.-Suma Diagonal Secundaria\n4.-Suma En Cruz\n5.-Valores Extremos\n6.-Exit"));
            switch(
    n1){
                case 
    1:
                    
    //Ingreso de Numeros
                    
    JuegoOP.ingresoDatos();
                    break;
                case 
    2:
                    
    //Suma Diagonal Primaria
                    
    JuegoOP.sumaDiagonalPrimaria();
                    break;
                case 
    3:
                    
    //Suma Diagonal Secundaria
                    
    JuegoOP.sumaDiagonalSecun();
                    break;
                case 
    4:
                    
    //Suma en Cruz
                    
    JuegoOP.sumaCruz();
                    break;
                case 
    5:
                    
    //Suma de Valores Extremos
                    
    JuegoOP.sumaValoresExtre();
                    break;
                case 
    6:
                    
    //Salir
                    
    System.exit(0);
                default: 
    JOptionPane.showMessageDialog(null"Ingresa Opcion del Menu");
            }
            }while(
    n1!=6);
        }
    }
    Dale Clic al ME GUSTA si te gusto :D (Valga la Redundancia :D) TEMA CERRADO.
     
    Última edición: 15 May 2011
  6. tenguman

    tenguman Miembro de plata

    Registro:
    15 Nov 2010
    Mensajes:
    3,142
    Likes:
    1,016
    te complicas demasiado la vida...

    en la primera funcion no es necesario usar dos for, solo basta q calcules cual es el numero menor y luego usar un for basado en el menor donde AcumuSuma=AcumuSuma+Matriz; (xq siempre preguntas valores iguales en if(i==j) ),

    en el segundo caso de igual manera, calcula el menor valor y luego usa un for, y para obtener tus valores utiliza Acumulador=Acumulador+Matriz[minimo-i]; (debido a que i + minimo - i te debe dar minimo no?),

    en el tercer caso, para q realizas dos for, si sabes de antemano que tu arreglo es bidimensional y SIEMPRE tendra 4 valores extremos, ya tienes el ancho y el alto... para q recorrer el arreglo?

    en el cuarto caso... q pasa si el numero de filas o columnas no se puede dividir entre dos? como comente en el post anterior, en este caso si es necesario realizar el doble for, xq necesitas todos los valores, pero para evitar en cada ciclo preguntar con el if (lo cual elevaria el tiempo de procesamiento) mejor realizar la suma total y le restas el valor de la funcion anterior (que ya habrias calculado)...

    recuerda, realizar bucles de estructuras SIEMPRE trae como consecuencia una menor performance en el tiempo de procesamiento (el tiempo seria filas * columnas, si digamos filas = 1000 y columnas = 100, el tiempo de procesamiento se elevaria a 100000 * tiempo de sentencias dentro del bucle, digamos q sea este ultimo 0.5 segundos, al final demorarias 50000 segundos = 833.33 minutos = 13.88 horas ¬¬)... si necesitas buscar valores te recomiendo el uso de mapas si te encuentras en java...
     
    Última edición: 15 May 2011
  7. celsoxvi

    celsoxvi Miembro de bronce

    Registro:
    1 Mar 2009
    Mensajes:
    1,196
    Likes:
    72
    1) Estoy haciendo la Suma en Diagonal Primaria, por eso pregunto si los indices son. Por ejemplo 0,0 , 1,1 eso se acumula

    2) No entendí bien pero bueno, Yo ahí estoy haciendo la suma Diagonal Secundaria y tu sabes que la suma de indices dará el numero de filas. y lo tengo que calcular desde ahí

    3) Bueno en eso si te doy la razón, jejeje es que tampoco me gusta copiar código y me gusta implementarlo a mi manera, pero ya vi cual era mi error :D.

    4) Ahí solo la suma en cruz funcionara con números impares nada mas, ahí falta condicionar el ingreso de Números.

    Pues nada gracias por hacerme ver algunos pequeños detalles, estoy llevando recién vectores y matrices :D, Algún buen libro que me recomiendes a parte de Deitel.
     
  8. erickxls

    erickxls Miembro maestro

    Registro:
    13 Set 2008
    Mensajes:
    842
    Likes:
    15
    respecto a tu diagonal primaria no es necesario hacer dos for con uno basta
    PHP:
    m[n][n];
    suma=0;
    for(
    int i=0;i<n;i++)
    suma+=m[i][i]
     
    Última edición: 15 May 2011