Programación General > Java
Problema Practica De Programacion
darth masacre:
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:
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 --- //OBTENGO EL NUMERO DESDE LOS ARGUMENTOS int n = Integer.parseInt(args[0]); .... //LO DIVIDO ENTRE DOS PARA TENER POSITIVOS Y NEGATIVOS int m = n / 2; ...... //EN ESTE CICLO VA DE -m HASTA +m for (int y = -m; y <= m; y++) { ..... //EN ESTE CICLO VA DE -m HASTA +m OTRA VEZ PARA FORMAR EL ROMBO for (int x = -m + fix; x <= m; x++) { .....
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 ---public class rombo { public static void main(String[] args) { int n = Integer.parseInt(args[0]); int m = n / 2; int fix = n % 2 > 0.0 ? 0 : 1; for (int y = -m + fix; y <= m; y++) { int z = y * ((m + 1) - Math.abs(y)); for (int x = -m + fix; x <= m; x++) { if (Math.abs(y * x) < Math.abs(z) || y == 0) { System.out.print("*"); } else { System.out.print(" "); } } System.out.print(String.format("%1$4d", (y % 10))); System.out.println(); } }}
--- Código: Text ---templates@devservapp:~$ java rombo 17 * -8 *** -7 ***** -6 ******* -5 ********* -4 *********** -3 ************* -2 *************** -1***************** 0 *************** 1 ************* 2 *********** 3 ********* 4 ******* 5 ***** 6 *** 7 * 8
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:
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:
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 ---public class romboloop { public static void main(String[] args) { int n = Integer.parseInt(args[0]); int m = n / 2; int x, y; // ESTE CICLO ES PARA IR CONTANDO // VERTICALMENTE for (x = 1; x <= m + 1; x++) { // ESTE CICLO IMPRIME LOS ESPACIOS INICIALES // QUE VAN ANTES DE LOS ASTERISCOS (VER: A) for (y = 1; y <= (m - x) + 1; y++) { System.out.print("_"); } // ESTE CICLO IMPRIME LA MITAD DE LOS ASTERISCOS // QUE FORMAN EL ROMBO (VER: B) for (y = 1; y <= x; y++) { System.out.print("*"); } // ESTE CICLO IMPRIME LA MITAD DE LOS ASTERISCOS // QUE FORMAN EL ROMBO TAMBIEN, PERO LA 2 PARTE (VER: C) for (y = 1; y < x; y++) { System.out.print("*"); } // ESTE CICLO IMPRIME LOS ESPACIOS FINALES // QUE VAN DESPUES DE LOS ASTERISCOS (VER: D) for (y = 1; y <= (m - x) + 1; y++) { System.out.print("_"); } // ESTA INSTRUCCION IMPRIME EL NUMERO DE LINEA // Y SALTA DE LINEA System.out.println(" " + x); } }}/* CICLOS FOR A B C D|----|--|--|-----| ________*________ 1_______***_______ 2______*****______ 3_____*******_____ 4____*********____ 5___***********___ 6__*************__ 7_***************_ 8***************** 9 */
--- Código: Text ---public class romboloop { public static void main(String[] args) { int n = Integer.parseInt(args[0]); int m = n / 2; int x, y; for (x = 1; x <= m + 1; x++) { for (y = 1; y <= (m - x) + 1; y++) { System.out.print(" "); } for (y = 1; y <= x; y++) { System.out.print("*"); } for (y = 1; y < x; y++) { System.out.print("*"); } for (y = 1; y <= (m - x) + 1; y++) { System.out.print(" "); } System.out.println(" " + x); } }}
--- Código: Text ---templates@devservapp:~$ java romboloop 17 * 1 *** 2 ***** 3 ******* 4 ********* 5 *********** 6 ************* 7 *************** 8***************** 9
Saludos,
Max_21mx:
pues este es mi codigo muy sencillo de enteder espero te sirva
--- Código: Text --- public class RomboAsteristicos { int con=1; RomboAsteristicos(){ /*la mitad del rombo*/ for(int x=1;x<=5;x++){ for(int yd=0;yd<=5-x;yd++){ System.out.print(" "); } for(int y=1;y<=con;y++){ System.out.print("*"); } con=con+2; System.out.println(); } con=con-3; /*la segunda mitad del rombo*/ for(int x=1;x<=5;x++){ for(int yd=0;yd<=x;yd++){ System.out.print(" "); } for(int y=1;y<=con-1;y++){ System.out.print("*"); } con=con-2; System.out.println(); } }}
Navegación
[#] Página Siguiente
Ir a la versión completa