domingo, 31 de octubre de 2010

Deitel_Java_4.29 (Cuadrado hueco con asteríscos)

_____________________________________________________________________________________
4.29 Escriba una aplicación que pida al usuario que introduzca el tamaño del lado de un cuadrado y que  muestre un cuadrado hueco de ese tamaño, compuesto de asteriscos. Su programa debe funcionar con cuadrados que tengan lados de todas las longitudes entre 1 y 20.
_____________________________________________________________________________________
SOLUCIÓN: Este programa recibe cualquier entero como lado, por lo cual se debe de tener cuidado para que el tamaño no sea más grande que la pantalla.

Este código debe guardarse con el nombre UsaDeitel_4_29.java

/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+   Este programa recibe un numero e imprime un cuadrado    +
+ hueco de lado igual al numero recibido                    +
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

public class UsaDeitel_4_29

{ // Abre UsaDeitel_4_29

public static void main(String args[])

{ // Abre main

Deitel_4_29 miObjeto = new Deitel_4_29("Hola");
miObjeto.Recibe();

} // Cierra main

} // Cierra UsaDeitel_4_29


Este archivo debe de guardarse con el nombre: Deitel_4_29.java

import java.util.Scanner;
 
 public class Deitel_4_29
 
 {           // Abre clase Deitel_4_29
 private String mensaje;
 Scanner entrada = new Scanner(System.in);
 
 ////////////////////////////////////////////////////////////////////////
 //ABRE CONSTRUCTOR
 //////////////////////////////////////////////////////////////////////
 
 
 public Deitel_4_29(String cadena)
 {                  // Abre constructor
  mensaje = cadena;
 }                      // Cierra constructor
 
 ///////////////////////////////////////////////////////////////////////
 //METODO RECIBE 
 ///////////////////////////////////////////////////////////////////////
 
 public void Recibe()
 {               // Abre metodo recibe
 
 int lado;       // Se recibe el lado del cuadrado
 System.out.println("\nPor favor introduzca un numero entre 1 y 20 y se imprimira un cuadrado con ese numero de lado:");
 lado = entrada.nextInt();
 
 Imprime( lado);
 
 
 }              // Cierra metodo recibe
 
 
 ///////////////////////////////////////////////////////////////////////////
 //METODO IMPRIME
 //////////////////////////////////////////////////////////////////////////
 
 public void Imprime( int x)
 {                 // Abre el metodo Imprime
 int contadorHorizontal = 1;
 int contadorVertical = 2;
 
 while( contadorHorizontal++ <= x)
 {    // Abre while
 System.out.print("*");
 }       // Cierra while
 System.out.print("\n");
 
 // Aqui se cambia el valor de contadorHorizontal a 1, indicando que se esta en un nuevo renglon.
 contadorHorizontal = 1;
 
 while ( contadorVertical++ < x) // LOs limites van de 2( valor inicial) a
 // x-1, ya que enla primera y ultima linea se imprimen asteriscos
 
 
 {          // Abre while que controla columnas
 
 while ( x >= contadorHorizontal)  // Aqui se imprime el renglon
 {              // Abre while anidado
 if ((1 == contadorHorizontal) || (x == contadorHorizontal))
 System.out.print("*");
 else
 System.out.print(" ");
 
 contadorHorizontal++;
 }               // Cierra while anidado
 
 System.out.print("\n");  // con esto se cambia de renglon
 contadorHorizontal = 1;
 }             // Cierra while 
 
 contadorHorizontal = 1;
 while ( contadorHorizontal++ <= x)
 { // ABre while
 System.out.print("*");
 }         // Cierra while
 
 System.out.println("\n");
 }                // Cierra el metodo Imprime
 }           // Cierra clase Deitel_4_29

Una ejecución de este programa es la siguiente:

Por favor introduzca un numero entre 1 y 20 y se imprimira un cuadrado con ese numero de lado:
8
********
*      *
*      *
*      *
*      *
*      *
*      *
********

_____________________________________________________________________________________
Esta entrada es parte de los problemas resueltos del libro Java. Cómo Programar de P. Deitel y H. Deitel
Entrada Anterior
Entrada Siguiente

6 comentarios:

  1. yo tengo una version de mi propia autoria aun que el que me esta generando dificultad es el de conversion de binario a decimal

    ResponderEliminar
  2. public void pintaCuadros()
    {
    int fila;
    int Max;
    int columna;



    Scanner entrada = new Scanner(System.in);
    System.out.print("Digite el lado del cuadrado [comprendido entre 1-20]: ");
    fila = entrada.nextInt();
    //valida el rango de entrada
    if(fila >= 1 && fila <= 20)
    {
    // se asign fila a max ya que es el valor máximo
    Max = fila;


    while(fila>=1)
    {
    columna = 1;
    //pinta los renglones
    while(columna <= Max)
    {
    //se pintan el primer y el ultimo renglon del cuadro con puros asterirscos controlados por los saltos de línea
    //por medio de la variable fila
    if(fila == 1 || fila == Max)
    {
    System.out.print("*");
    }
    else // en caso contrario el control pasa a los renglones para pintar los asteriscos y los espacios en blanco
    //por medio de la variable columna
    {
    //dado que el primer renglon ya fue llenado con asteriscos el siguiente renglon debera iniciar y finalizar con un asterisco
    //y los demas espacios seran llenados con espacios en blanco
    if(columna == 1 || columna == Max)
    System.out.print("*");
    else
    System.out.print(" ");
    }
    ++columna;
    }
    --fila;

    System.out.println();
    }
    }
    else
    System.out.println("Error se introdujo un valor no válido");
    }

    ResponderEliminar
    Respuestas
    1. Hola, disculpa, ¿me podrías explicar el programa más detalladamente? es que es parte de mi tarea y no entiendo muy bien.

      Eliminar
  3. ¡Hola, Edgar! Gracias por compartir tu programa. Con respecto al otro, al de la conversión de binario a decimal, te dejo éste a ver si te sirve: Decimal a Binario. Es un programa en lenguaje C, pero no es difícil de trasladar a java. Saludos.

    ResponderEliminar
    Respuestas
    1. gracias por la ayuda la tomare en cuenta pero en el libro comentan que solo se utilize el operador % y la división sin utilizar arrays lo intentaré como lo plantea el libro y si lo logro lo comparto con ustedes

      Eliminar

Related Posts Plugin for WordPress, Blogger...