| Duración |
Del 10 Al 26 de junio 2009 (3 semanas) |
| Horario: |
De 10a.m. a 12 p.m. |
| Dias: | Miércoles y viernes |
| Costo: | Q.500.00 |
| Salon: | Laboratorio 215 |

Ciencias de la computación III - Estructuras de máquinas
Laboratorio #02
Trabajando con enteros y ASCII
Adrián CatalánPropósito
- Poner en práctica conceptos básicos del lenguaje C, como funciones y control de flujo
- Comprender la representación a través del codigo ASCII
- Trabajar con arreglos de carácteres previo al trabajo con punteros
- Recordar un poco de bases no decimales
Funciones atoi - itoa
Internamente, la computadora únicamente puede almacenar números (0's y 1's) y cuando queremos guardar palabras es necesario tener cierto código para representar las letras a través de números. El código más utilizado para este fin es el código ASCII, en el cual un número de 8 bits (8 digitos binarios) representa a cada letra. Dado que es posible representar digitos numericos también, a los mismos números se les ha asignado un código ASCII. Por ello por ejemplo, el carácter que representa al número 0, el ASCII ‘0’ tiene el número 48 asignado. Si desea revisar el resto de la tabla ascii puede verla aquí.
Cuando tenemos una cadena de carácteres que representa a un número es muy común que querramos convertir la cadena al número que representa, teniendo un solo número es muy fácil e intuitivo pues solo hay que restarle el decimal 48. Pero al tener mas de un digito el asunto se vuelve un poco mas complejo y eso es lo que realiza la función ATOI(Ascii TO Integer).
La libreria ctype.h incluye una implementación de esta funció pero para este laboratorio vamos a agregarle un poco de cosas. La firma para la función atoi que usted debe realizar es
int atoi(char s[], int b)
siendo char s[] un arreglo que es una cadena de carácteres (a.k.a. string), que contiene cierto número en cierta base númerica establecida por el segundo parámetro int b.
Esto quiere decir que su funcion será llamada por ejemplo así:
int num = atoi("15",10) /* la variable num contendria entonces el número 15 */
Para las bases no decimales hay ciertos estándares, por ejemplo si la base es octal(base 8) se antepone un ‘0’ al número y si la base es hexadecimal(16) se antepone ‘0x’ al número. Recuerde que un sistema númerico de base N tiene N símbolos que van desde 0 hasta N-1, el sistema decimal(base 10) cuenta con los símbolos 0,1,2,3,4,5,6,7,8 y 9 ergo el sistema octal (base 8) cuenta con los símbolos 0,1,2,3,4,5,6 y 7. Cuando se acaban los números empezamos a utilizar las letras, entonces el sistema hexadecimal (base 16) cuenta con los símbolos 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F. Por lo anterior, su función también puede recibir llamadas de la siguiente forma:
int num = atoi("0xf",16) /* la variable num contendria entonces el número 15 */
int num = atoi("0xF",16) /* la variable num contendria entonces el número 15 */
int num = atoi("F",16) /* la variable num contendria entonces el número 15 */
int num = atoi("f",16) /* la variable num contendria entonces el número 15 */
Debe notar que al recibir letras pueden ser tanto mayúsculas como minúsculas debe realizarse la conversión, de la misma forma por si a caso se le olvida a alguien colocar el prefijo ‘0x’ en los hex ó ‘0’ en los octales no debe mostrarse ningún error y realizar la conversión correctamente al igual que si los prefijos si se colocan. Únicamente para estas dos bases se tienen prefijos estandarizados. Si en caso el input recibido fuera inválido su función debe devolver cero, por ejemplo
int num = atoi("0xf",10)
Se considera inválido cuando la cadena contiene símbolos no válidos para la base dada. Nuestra función atoi convierte cadenas representando números de distintas bases a números en base decimal. Recuerde tomar en cuenta el signo del número.
Tal como se lo debe estar imaginando, la función itoa realiza lo opuesto de atoi, ITOA(Integer TO Ascii) convierte un número entero a una cadena de carácteres. La firma para la función itoa que usted debe realizar es
void itoa(int n, int b, char s[])
Esta función devuelve un string, pero aun nos falta ver algunas cosas en cuanto a los punteros y a los arreglos de carácteres por lo que para este laboratorio la función será de tipo void y rellenará un arreglo de carácteres que recibe como argumento en char[] s.Al igual que en el caso anterior, su programa recibe una base númerica a través del argumento int b y recibe también el número a convertir en int n. Es importante notar que el número recibido se encuentra en base 10 y el argumento int b me dice la base a la que lo voy a pasar en la cadena. Su función itoa será llamada por ejemplo así:
char num[3]; /* sabemos que la respuesta es de 2 digitos y al final va un \0 */
itoa(0xF,10,num); /* llamada a la función */
printf("%s",num); /* la cadena num contiene el valor y se imprime a pantalla 15*/
itoa(12,16,num);
printf("%s\n",num); /* la cadena num contiene el valor y se imprime a pantalla 0xB*/
La función itoa, cuando se trate de base octal o hexadecimal antepondrá los prefijos como corresponda (‘0’ y ‘0x’). Al igual que atoi, la función itoa debe tomar en cuenta el signo del número cuando corresponda.
Entrega
La entrega se realizará a través del GES el día Viernes 23 de enero del 2009, debe enviar un archivo llamado seccionCarnet.c conteniendo sus funciones atoi, itoa y cualquier otra función que haya utilizado, no debe enviar una función main.
NOTA debe seguir instrucciones y entregar únicamente un archivo .c, no enviar .cpp o .txt, no enviar el ejecutable .exe y no enviar archivos comprimidos .zip o .rar
De no seguir las instrucciones se le penalizará con puntos menos en su asignación
- Inicie sesión para enviar comentarios