elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Matriz 3x3 imprimirla en espiral
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Matriz 3x3 imprimirla en espiral  (Leído 9,892 veces)
lluvplay

Desconectado Desconectado

Mensajes: 27



Ver Perfil
Matriz 3x3 imprimirla en espiral
« en: 5 Junio 2012, 04:33 am »

Buenas noches programadores, hace unos minutos una conocida me preguntaba lluvplay ! como ago para imprimir una matriz de 3X3 en forma de espiral, yo pense que iva hacer muy facil para mi pero al pasar de los minutos dije uffff lo que me costo, bueno el problema es el siguiente: yo logre al final imprimir la matriz en forma de espiral pero creo que mi codigo no es el mas optimo. El asunto esque quiero ver si alguien tiene un codigo mas obtimo que el mio para revisarlo y ojearlo !!! Obiamente mis poderes no son los mismo que cuando en verdad me exigian en la universidad

Ejemplo del problema: cargar una matriz 3x3 con random he imprimir en forma de espiral ejemplo:
matriz 3x3
123
456
789
Forma de espiral
1
12
123
    6
  56
456
7
78
789

Mi codigo fuente fue para imprimirlo en JTextArea asique solo pondre el codigo que concatena la variable String y luego la envia mediante el SetText(string); al JTextArea. espero sea un debate interezante !!


Código:
 int matriz[][]=new int[3][3];/// declaracion de la matriz
      int a,b; ///2 variables para el manejo de la matriz dentro del for
      String concatenar="\n-------Matriz 3x3-------\n";/// para imprimir en el JTextArea
      Random rand = new Random();/// declaracion del objeto de la clase Random
      ///llenamos la matriz con los numeros randon
      for(a=0;a<3;a++)
      {
             for(b=0;b<3;b++)
             {
             matriz[a][b]=rand.nextInt(9);// cargamos la matriz
             concatenar=concatenar+matriz[a][b]+",";// concatenamos la matriz para la impresion
             }//fin del for de la variable b
            concatenar=concatenar+"\n";/// concatenamos un salto de linea
      }//Fin del for de la variable a
      concatenar=concatenar+"\n---------------------\n";
      int x=0;
      a=0;
       while(a<3) //// solo para 3 x3 XD
           {
            for(b=0;b<=x;b++)
             {
             concatenar=concatenar+matriz[a][b]+" ";// concatenamos la matriz
             }//fin del for de la variable b
            concatenar=concatenar+"\n";/// concatenamos un salto de linea
               if(x==2)
                {
                a=a+1;
                if(a>2)
                    break;
                while(x>=0)
                        {
                                         if (x==2)
                                         concatenar=concatenar+"      ";//solo para ordenar
                                         if(x==1)
                                         concatenar=concatenar+"   ";   //solo para ordenar         
                                         for(b=x;b<=2;b++)
                                        {
                                         concatenar=concatenar+matriz[a][b];// concatenamos la matriz
                                          }//fin del for de la variable b
                                         x=x-1;
                                    concatenar=concatenar+"\n";/// concatenamos un salto de linea
                }///fin del while
             a=a+1;
             String cadenaNueva = concatenar.substring(0, concatenar.length()-1);/// como agaraba 2 salto de linea segido elimine uno para que kedara justo
               concatenar=cadenaNueva;
                }else
                {
                 x=x+1;
                }
      }//Fin del for de la variable a
      jTextArea1.setText(concatenar);

Todo ese codigo esta dentro de una accion del boton llnar la matriz
 :huh: :huh: :huh: :huh: :huh: :huh: :huh: :huh: :P :P :P :P


En línea

* Determinismo Causal !! Estamos Programados Para Necesitar Respuestas!!

* No deberías copiar un código, sin antes haber comprendido porque funciona de esa manera !
Valkyr


Desconectado Desconectado

Mensajes: 646


Divide y vencerás


Ver Perfil
Re: Matriz 3x3 imprimirla en espiral
« Respuesta #1 en: 5 Junio 2012, 15:29 pm »

Yo lo haría de esta forma:

Código
  1. import java.util.Random;
  2.  
  3. public class Prueba{
  4.  
  5. public static void main(String[] args){
  6. int tamano = 5;
  7. int b = 5;
  8. int matriz[][] = new int[tamano][b];
  9.       Random rand = new Random();
  10.       String espacios = "";
  11. for(int i=0;i<tamano;i++){
  12. for(int j=0;j<b;j++){
  13. matriz[i][j] = rand.nextInt(9);
  14. System.out.print(matriz[i][j] + ",");
  15. }
  16. System.out.println();
  17. }
  18.  
  19. for(int i = 0; i < b - 1; i++)
  20. espacios += " ";
  21.  
  22. String espaciosInicial = espacios;
  23. for(int i = 1;i<tamano + 1; i++){
  24. String numeros = "";
  25. if(i % 2 == 0){
  26.  
  27. for(int j = b - 1; j >= 0; j--){
  28. numeros = matriz[i-1][j] + numeros;
  29. System.out.println(espacios + numeros);
  30. if(espacios.length() >= 1)
  31. espacios = espacios.substring(1);
  32. else
  33. espacios = espaciosInicial;
  34. }
  35. }
  36.  
  37. else{
  38. for(int j = 0;j < b; j++){
  39. numeros += matriz[i-1][j];
  40. System.out.println(numeros);
  41. }
  42. }
  43.  
  44. }
  45. }
  46. }
  47.  

No se si será la solución más óptima o no. Recorres una única vez la matriz (después de leerla, claro).

Saludos.


« Última modificación: 5 Junio 2012, 22:45 pm por Valkyr » En línea

lluvplay

Desconectado Desconectado

Mensajes: 27



Ver Perfil
Re: Matriz 3x3 imprimirla en espiral
« Respuesta #2 en: 5 Junio 2012, 15:47 pm »

 ;-) Creo q si es mas obtimo que el mio !!! pero imaginate que pasaria si en v es de ser 3X3 seria 3X5

matriz 3x5
123
456
789
123
456

espiral
123
    6
  56
456
7
78
789
    3
  23
123
4
45
456

de aki fue de donde salio mi duda !!! por eso pense !! mi codigo es obtimo ? y si x algo el sistema tiene que variar !!!

Bueno esas solo son preguntas logicas XD

Pero se ve bueno  ;-)

En línea

* Determinismo Causal !! Estamos Programados Para Necesitar Respuestas!!

* No deberías copiar un código, sin antes haber comprendido porque funciona de esa manera !
lluvplay

Desconectado Desconectado

Mensajes: 27



Ver Perfil
Re: Matriz 3x3 imprimirla en espiral
« Respuesta #3 en: 5 Junio 2012, 17:21 pm »

Hola amigo mirando, aprendiendo, comprendiendo los codigo y sobre todo practicando !!! he llegado al punto que queria tocar !!! es q no importara si la matriz fuera
3X3 o 3X7 o 3X4o 3X(nnumeros) se tendria que imprimir el espiral !! Pues listo!!! aki lo tengo solo tenes q cambiar el valor de colunna y la fila XD
Cuando digo el valor de la colunna y la fila quiero decir q puede ser 4X2 3X4 5X6 no importa como sea tu matriz deve imprimir en espiral !!!

Anexo el codigo: un respeto y muchos saludos al amigo  ;-) valkyr  ;-) por la idea de su codigo !!!

Código:
package espiral;

import java.util.Random;

public class Espiral {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
          lluvplay ob=new lluvplay();
        ob.cargar();
        System.out.println("-----------------");
        ob.ordenar();
   
    }
}
class lluvplay
{
    int fila=4;
    String impresion="";
    int colunna=7;
    int matriz[][]= new int [colunna][fila];
    public void cargar()
    {
    Random rand= new Random();
        for (int a=0; a<colunna;a++){
        for(int b=0;b<fila;b++)
        {
        matriz[a][b]=rand.nextInt(9);
        System.out.print(matriz[a][b]);
        }
        System.out.println();
    }
    }
    public void ordenar()
    {
        String concatenar="";
        String connumeros=""; // para concatenar los numeros estetica he impresion
        int tipo_de_entero=0,mantener=0; /// esto es para ver si es par o impar
        while (tipo_de_entero<colunna)
        {
            if(tipo_de_entero%2==0)
            {
                while(mantener<fila)
                {
                    for(int a=0;a<=mantener;a++)
                    {
                 //   System.out.print(matriz[tipo_de_entero][a]);   
                    impresion=impresion+matriz[tipo_de_entero][a];
                    }
                   // System.out.println();
                    impresion+="\n";
                    mantener+=1;
                }
                tipo_de_entero+=1;
                mantener=0;
            }//fin del if(tipo_de_entero%2==0)
            else
            {
                mantener=fila-1;
                while (mantener>=0)
                {
                    for(int b=0;b<mantener;b++)
                        concatenar=concatenar+" ";
                    for(int a=mantener;a<fila;a++)
                    {
                        connumeros=connumeros+matriz[tipo_de_entero][a];
                       // System.out.println();
                    }
                    impresion+=concatenar+connumeros+"\n";
                  //  System.out.println(concatenar+connumeros);
                    concatenar="";
                    connumeros="";
                    mantener-=1;
                }
            tipo_de_entero+=1;
             //String cadenaNueva = concatenar.substring(0, concatenar.length()-1);
             impresion=impresion.substring(0,impresion.length()-1);
            } //fin del else (tipo_de_entero%2==0)
           
        }//fin del mietras
       System.out.print(impresion);
    }   //fin del metodo ordenar
 }// fin de la clase lluvplay

Saludos ojala este material sea constructivo para futuras dudas :D
muy importante si alguien tiene otra idea por favor postearla que a mi me sirve mucho comparar ideas y resilver problemas XD
En línea

* Determinismo Causal !! Estamos Programados Para Necesitar Respuestas!!

* No deberías copiar un código, sin antes haber comprendido porque funciona de esa manera !
Valkyr


Desconectado Desconectado

Mensajes: 646


Divide y vencerás


Ver Perfil
Re: Matriz 3x3 imprimirla en espiral
« Respuesta #4 en: 5 Junio 2012, 22:45 pm »

En el código que pusé anteriormente simplemente habría que modificar para que la variable "espacios" se rellene con el valor de b. He dejado la modificación por si quieres verla (es prácticamente igual que como estaba antes). Ahora imprime en espiral sea cual sea el valor de tamano y b.

Saludos.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[TUTORIAL]Arte abstracto: espiral abstracta
Diseño Gráfico
H4RR13R 7 12,164 Último mensaje 31 Agosto 2007, 05:29 am
por asssssssssssssassasas
Generar matrices en 'espiral'
Ejercicios
AndenBomber 3 43,122 Último mensaje 8 Agosto 2012, 04:27 am
por JOSEATT
Duda - Buscar si existe una matriz dentro de otra matriz
Programación Visual Basic
EddyW 2 5,826 Último mensaje 14 Agosto 2010, 06:18 am
por EddyW
[Python] Espiral de Ulam
Scripting
engel lex 1 3,777 Último mensaje 19 Enero 2015, 12:00 pm
por Gh057
Dibujar un Espiral o caracol
Programación C/C++
mc275 7 3,110 Último mensaje 7 Diciembre 2016, 03:31 am
por MCKSys Argentina
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines