• Lunes 29 de Abril de 2024, 22:56

Autor Tema:  Problema Practica De Programacion  (Leído 13266 veces)

darth masacre

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Problema Practica De Programacion
« en: Sábado 1 de Diciembre de 2007, 12:27 »
0
Hola,
 estoy haciendo un grado superior de desarrollo de aplicaciones informaticas y me an mandado una practica de fin de curso que vale 2 puntos y que por mucho que intento hacer no me sale.
Me gustaria si alguien puede echarme una mano ya que yo solo llevo un trimestre y para programadores avanzados debe estar chupado.

He de construir un programa sin usar interfaces grafios, simplemente codigo puro y duro escrito en el bloc de notas que luego sea compilado en el simbolo de sistema y que me dibuje un rombo con "*" asteriscos, de X por X dimensiones, siendo X un numero introducido por teclado por el usuario comprendido entre 1 y 20(decir que los numeros pares no valen).
Debera imprimirse uno por uno cada asterisco y debera estar explicado cada paso de como funciona(esto no me hace falta, lo hare yo) tal que el resultado sea este:

C:\javac (nombre del archivo).java

C:\java (nombre del archivo) 7

---*  
--***
-*****
*******
-*****
--***
---*

o otro ejemplo

C:\javac (nombre del archivo).java

C:\java (nombre del archivo) 11

-----*
----***
---*****
--*******
-*********
***********
-*********
--*******
---*****
----***
-----*

Bueno en el programa el rombo quedaria perfectamente definido y los guiones son espacios en blanco. asi que por favor que alguien me ayude. :(

logicaemp

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: Problema Practica De Programacion
« Respuesta #1 en: Domingo 2 de Diciembre de 2007, 07:26 »
0
Hay muchas formas de hacerlo, con varios ciclos,
yo prefiero los cálculos matemáticos, aquí hay
un ejemplo de como puedes realizarlo:

Código: Text
  1.  
  2.     //OBTENGO EL NUMERO DESDE LOS ARGUMENTOS
  3.     int n = Integer.parseInt(args[0]);
  4.     ....
  5.     //LO DIVIDO ENTRE DOS PARA TENER POSITIVOS Y NEGATIVOS
  6.     int m = n / 2;
  7.     ......
  8.     //EN ESTE CICLO VA DE -m HASTA +m
  9.     for (int y = -m; y <= m; y++) {
  10.       .....
  11.       //EN ESTE CICLO VA DE -m HASTA +m OTRA VEZ PARA FORMAR EL ROMBO
  12.       for (int x = -m + fix; x <= m; x++) {
  13.       .....
  14.  
  15.  

No se me ocurre ni por donde empezar a explicar
este programa, si tienes alguna duda, pregunta en este
mismo hilo de conversación, para discernir el funcionamiento.

La idea es, si es un rombo de 7 x 7, los ciclos no van de 1..7, 1..7...
sino que van de -2 hasta +3 y -2 hasta +3. De esta forma puedes crear
un rombo.

Código: Text
  1. public class rombo {
  2.   public static void main(String[] args) {
  3.     int n = Integer.parseInt(args[0]);
  4.     int m = n / 2; int fix = n % 2 > 0.0 ? 0 : 1;
  5.     for (int y = -m + fix; y <= m; y++) {
  6.       int z = y * ((m + 1) - Math.abs(y));
  7.       for (int x = -m + fix; x <= m; x++) {
  8.         if (Math.abs(y * x) < Math.abs(z) || y == 0) {
  9.           System.out.print("*");
  10.         } else {
  11.           System.out.print(" ");
  12.         }
  13.       }
  14.       System.out.print(String.format("%1$4d", (y % 10)));
  15.       System.out.println();
  16.     }
  17.   }
  18. }
  19.  

Código: Text
  1. templates@devservapp:~$ java rombo 17
  2.         *          -8
  3.        ***         -7
  4.       *****        -6
  5.      *******       -5
  6.     *********      -4
  7.    ***********     -3
  8.   *************    -2
  9.  ***************   -1
  10. *****************   0
  11.  ***************    1
  12.   *************     2
  13.    ***********      3
  14.     *********       4
  15.      *******        5
  16.       *****         6
  17.        ***          7
  18.         *           8
  19.  

También te aconsejo que tengas a mano un libro de álgebra.
También te aclaro que está es la forma más COMPLICADA de hacerlo.
Pero también la más eficiente y es la mejor forma de programar.

Saludos,

darth masacre

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Problema Practica De Programacion
« Respuesta #2 en: Domingo 2 de Diciembre de 2007, 14:11 »
0
Muchas gracias, es realmente esto lo que ha de hacer pero no puedo usarlo debido a que no hemos aprendido aun la siguientes expresiones: Math.abs, String.format("%1$4d", (y % 10), ademas de negar "-m" a mi no se me abria ocurrido,
 es una buena forma de hacerlo pero podrias hacerlo con bucles, la profesora nos dio unas pistas diciendonos que dividieramos el problema en partes, para hacer primero un cuarto del rombo luego otro.. y asi, realmente agradezco tu ayuda pero no creo que esto me lo diera por valido, por que hay partes que no se explicarlas,
alomejor tambien podrias podrias ayudarme poniendo unas anotaciones de por donde van los tiros. se que te estoy pidiendo mucho pero.. dios ese programa me trae por el camino de la amargura, llevo un mes intentando resolverle y no sale, la fecha de entrega es el miercoles de esta semana. gracias de todo corazon

logicaemp

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: Problema Practica De Programacion
« Respuesta #3 en: Domingo 2 de Diciembre de 2007, 21:47 »
0
Mi objetivo es solamente darte una base donde
puedas iniciar tu propio proyecto, no que utilices
mi código directamente, te doy un ejemplo más
sencillo, para que tengas una idea más básica,
y continúes con la parte que hace falta:

Código: Text
  1. public class romboloop {
  2.   public static void main(String[] args) {
  3.     int n = Integer.parseInt(args[0]);
  4.     int m = n / 2;
  5.     int x, y;
  6.    
  7.     // ESTE CICLO ES PARA IR CONTANDO
  8.     // VERTICALMENTE
  9.     for (x = 1; x <= m + 1; x++) {
  10.  
  11.       // ESTE CICLO IMPRIME LOS ESPACIOS INICIALES
  12.       // QUE VAN ANTES DE LOS ASTERISCOS  (VER: A)
  13.       for (y = 1; y <= (m - x) + 1; y++) {
  14.         System.out.print("_");
  15.       }
  16.  
  17.       // ESTE CICLO IMPRIME LA MITAD DE LOS ASTERISCOS
  18.       // QUE FORMAN EL ROMBO  (VER: B)
  19.       for (y = 1; y <= x; y++) {
  20.         System.out.print("*");
  21.       }
  22.  
  23.       // ESTE CICLO IMPRIME LA MITAD DE LOS ASTERISCOS
  24.       // QUE FORMAN EL ROMBO TAMBIEN, PERO LA 2 PARTE (VER: C)
  25.       for (y = 1; y < x; y++) {
  26.         System.out.print("*");
  27.       }
  28.  
  29.       // ESTE CICLO IMPRIME LOS ESPACIOS FINALES
  30.       // QUE VAN DESPUES DE LOS ASTERISCOS (VER: D)
  31.       for (y = 1; y <= (m - x) + 1; y++) {
  32.         System.out.print("_");
  33.       }
  34.  
  35.       // ESTA INSTRUCCION IMPRIME EL NUMERO DE LINEA
  36.       // Y SALTA DE LINEA
  37.       System.out.println(" " + x);
  38.     }
  39.   }
  40. }
  41. /*
  42.  
  43.     CICLOS FOR
  44.   A   B  C   D
  45. |----|--|--|-----|
  46.      
  47. ________*________ 1
  48. _______***_______ 2
  49. ______*****______ 3
  50. _____*******_____ 4
  51. ____*********____ 5
  52. ___***********___ 6
  53. __*************__ 7
  54. _***************_ 8
  55. ***************** 9
  56.  
  57. */
  58.  


Código: Text
  1. public class romboloop {
  2.   public static void main(String[] args) {
  3.     int n = Integer.parseInt(args[0]);
  4.     int m = n / 2;
  5.     int x, y;
  6.     for (x = 1; x <= m + 1; x++) {
  7.       for (y = 1; y <= (m - x) + 1; y++) {
  8.         System.out.print(" ");
  9.       }
  10.       for (y = 1; y <= x; y++) {
  11.         System.out.print("*");
  12.       }
  13.       for (y = 1; y < x; y++) {
  14.         System.out.print("*");
  15.       }
  16.       for (y = 1; y <= (m - x) + 1; y++) {
  17.         System.out.print(" ");
  18.       }
  19.       System.out.println(" " + x);
  20.     }
  21.   }
  22. }
  23.  

Código: Text
  1. templates@devservapp:~$ java romboloop 17
  2.         *         1
  3.        ***        2
  4.       *****       3
  5.      *******      4
  6.     *********     5
  7.    ***********    6
  8.   *************   7
  9.  ***************  8
  10. ***************** 9
  11.  
  12.  

Saludos,

Max_21mx

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Problema Practica De Programacion
« Respuesta #4 en: Viernes 9 de Enero de 2009, 02:44 »
0
pues  este  es  mi codigo  muy sencillo de enteder  espero  te  sirva

Código: Text
  1.  
  2. public class RomboAsteristicos {
  3.     int con=1;
  4.     RomboAsteristicos(){
  5.     /*la mitad del rombo*/
  6.         for(int x=1;x<=5;x++){
  7.  
  8.             for(int yd=0;yd<=5-x;yd++){
  9.                 System.out.print(" ");
  10.             }
  11.  
  12.             for(int y=1;y<=con;y++){
  13.                 System.out.print("*");    
  14.             }
  15.             con=con+2;
  16.             System.out.println();
  17.         }
  18.         con=con-3;
  19.         /*la segunda mitad del rombo*/
  20.         for(int x=1;x<=5;x++){
  21.  
  22.             for(int yd=0;yd<=x;yd++){
  23.                 System.out.print(" ");
  24.             }
  25.  
  26.             for(int y=1;y<=con-1;y++){
  27.                 System.out.print("*");
  28.             }
  29.             con=con-2;
  30.             System.out.println();
  31.         }    
  32.     }
  33. }
  34.  
  35.  

dvinchi666

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Problema Practica De Programacion
« Respuesta #5 en: Domingo 11 de Enero de 2009, 00:44 »
0
Para Compilar y ejecutar:
     javac Rombo.java
     jar -cvfe Rombo.jar Rombo Rombo.class
     java -jar Rombo.jar


Código: Text
  1. public class Rombo {
  2.  
  3.     //Caracter que formara el rombo
  4.     static final String comodin = new String("@");
  5.  
  6.     public static void quita_comodin(StringBuffer s1) {
  7.         if (!(s1.toString().isEmpty())) {
  8.             s1.deleteCharAt(0);
  9.         }
  10.         if (!(s1.toString().isEmpty())) {
  11.             s1.deleteCharAt(1);
  12.         }
  13.     }
  14.  
  15.     public static void pon_comodin(StringBuffer s1, int i) {
  16.         if (i > 0) {
  17.             s1.append(comodin + comodin);
  18.         } else {
  19.             s1.append(comodin);
  20.         }
  21.     }
  22.  
  23.     public static void main(String[] args) {
  24.  
  25.         //Buffer para las cadenas de caracteres y espacios
  26.         StringBuffer s1 = new StringBuffer("");
  27.         StringBuffer espacios = new StringBuffer("");
  28.  
  29.         //Leemos el numero de filas desde la linea de comandos
  30.         int filas = new Integer(args[0]);
  31.  
  32.         //Parte de Validacion (basica)
  33.         if (filas < 0) {
  34.             System.out.println("No se Admiten numeros negativos ");
  35.             System.out.println("Intentelo de nuevo con un valor mayor o igual a cero ");
  36.             System.exit(1);
  37.         }
  38.    
  39.     if( filas != 0 ){
  40.         filas = ( filas / 2 ) + 1;
  41.     }
  42.  
  43.         System.out.println("---------------     by dvinchi666 :     d.vinchi666@gmail.com   --------- ");
  44.         System.out.println("---------------     Rombo formado de Caracteres     --------- ");
  45.  
  46.         //Se crean los espacios necesarios para empezar a dibujar el rombo
  47.         for (int j = 0; j < filas; j++) {
  48.             espacios.append(" ");
  49.         }
  50.  
  51.         //Parte Superior del Rombo
  52.         for (int i = 0; i < filas; i++) {
  53.             pon_comodin(s1, i);
  54.             espacios.deleteCharAt(0);
  55.             System.out.println(espacios.toString() + s1.toString());
  56.         }
  57.  
  58.         //Parte Inferior del Rombo (espejo de la parte superior)
  59.         for (int i = 0; i < filas + 1; i++) {
  60.             quita_comodin(s1);
  61.             espacios.append(" ");
  62.             System.out.println(espacios.toString() + s1.toString());
  63.         }
  64.     }
  65. }
  66.  
  67.