ASCII Art

Hola a todos,

ASCII Art es el hecho de hacer dibujos y formas mediante caracteres puestos en la consola.
El ejercicio de hoy es: pintar por consola un circulo(relleno), una X, un marco  y un rectangulo (relleno)

Es fácil y os servirá para ir practicando los bucles y los condicionales.


#include <iostream>
#include <stdlib.h>
#include <math.h>

void linea_ASCII(char car,int ancho)
{
 int i;
 
 for(i = 0 ; i < ancho ; ++i)
 {
  std::cout << car;
 }
 
 std::cout << std::endl;
}

void marco_ASCII(char car,int ancho, int alto)
{
 int i,j;
 
 for(i = 0 ; i < alto; ++i )
 {
  for(j = 0 ; j < ancho  ; ++j )
  {
   if( (i == 0) || (i==(alto-1)) )
   {
    std::cout << car;
   }
   else
   {
    if( (j == 0) || (j == (ancho-1)) )
     std::cout << car;
    else
     std::cout << " ";
   }
  }
  std::cout << std::endl;
 }
}

void rectangulo_ASCII(char car,int ancho, int alto)
{
 int i,j;
 
 for(i = 0 ; i < alto; ++i )
 {
  for(j = 0 ; j < ancho  ; ++j )
   std::cout << car;
  
  std::cout << std::endl;
 }
}

void X_ASCII(char car,int ancho)
{
 int i,j;
 
 for(i = 0 ; i < ancho; ++i )
 {
  for(j = 0 ; j < ancho  ; ++j )
  {
   if( ( i == j) || (ancho-1-i == j) )
   {
    std::cout << car;
   }
   else
   {
    std::cout << " ";
   }
  }
  std::cout << std::endl;
 }
}

void circulo_ASCII(char car,int ancho)
{
 int i,j;
 int centro = ancho/2;
 for(i = 0 ; i < ancho+1; ++i )
 {
  for(j = 0 ; j < ancho+1  ; ++j )
  {
   if( sqrt(( i - centro)*( i - centro) +  ( j - centro)*( j - centro)) <= centro )
   {
    std::cout << car;
   }
   else
   {
    std::cout << " ";
   }
  }
  std::cout << std::endl;
 }
}

int main(int argc, char** argv)
{
 circulo_ASCII('O',10);
 linea_ASCII('-',40);
 std::cout << std::endl;
 
 X_ASCII('x',10);
 linea_ASCII('-',40);
 std::cout << std::endl;
 
 marco_ASCII('e',10,4);
 linea_ASCII('-',40);
 
 rectangulo_ASCII('y',10,4);
 linea_ASCII('-',40);
 system("pause");
 return 0;
}