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
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.