Diferencia entre revisiones de «Curso de Programación en C/Prog66»
								
								Ir a la navegación
				Ir a la búsqueda
				
			
		
					
								
							
		 (→Explicación)  | 
			
(Sin diferencias) 
 | 
Revisión actual del 18:09 10 may 2014
Prog66
 1 #include <stdio.h>
 2 
 3 void a_binario( unsigned long n );
 4 
 5 int main( void )
 6 {
 7   unsigned long numero;
 8   printf( "Que intero quieres convertir en binario (q para terminar)? " );
 9   while( scanf( "%lu", &numero ) == 1 )
10   {
11     printf("Equivalente Binario: ");
12     a_binario( numero );
13     putchar( '\n' );
14     putchar( '\n' );
15     printf( "Que intero quieres convertir en binario (q para terminar)? " );
16   }
17   printf( "Listo.\n" );
18 
19   return 0;
20 }
21 
22 void a_binario( unsigned long n )
23 {
24   int r;
25 
26   r = n % 2;
27   if ( n >= 2 )
28     a_binario( n / 2 );
29   putchar( '0' + r );
30 
31   return;
32 }
Resultado
[rrc@Pridd CClase]$ gcc -Wall -O2 -o Prog66 Prog66.c [rrc@Pridd CClase]$ ./Prog66 Que intero quieres convertir en binario (q para terminar)? 1 Equivalente Binario: 1 Que intero quieres convertir en binario (q para terminar)? 2 Equivalente Binario: 10 Que intero quieres convertir en binario (q para terminar)? 3 Equivalente Binario: 11 Que intero quieres convertir en binario (q para terminar)? 4 Equivalente Binario: 100 Que intero quieres convertir en binario (q para terminar)? 5 Equivalente Binario: 101 Que intero quieres convertir en binario (q para terminar)? 55 Equivalente Binario: 110111 Que intero quieres convertir en binario (q para terminar)? 44444555 Equivalente Binario: 10101001100010101110001011 Que intero quieres convertir en binario (q para terminar)? q Listo.
Explicación
Ejemplo para el número 4: El truco está en seguir el flujo de control hasta volver a main(). Notece que la variable r de uno a otro bloque, aunque se llama igual no es la misma. Se crea en cada bloque, posee su propia dirección de memoria y no es sobreescrita por la calculada en otro bloque.
n = 4: <-------- Viene de main()
a_binario (4) --------> n = 4 {
int r; r = 4 % 2; --------> r = 0 if (4 >= 2) <-- Verdadero
       a_binario (4/2) --------> n = 2
       {
           int r;
           r = 2 % 2; --------> r = 0
           if (2 >= 2) <-- Verdadero
               a_binario (2/2) --------> n = 1
               {
                   int r;
                   r = 1 % 2; --------> r = 1
                   if (1 >= 2) <-- Falso
                   putchar('0' + 1)--------> Imprime 1
                   return;
               }
           putchar('0' + 0)--------> Imprime 0
           return;
       }
   putchar('0' + 0)--------> Imprime 0
   return;
} <-------- Vuelve el control a main()
Impresión final: 100