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); }