Nombre Password [ Regístrate ]

Dibujos (OIE 1 - 1997) - Código en C
#include<stdio.h>
#include<string.h>

char ff[4]={0,0,1,1}; // Contienen la informaci¢n de c¢mo modificar los l¡mites
char cc[4]={0,1,1,0}; // para pasar a los cuatro subcuadrantes.

int main()
{
	char mapa[16][17]; // Contiene el dibujo.
	char df,dc,hf,hc; // L¡mites de la regi¢n actual: df <= Filas < hf ; dc <= Columnas < hc
	char i; // Mitad del tama¤o de la regi¢n actual (incremento del l¡mite en una supuesta divisi¢n).
	char a,b,c; // Variables auxiliares.

	freopen("dibu.dat","r",stdin); // Abrir los ficheros.
	freopen("dibu.out","w",stdout);

	memset(mapa,'o',sizeof(mapa)); // Inicializar el mapa
	for(a=0;a<16;a++) // prepar ndolo para cuando se tenga que imprimir.
		mapa[a][16]=0;

	for(df=dc=0,hf=hc=16,i=8;scanf(" %c",&c)==1;) // Inicializamos las variables
	{ // y leemos hasta que se acabe el fichero.
		if(c=='x') // si hay que pintar:
		{
			for(a=df;a<hf;a++) // Pintamos
				for(b=dc;b<hc;b++)
					mapa[a][b]='x';
			df=dc=0; // e inicializamos las variables.
			hf=hc=16;
			i=8;
		 }
		else // Si hay que seguir dividiendo:
		{
			df+=ff[c-'1']*i; // se divide
			hf-=(!ff[c-'1'])*i;
			dc+=cc[c-'1']*i;
			hc-=(!cc[c-'1'])*i;
			i>>=1; // Y se disminuye el tama¤o de la regi¢n. Esto es igual a i/=2;
		 }
	 }

	for(a=0;a<16;a++) // Se imprime el resultado.
		printf("%s\n",mapa[a]);

	return(0); // Y se acaba el programa.
 }


© (2001-2008) ALGORITMIA.NET - Política de privacidad