me alegra haber sido de ayuda.
Un saludo
Un saludo
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes MenúCita de: arfgh en 31 Julio 2013, 21:24 PM
si que lo he leído, pero no entiendo por qué dicen 'simular' cuando en realidad se logra un comportamiento idéntico o similar.
5
/ \
2 8
/ \ /
1 3 6
\
7
1
/
2
/
3
/
5
/
6
/
7
/
8
#define CIFRAS 3
#define EXPAND_STRING(X) #X
#define STRING(X) EXPAND_STRING(X)
#define STR_CIFRAS STRING(CIFRAS)
void poner_espacios( int cantidad )
{
while ( cantidad > 0 )
{
--cantidad;
putchar( ' ' );
}
}
void pintar_nodo( arbolptr nodo, int offset )
{
int i;
poner_espacios( offset );
if ( nodo == NULL )
{
printf ( "%"STR_CIFRAS"c", ' ' );
}
else
printf( "%"STR_CIFRAS"d", nodo->info );
poner_espacios( offset );
}
void recorrer_nodo(arbolptr nodo, int nivel, int offset )
{
if ( nivel == 0 )
{
// Hemos llegado al nivel buscado
pintar_nodo( nodo, offset );
}
else
{
// Seguimos bajando, si no hay nodos, los simulamos
if ( nodo == NULL )
{
recorrer_nodo( NULL, nivel - 1, offset );
recorrer_nodo( NULL, nivel - 1, offset );
}
else
{
recorrer_nodo( nodo->left, nivel-1, offset );
recorrer_nodo( nodo->right, nivel-1, offset );
}
}
}
int ancho_nivel( int nivel, int nivel_max )
{
if ( nivel == nivel_max )
return CIFRAS;
else
return 2 * ancho_nivel( nivel + 1, nivel_max ) + 1;
}
int max_niveles_arbol( arbolptr nodo )
{
int niveles = 0;
if ( nodo != NULL )
{
++niveles;
int niveles_left = max_niveles_arbol( nodo->left );
int niveles_right = max_niveles_arbol( nodo->right );
niveles += ( niveles_left > niveles_right )? niveles_left : niveles_right;
}
return niveles;
}
void pintar_nivel( arbolptr root, int nivel, int max_niveles )
{
// Vamos a comprobar el ancho de los niveles empezando por el mas bajo.
// Si un nivel no entra en pantalla subimos al anterior.
// La idea es que se puedan centrar todos los niveles que entren en la pantalla
int max_length = max_niveles * 4 + 3;
while ( max_length > 80 )
{
--max_niveles;
max_length = max_niveles * 4 + 3;
}
int elems_ultimo_nivel = pow( 2.0, max_niveles );
int offset_base = ( 80 - 4 * elems_ultimo_nivel - 1 ) / 2;
int offset_nivel = ( ancho_nivel( nivel, max_niveles ) - CIFRAS ) / 2;
// Primero se pintan los nodos
poner_espacios( offset_base );
recorrer_nodo( root, nivel, offset_nivel );
putchar( '\n' );
// Y despues las barras ( esta parte está sin hacer )
//poner_espacios( offset_base );
//poner_barras( root, nivel, offset_nivel );
putchar( '\n' );
}
void arbolgrafico(arbolptr root )
{
int niveles = max_niveles_arbol( root );
int nivel;
for ( nivel=0; nivel < niveles; ++nivel )
{
pintar_nivel( root, nivel, niveles );
}
}
Cita de: ivancea96 en 26 Julio 2013, 16:30 PM
Función que devuelve true si un numero es primo :p
Quizás se pueda optimizar más, pero weno jeje
bool primo(unsigned int u){
unsigned int i=0;
if(u<2) return FALSE; //Comprobar si es 1
for (i=2; u%i!=0; i+=2) {if(i>u/2){ i=u; break;}} //Rompera cuando se encuentre un divisor, o el 'i' sea mayor que la mitad de el numero (para ahorrar tiempo)
if (u == i) return TRUE; //Si el divisor encontrado es el mismo numero, es primo
else return FALSE; //Sino, no lo es
}
void main( )
{
for ( unsigned int i=2;i<20;++i )
{
if ( primo( i ) )
std::cout << i << " es primo" << std::endl;
}
}
2 es primo
3 es primo
5 es primo
7 es primo
9 es primo
11 es primo
13 es primo
15 es primo
17 es primo
19 es primo
bool primo(unsigned int u)
{
bool to_return = true;
if( u<2 )
to_return = false; // Comprobar si es 1
else if ( u != 2 )
{
if ( u % 2 == 0 ) // Divisible entre 2
to_return = false;
else
{
unsigned int tope = u/3;
for ( unsigned int i=3; i <= tope && to_return; i+=2 )
to_return = ( u % i != 0 );
}
}
return to_return;
}
Cita de: 0xDani en 30 Julio 2013, 00:45 AM
Si te digo que ya lo usé y tiempo después me pasé al Qt Creator...
Principalmente fue por el resaltado y el autocompletado de sintaxis, es lo que más valoro en un IDE, porque para compilar muchas veces termino haciéndolo por consola igualmente... Y en eso el Qt Creator le da mil vueltas a Code::Blocks.