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
| | | |-+  Torres de hanoi con netbeans
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Torres de hanoi con netbeans  (Leído 32,611 veces)
kch_l

Desconectado Desconectado

Mensajes: 56



Ver Perfil
Torres de hanoi con netbeans
« en: 9 Noviembre 2009, 01:49 am »

En mi universidad me dejaron como proyecto las torres de hanoi, tenemos que hacerlo para poder jugar y que se autoresuelva con un algoritmo recursivo, el profesor nos dijo que podiamos usar varios lenguajes de los cuales yo escogi java y apenas empece el diseño en un jFrame con netbeans.

Lo unico en lo que les pido ayuda es que me guiaran, como por ejemplo cuales metodos son necesarios para hacer cada cosa.

No les estoy pidiendo que em lo hagan solo que me echen una mano por que la verdad no tengo ni la mas minima idea de por donde empezar.

Se los agradeceria mucho  ;D.


En línea

BAZINGA!!!! I don't care
:ohk<any>


Desconectado Desconectado

Mensajes: 1.744


Yo lo que quiero que me salga bien es la vida.


Ver Perfil WWW
Re: Torres de hanoi con netbeans
« Respuesta #1 en: 9 Noviembre 2009, 21:49 pm »

Te puedo hechar una mano con las torres de hanoi, pero no es por un método recursivo.
Esta en java, que dices...

saludos


En línea

Y es que a veces pienso que si no estuviera loco no podría salir adelante.
Lo que no se es capaz de dar, en realidad no se posee, uno es poseído por ello.
kch_l

Desconectado Desconectado

Mensajes: 56



Ver Perfil
Re: Torres de hanoi con netbeans
« Respuesta #2 en: 9 Noviembre 2009, 21:57 pm »

Ejemmmm me parece bien jejeje.

Tengo una duda, en netbeans como se puede encimar un jLabel sobre ya quie asi planeo hacerlo, tres label para las torres y diferentes labels para los discos solo que no he podido hacer que se queden uno encima de otro.
En línea

BAZINGA!!!! I don't care
:ohk<any>


Desconectado Desconectado

Mensajes: 1.744


Yo lo que quiero que me salga bien es la vida.


Ver Perfil WWW
Re: Torres de hanoi con netbeans
« Respuesta #3 en: 9 Noviembre 2009, 23:15 pm »

Mira, siendo sincero hace mucho que no veo java ni programo usando lógica  :xD :xD :xD :xD

Asi que te paso el ejercicio, mas una imagen que se requiere para que corra mas guapo  ;D

La imagen:



El codigo en java:

Código
  1. //********************************************************************
  2. // hanoi.java
  3. // aporte de @ohk
  4. // para elhacker.net
  5. //********************************************************************
  6.  
  7. import java.applet.*;
  8. import java.awt.event.*;
  9. import java.awt.*;
  10.  
  11. //********************************************************************
  12.  
  13. public class hanoi extends Applet implements Runnable
  14. {
  15.    Graphics g;
  16.  
  17.    static public Image fondo;
  18.  
  19.    static public int ancho;
  20.    static public int alto;
  21.  
  22.    static public int demora = 200;
  23.  
  24.    private boolean imagen_cargada = false;
  25.  
  26.    private int total_discos = 3;
  27.  
  28.    private Thread mi_hilo;
  29.  
  30.    private boolean hilo_iniciado = false;
  31.  
  32.    private Label label;
  33.  
  34.    private TextField resultado;
  35.  
  36.    String salida = "";
  37.    int contador = 0;
  38.  
  39.    torre t [];
  40.  
  41.    int torre_origen = 0;
  42.    int torre_destino = 2;
  43.  
  44.    //----------------------------------------------------------------
  45.  
  46.    public void init ()
  47.    {
  48.  
  49. label = new Label ("Comportamiento de las Torres de Hanoi");
  50. label.setFont (new java.awt.Font ("Georgia Ref", java.awt.Font.BOLD, 20));
  51.  
  52. resultado = new TextField (40);
  53. resultado.setFont (new java.awt.Font ("Georgia Ref", java.awt.Font.BOLD, 15));
  54. //Container contString = getContentPane ();
  55. //contString.setLayout (new FlowLayout ());
  56. resultado.setEnabled (false);
  57. //contString.add (new ScrollPane (resultado));
  58.  
  59. g = getGraphics ();
  60.  
  61. String parametro;
  62.  
  63. parametro = getParameter ("TOTAL");
  64. if (parametro != null)
  65.    total_discos = Integer.parseInt (parametro);
  66.  
  67. parametro = getParameter ("DEMORA");
  68. if (parametro != null)
  69.    demora = Integer.parseInt (parametro);
  70.  
  71. ancho = size ().width;
  72. alto = size ().height;
  73.  
  74. fondo = getImage (getCodeBase (), "egipto.gif");
  75.  
  76. Image imagenFueraPant = createImage (ancho, alto);
  77. Graphics CGFueraPant = imagenFueraPant.getGraphics ();
  78. CGFueraPant.drawImage (fondo, 0, 0, this);
  79.  
  80. t = new torre [3];
  81.  
  82. t [0] = new torre (g);
  83. t [1] = new torre (g);
  84. t [2] = new torre (g);
  85.  
  86. for (int i = 0 ; i < total_discos ; i++)
  87. {
  88.    t [0].agregar (i);
  89. }
  90. add (label);
  91. add (resultado);
  92.  
  93.    }
  94.  
  95.  
  96.    //----------------------------------------------------------------
  97.  
  98.    public boolean imageUpdate (Image img, int infoflags, int x, int y,
  99.    int ancho, int alto)
  100.    {
  101. if (infoflags == ALLBITS)
  102. {
  103.    imagen_cargada = true;
  104.    repaint ();
  105.    return false;
  106. }
  107. else
  108.    return true;
  109.    }
  110.  
  111.  
  112.    //----------------------------------------------------------------
  113.  
  114.    public void paint (Graphics g)
  115.    {
  116. if (!imagen_cargada)
  117.    showStatus ("Torre de Hanoi:  cargando imagen");
  118.  
  119. else
  120. {
  121.    if (hilo_iniciado)
  122. if (mi_hilo.isAlive ())
  123.    showStatus ("Torres de Hanoi:  Corriendo");
  124. else
  125.    showStatus ("Torres de Hanoi:  Haga clic otra vez para reiniciar");
  126.    else
  127. showStatus ("Torres de Hanoi:  Haga clic para iniciar");
  128.  
  129.    ancho = size ().width;
  130.    alto = size ().height;
  131.  
  132.    g.drawImage (fondo, 0, 0, ancho, alto, this);
  133.  
  134.    int x_inc = ancho / 10;
  135.  
  136.    t [0].paint (x_inc * 1, x_inc * 2, alto);
  137.    t [1].paint (x_inc * 4, x_inc * 2, alto);
  138.    t [2].paint (x_inc * 7, x_inc * 2, alto);
  139. }
  140.    }
  141.  
  142.  
  143.    //----------------------------------------------------------------
  144.  
  145.    public boolean mouseDown (Event evt, int x, int y)
  146.    {
  147. if (!hilo_iniciado || !mi_hilo.isAlive ())
  148. {
  149.    mi_hilo = new Thread (this);
  150.    mi_hilo.start ();
  151.    showStatus ("Torre de Hanoi:  Corriendo");
  152.    hilo_iniciado = true;
  153.    resuelve_hanoi (total_discos, torre_origen + 1, torre_destino + 1);
  154.  
  155.  
  156. }
  157.  
  158. return true;
  159.    }
  160.  
  161.  
  162.    //----------------------------------------------------------------
  163.  
  164.    public void run ()
  165.    {
  166. mover_torre (total_discos, torre_origen, torre_destino, 1);
  167.  
  168. int temp = torre_destino;
  169. torre_destino = torre_origen;
  170. torre_origen = temp;
  171.  
  172. showStatus ("Torre de Hanoi:  Haga clic otra vez para reiniciar");
  173.    }
  174.  
  175.  
  176.    //----------------------------------------------------------------
  177.  
  178.    private void mover_torre (int discos, int origen, int destino, int temporal)
  179.    {
  180. if (discos > 0)
  181. {
  182.    mover_torre (discos - 1, origen, temporal, destino);
  183.    mover_disco (origen, destino);
  184.    mover_torre (discos - 1, temporal, destino, origen);
  185. }
  186.    }
  187.  
  188.  
  189.    //----------------------------------------------------------------
  190.  
  191.    private void mover_disco (int origen, int destino)
  192.    {
  193. int disco = t [origen].pop ();
  194. t [destino].push (disco);
  195.    }
  196.  
  197.    public void resuelve_hanoi (int n, int inicial, int finalizar)
  198.    {
  199. int libre = 0;
  200. if (n == 1)
  201. {
  202.    resultado.setText (" Mover disco superior de la torre " + inicial + " a la torre " + finalizar);
  203. }
  204. else
  205. {
  206.  
  207.    //Determinar cual es la aguja libre
  208.    if (inicial != 1 && finalizar != 1)
  209. libre = 1;
  210.    else if (inicial != 2 && finalizar != 2)
  211.    {
  212. libre = 2;
  213.    }
  214.    else
  215. libre = 3;
  216.  
  217.    //Primer subproblema:mover n-1 discos de inicial a libre
  218.    resuelve_hanoi (n - 1, inicial, libre);
  219.    //Transferir el disco grande a su posicion final
  220.    try
  221.    {
  222. Thread.sleep (3200);
  223.    }
  224.    catch (InterruptedException e)
  225.    {
  226.  
  227.    }
  228.    ;
  229.    resultado.setText (" Mover disco superior de la torre " + inicial + " a la torre " + finalizar);
  230.    try
  231.    {
  232. Thread.sleep (3200);
  233.    }
  234.    catch (InterruptedException e)
  235.    {
  236.  
  237.    }
  238.    ;
  239.    //Segundo subproblema: mover n-1 discos de libre a final
  240.    resuelve_hanoi (n - 1, libre, finalizar);
  241. }
  242.    }
  243. }
  244.  

Espero te sirva.
Saludos
En línea

Y es que a veces pienso que si no estuviera loco no podría salir adelante.
Lo que no se es capaz de dar, en realidad no se posee, uno es poseído por ello.
kch_l

Desconectado Desconectado

Mensajes: 56



Ver Perfil
Re: Torres de hanoi con netbeans
« Respuesta #4 en: 9 Noviembre 2009, 23:41 pm »

Gracias, nada mas que me marca error en todas la partes del codigo donde esta el objeto torre.

Como ejemplo:

t = new torre [3];

   t
  • = new torre (g);
   t [1] = new torre (g);
   t [2] = new torre (g);

En todas esas linea me marca error, algo así como que no encuentra la clase torre.

La imagen con que nombre la tengo que bajar, va en la misma carpeta que el archivo .class o me equivoco?

Gracias por el aporte  :laugh:  ;-).
En línea

BAZINGA!!!! I don't care
NYU


Desconectado Desconectado

Mensajes: 1.241


NYU


Ver Perfil WWW
Re: Torres de hanoi con netbeans
« Respuesta #5 en: 10 Noviembre 2009, 09:27 am »

Por ahi tenia guardado este codigo en C :P

Código
  1. #include <conio.h>
  2. #include <stdio.h>
  3.  
  4. void main()
  5. {
  6.    void hanoi(char,char,char,int);
  7.    char t1='A',t2='B',t3='C';
  8.    int n;
  9.    clrscr();
  10.    printf("\n Hola!!!!! mucho gusto en conocerte, me ayudas a escoger la cantidad de discos de la torre A, Por favor:");
  11.    scanf("%d",&n);
  12.    if(n<1)
  13.    {
  14.        printf("\n Tu disco duro explota!!");
  15.    }
  16.    else
  17.    hanoi(t1,t2,t3,n);
  18.    getch();
  19. }
  20.  
  21. void hanoi(char t1,char t2,char t3,int n)
  22. {
  23.    static int gatito=0;
  24.    gatito++;
  25.    printf("\n %c %c %c %d",t1,t2,t3,n);
  26.    if(n==1)
  27.    {
  28.        printf("\n Muevete disco que estas arriba en la torre!!! PLZ!!! %c ----> %c",t1,t2);
  29.        return;
  30.    }
  31.    hanoi(t1,t3,t2,n-1);
  32.    printf("\n %c %c %c %d",t1,t2,t3,n);
  33.    printf("\n Muevete disco que estas arriba en la torre!!! PLZ!!! %c ----> %c",t1,t2);
  34.    printf("\n %c %c %c %d",t1,t2,t3,n);
  35.    hanoi(t3,t2,t1,n-1);
  36.    printf("\n %c %c %c %d gatitos caminando=%d",t1,t2,t3,n,gatito);
  37. }

Segun yo funciona o al menos lo hacia la ultima vez xD solo tendrias que portarlo a java pero vamos que muy dificil no esta xD :P
En línea

:ohk<any>


Desconectado Desconectado

Mensajes: 1.744


Yo lo que quiero que me salga bien es la vida.


Ver Perfil WWW
Re: Torres de hanoi con netbeans
« Respuesta #6 en: 10 Noviembre 2009, 16:20 pm »

A perdón, la clase torre es esta:

Código
  1. //********************************************************************
  2. // torre.java
  3. // by @ohk
  4. // para elhacker.net
  5. //********************************************************************
  6.  
  7. import java.awt.*;
  8. import java.util.Vector;
  9.  
  10. //********************************************************************
  11.  
  12. public class torre
  13. {
  14.    Graphics g;
  15.  
  16.    Vector v;
  17.  
  18.    int x;
  19.    int y;
  20.    int w;
  21.    int d;
  22.  
  23.    //----------------------------------------------------------------
  24.  
  25.    torre (Graphics g)
  26.    {
  27. this.g = g;
  28.  
  29. v = new Vector ();
  30.    }
  31.  
  32.  
  33.    //----------------------------------------------------------------
  34.  
  35.    public void agregar (int i)
  36.    {
  37. Integer I = new Integer (i);
  38.  
  39. v.addElement (I);
  40.    }
  41.  
  42.  
  43.    //----------------------------------------------------------------
  44.  
  45.    public int pop ()
  46.    {
  47. int disco = ((Integer) (v.lastElement ())).intValue ();
  48. int tamano = v.size ();
  49.  
  50. subir_disco (tamano, disco);
  51. v.removeElementAt (tamano - 1);
  52.  
  53. return (disco);
  54.    }
  55.  
  56.  
  57.    //----------------------------------------------------------------
  58.  
  59.    public void push (int i)
  60.    {
  61. Integer I = new Integer (i);
  62.  
  63. v.addElement (I);
  64.  
  65. int tamano = v.size ();
  66.  
  67. bajar_disco (tamano, i);
  68.    }
  69.  
  70.  
  71.    //----------------------------------------------------------------
  72.  
  73.    public void paint (int _x, int _w, int h)
  74.    {
  75. x = _x;
  76. w = _w;
  77. y = h / 20;
  78. d = w / 20;
  79.  
  80. dibujar_sujetadores (g);
  81.  
  82. int numero_de_discos = v.size ();
  83.  
  84. for (int i = 0 ; i < numero_de_discos ; i++)
  85. {
  86.    int j = ((Integer) (v.elementAt (i))).intValue ();
  87.    dibujar_disco (x + j * d, y * (18 - i), w - 2 * j * d, y);
  88. }
  89.    }
  90.  
  91.  
  92.    //----------------------------------------------------------------
  93.  
  94.    void dibujar_sujetadores (Graphics g)
  95.    {
  96. g.setColor (Color.green);
  97. g.fillRect (x, y * 19, w, y / 5);
  98. g.fillRect (x + w / 2 - w / 20, y * 15, w / 10, y * 4);
  99. g.fillOval (x + w / 2 - w / 20, y * 11, w / 10, y * 8);
  100. //g.setColor (Color.black);
  101. g.setColor (Color.red);
  102. g.drawString (" Torre 1 ", 120, 395);
  103. g.drawString (" Torre 2 ", 325, 395);
  104. g.drawString (" Torre 3 ", 530, 395);
  105.    }
  106.  
  107.  
  108.    //----------------------------------------------------------------
  109.  
  110.    void demora ()
  111.    {
  112. try
  113. {
  114.    Thread.sleep (hanoi.demora);
  115. }
  116. {
  117. }
  118.    }
  119.  
  120.  
  121.    //----------------------------------------------------------------
  122.  
  123.    void subir_disco (int tamano, int disco)
  124.    {
  125. borrar_disco (x + disco * d, y * (19 - tamano), w - 2 * disco * d, y);
  126.  
  127. for (int i = y * (18 - tamano) ; i >= y + 180 ; i -= y)
  128. {
  129.    dibujar_disco (x + disco * d, i, w - 2 * disco * d, y);
  130.    demora ();
  131.    borrar_disco (x + disco * d, i, w - 2 * disco * d, y);
  132. }
  133.    }
  134.  
  135.  
  136.    //----------------------------------------------------------------
  137.  
  138.    void bajar_disco (int tamano, int disco)
  139.    {
  140. for (int i = y + 180 ; i < y * (19 - tamano) ; i += y)
  141. {
  142.    dibujar_disco (x + disco * d, i, w - 2 * disco * d, y);
  143.    demora ();
  144.    borrar_disco (x + disco * d, i, w - 2 * disco * d, y);
  145. }
  146.  
  147. dibujar_disco (x + disco * d, y * (19 - tamano), w - 2 * disco * d, y);
  148.    }
  149.  
  150.  
  151.    //----------------------------------------------------------------
  152.  
  153.    void dibujar_disco (int x, int y, int w, int h)
  154.    {
  155. g.setColor (Color.black);
  156. g.fillOval (x, y, w - 1, h - 1);
  157.  
  158. g.setColor (Color.white);
  159. g.drawOval (x, y, w - 1, h - 1);
  160.  
  161. g.setColor (Color.black);
  162.    }
  163.  
  164.  
  165.    //----------------------------------------------------------------
  166.  
  167.    void borrar_disco (int x, int y, int w, int h)
  168.    {
  169. g2 = g.create ();
  170.  
  171. g2.clipRect (x, y, w, h);
  172.  
  173. g2.drawImage (hanoi.fondo, 0, 0, hanoi.ancho, hanoi.alto, null);
  174.  
  175. dibujar_sujetadores (g2);
  176.    }
  177. }
  178.  

La imagen la debes bajar con este nombre: egipto.gif
Saludetes ;D
« Última modificación: 10 Noviembre 2009, 16:23 pm por el-OHK xD » En línea

Y es que a veces pienso que si no estuviera loco no podría salir adelante.
Lo que no se es capaz de dar, en realidad no se posee, uno es poseído por ello.
kch_l

Desconectado Desconectado

Mensajes: 56



Ver Perfil
Re: Torres de hanoi con netbeans
« Respuesta #7 en: 10 Noviembre 2009, 22:27 pm »

 :o

Lo voy a checar.

Solo es para resolver automaticamente o tambien para jugar.

Gracias por la ayuda
En línea

BAZINGA!!!! I don't care
Tlacoyo49

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Torres de hanoi con netbeans
« Respuesta #8 en: 20 Octubre 2010, 19:26 pm »

necesito ayuda ... por favor no c como compilarlo.. soy nuevo.. no c si un main y mandar llamar las clases.. por favor es urgente
En línea

Tlacoyo49

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Torres de hanoi con netbeans
« Respuesta #9 en: 20 Octubre 2010, 19:32 pm »

necesito ayuda como correrlo soy nuevo en esto.. es urgente... si pudieras poner los pasos.. por favor.. no puedo compilarlo...
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda con torres de hanoi en vb
Programación Visual Basic
Freelancer 1 6,679 Último mensaje 23 Agosto 2011, 00:03 am
por ignorantev1.1
torres de hanoi
Programación General
resckate 3 5,778 Último mensaje 10 Septiembre 2011, 22:01 pm
por Valkyr
Torres de Hanoi
Programación C/C++
m@o_614 4 3,943 Último mensaje 21 Diciembre 2011, 06:02 am
por naderST
[ANSI C] Torre de hanoi
Programación C/C++
CrashNebula 3 3,865 Último mensaje 28 Mayo 2013, 17:43 pm
por CrashNebula
Torre de Hanoi
Programación C/C++
michfere43 1 2,609 Último mensaje 29 Octubre 2020, 01:33 am
por K-YreX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines