Informática, pregunta formulada por bryanarguellov, hace 1 año

Suponiendo que las teclas guion y paint tienen la misma dirección y longitud y cada una representaría 1 unidad, realice un programa que dibuje q 1 cuadrado por pantalla cuyo valor de lado será ingresado por teclado.
Ojo: el programa se lo hace en C++

PORFA AYUDENME CON ESE EJERCICIO !!! LO NECESITO DE INMEDIATO !!

Respuestas a la pregunta

Contestado por LeonardoDY
0

Para dibujar un cuadrado en la pantalla hay que recordar que el modo consola tiene 40x25 lineas, a falta de especificación sobre la interfaz de video, vamos a asumir que esta es el modo consola de Linux.

El código ASCII del caracter '|' es 0x7C, y el del caracter '-' es 0x2D, eso si se quiere hacer un cuadrado que sea solo contorno, sino 0xDB es el caracter █. La clase tendría dos arrays, uno para el lado horizontal y otro para el vertical y el máximo cuadrado sería 25x25:

class Cuadrado{

       public:

                    Cuadrado(void);

                    void vDibujar(void);

                    void vIngresaLado(void);

       private:

                    int iLado;

                    char sLadoHorizontal[26];

                    char sLadoVertical[26];//Uno más para el NULL

      }

int main(void)

{

       Cuadrado        MiCuadrado();

      MiCuadrado.IngresaLado();

      MiCuadrado.vDibujar();

      return 0;

}

Cuadrado::Cuadrado(){

      iLado =0;

}//En el constructor por ahora solo inicializo el lado.

void Cuadrado::IngresaLado(void){

      printf("Ingresar lado del cuadrado (menor a 25): ");

      cin>>iLado; //Ingresa el lado por el teclado;

}

void Cuadrado::vDibujar(void){

     for(int i=0;i<iLado;i++){

              sLadoHorizontal[i]='-';

              sLadoVertical[i]='|';

     }

     sLadoHorizontal[iLado]='\0';//Tantos guiones como longitud del lado

     sLadoVertical[iLado]='\0';

     printf("%s",sLadoHorizontal);//Lados horizontales.

     printf("\033[iLado,0H%s",sLadoHorizontal);//\033[l,cH mueve el cursor a la columna c y fila l.

     //Ahora los lados vertivales

    for(int i=0;i<iLado;i++){

          printf("\033[i,0H%c",sLadoVertical[i]);//lado izquierdo

          printf("\033[i,iLadoH%c",sLadoVertical[i]);

}

Esto sería para un cuadrado contorno, si el cuadrado es relleno sería mucho más sencillo, lo que haríamos es crear un string de longitud iLado de caracteres █ cuyo código ascii es 0xDB, y luego imprimir iLado veces ese string uno debajo del otro.

Otra forma también es con el comando \E[xx;3m donde xx es un número del 30 al 37 o del 90 al 97 donde cada uno representa a un color, este comando cambia el color de fondo del caracter, y ahí crearíamos strings de caracteres ' ' y para imprimirlos se hace, en el método vDibujar

for(int i=0;i<iLado;i++)

       sLado[i]=' ';

for(int i=0;i<iLado;i++){

       printf("\E[xx;3m%s\E[00m\n",sLado);.

}

Y queda nuestro cuadrado.

Otras preguntas