You are on page 1of 3

Programaci on

Control Individual en Laboratorio


4 de Septiembre de 2014
N umeros binarios
Nuestro esquema de numeracion decimal utiliza base 10, por lo que existen 10 dgitos: 0 . . . 9. La
interpretacion que hacemos de un n umero depende de la posicion en que aparecen los dgitos. Estas
posiciones estan asociadas a las potencias de 10 (la base). As, el dgito de mas a la derecha las
unidades esta asociado a la potencia 10
0
, el siguiente las decenas esta asociado a la potencia 10
1
,
y as sucesivamente. El n umero representado corresponde a la sumatoria de sus dgitos multiplicados
por la potencia correspondiente a la posicion donde aparecen. Por ejemplo:
354 = (3 10
2
) + (5 10
1
) + (4 10
0
) = 300 + 50 + 4.
Por otra parte, en el esquema de numeracion binario se utiliza base 2, por lo que existen solo 2
dgitos: 0 y 1. Sin embargo, la interpretacion de los n umeros se hace de la misma manera, con la
salvedad de que a las posiciones se asignan las potencias de 2. Por ejemplo:
101011
2
= (1 2
5
) + (0 2
4
) + (1 2
3
) + (0 2
2
) + (1 2
1
) + (1 2
0
) = 32 + 8 + 2 + 1 = 43
10
Observe que utilizamos subndices para denotar la base que se esta utilizando para la representacion
de un n umero.
En este laboratorio usted debe escribir dos funciones que permitan completar un programa que le
sera suministrado, para convertir un n umero binario a decimal.
El n umero que se desea convertir es recibido por la lnea de comandos del programa, en la forma de
un string en el que en cada posicion se encuentra un caracter 0 o 1 representando los dgitos
binarios del n umero. Es importante tomar en cuenta que el dgito mas signicativo, es decir, el de
mas valor, se encontrara almacenado en la posicion 0 del string.
La funcion main() de su programa ya se encuentra escrita y no debe ser modicada. Este codigo se
adjunta al nal de este enunciado y esta disponible para que lo descargue a traves de Educandus.
Las instrucciones que vale la pena destacar, pues muestran el uso de las funciones que usted debe
escribir, son las siguientes:
numdigitos = convertir(argv[1], numbinario);
decimal = interpretar(numbinario, numdigitos);
Aqu, argv[1] contiene el n umero binario a convertir, pasado como argumento al programa.
La funcion convertir() convierte el arreglo de caracteres pasado como primer parametro, a un
arreglo de enteros que contiene los mismos dgitos, en el orden inverso, y almacenados como enteros
en el arreglo pasado como segundo parametro. Como resultado, la funcion retorna la cantidad de
dgitos que contiene el n umero binario almacenado, y que puede ser obtenido como la longitud del
string original.
Por su parte, la funcion interpretar() convierte a decimal el n umero binario almacenado en el
primer parametro recibido, y que contiene la cantidad de dgitos indicados en el segundo parametro,
retornando este equivalente decimal como resultado.
Usted solo debe implementar estas dos funciones. No modique la funcion main() que le fue sumi-
nistrada. No es necesario que haga validaciones. Puede suponer que siempre se le pasara al programa
un argumento correcto, compuesto unicamente por ceros y unos.
Sugerencia: Para convertir un caracter c a entero, realice la operacion: c - 0.
Ejemplos de posibles ejecuciones
$ ./adecimal 1001
1001(2) = 9(10)
$ ./adecimal 10000001
10000001(2) = 129(10)
$ ./adecimal 1111111111111111
1111111111111111(2) = 65535(10)
Programa suministrado
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_DIGITOS 30
main(int argc, char *argv[]) {
int numbinario[MAX_DIGITOS];
int decimal, numdigitos;
if (argc != 2) {
printf("Uso correcto: %s numerobinario\n", argv[0]);
exit(EXIT_FAILURE);
}
if (strlen(argv[1])>MAX_DIGITOS) {
printf("Numero binario no debe exceder %d digitos\n", MAX_DIGITOS);
exit(EXIT_FAILURE);
}
numdigitos = convertir(argv[1], numbinario);
decimal = interpretar(numbinario, numdigitos);
printf("%s(2) = %d(10)\n", argv[1], decimal);
exit(EXIT_SUCCESS);
}

You might also like