Laboratorio 1: Terminal de Linux y primer programa en C March 28, 2013 Objetivos: - Conocer la consola de Linux y entender el funcionamiento de algunos comandos simples. - Escribir un programa en C, entender su estructura. - Compilar y ejecutar un programa en C. - Conversion de numeros entre distintas bases (Binario, decimal, hexadecimal) Herramientas de laboratorio: - Sistema operativo Linux, Ubuntu 12.04 - Editor de texto Emacs - Terminal de Linux 1
1 La Terminal de Linux La terminal o consola es un programa que viene normalmente incluido en Linux y permite ejecutar una serie de comandos que otorgan mayor acceso al usuario, como por ejemplo modificar los permisos de un archivo, ejecutar programas como superusuario, en fin, etc. La aplicacion se llama Terminal, en Ubuntu existe un shortcut para abrirla presionando Control + Alt + T Navegando por la jerarquia de archivos dentro de la consola Al iniciar la consola, estaremos ubicados en /home/nombreusuario Para conocer el contenido de la carpeta actual usamos ls. javier@kosmos: $ ls ACM Documents Music Public Videos ankama Downloads NetBeansProjects SO Desktop LabProgramacion Pictures Templates Para movernos entre directorios usamos el comando cd, Para ir a la carpeta LabProgramacion. javier@kosmos: $ cd LabProgramacion javier@kosmos: /LabProgramacion$ Volver a la carpeta javier (la carpeta anterior) javier@kosmos: /LabProgramacion$ cd.. javier@kosmos: $ Manipulacion de Archivos Crear un nuevo directorio javier@kosmos: /LabProgramacion/Lab01$ mkdir Directorio1 Eliminar un directorio javier@kosmos: /LabProgramacion/Lab01$ rm -r Directorio1 2
Mover un archivo javier@kosmos: /LabProgramacion$ mv Archivo1 Lab01 2 Primer Programa en C #include <stdio.h> int main() { /* My first program */ printf("hello, World! \n"); } return 0; #include <stdio.h>: Antes de procesar nuestro programa, el compilador incluye el codigo ubicado en stdio.h, lo que nos permite usar la funcin printf int main(): Funcion de entrada del lenguaje C / / : Comentarios, el compilador ignora esta porcion de codigo. Es solo para que el programador pueda dejar anotaciones. printf: Funcion ubicada en stdio.h, printf imprime en la pantalla lo que se le pasa como argumento. Return 0: Valor que retorna la funcion main Compilar nuestro programa en C Para compilar nuestro programa hello.c, ejecutaremos gcc desde la terminal javier@kosmos: /LabProgramacion/Lab01$gcc hello.c Por defecto, gcc generar el archivo a.out Para ejecutarlo hacemos lo siguiente: javier@kosmos: /LabProgramacion/Lab01$./a.out Hello, World! Para darle un nombre al archivo javier@kosmos: /LabProgramacion/Lab01$gcc hello.c -o hello 3
3 Conversion entre bases Decimal(Base 10) a binario(base 2) Ejemplo: 123,77 a binario Separamos el numero en parte entera (123) y parte decimal (0.77) Para convertir el numero 123, lo dividimos por dos hasta que sea 0 y en cada division guardamos el resto. 123/2 = 61 1 61/2 = 30 1 30/2 = 15 0 15/2 = 7 1 7/2 = 3 1 3/2 = 1 1 1/2 = 0 1 Finalmente, vemos la parte derecha de la tabla desde abajo hacia arriba para determinar el numero en binario. 123 en binario es 1111011 Ahora falta la parte decimal, en este caso multiplicamos por 2 y guardamos la parte entera. Luego tomamos la parte decimal y la volvemos a multiplicar por 2, este proceso se puede repetir cuantas veces se quiera dependiendo de la precision que queramos obtener 0.77 2 = 1.54 1 0.54 2 = 1.08 1 0.08 2 = 0.16 0 0.16 2 = 0.32 0 0.32 2 = 0.64 0 0.64 2 = 1.28 1 Nuevamente vemos la parte derecha pero ahora desde arriba hacia abajo, quedando el numero 0.77 en binario como 0.110001 0.110001 en realidad es 0.765625, si hubieramos realizado mas pasos el numero resultante estaria cada vez mas cerca de 0.77 Por lo tanto, 123.77 en binario es 1111011.110001 4
Binario a decimal Ejemplo: 1101 a decimal Un numero decimal(base 10) es de la siguiente forma: 123 = 1 100 + 2 10 + 3 1 = 1 10 2 + 2 10 1 + 3 10 0 De forma analoga: 1101 = 1 2 3 + 1 2 2 + 0 2 1 + 1 2 0 = 13 en decimal Binario a hexadecimal(base 16) Ejemplo: Transformar 11110010110001 a hexadecimal Dividimos el numero en binario en grupos de 4 numeros, luego cada grupo de 4 numeros se pasa a decimal y de decimal a hexadecimal de acuerdo a la siguiente tabla: (Si un grupo queda con menos de 4 numeros, se completa colocando ceros a la izquierda) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 1 2 3 4 5 6 7 8 9 A B C D E F Binario 0011 1100 1011 0001 Decimal 3 12 11 1 Hexadecimal 3 C B 1 Por lo tanto, 11110010110001 en hexadecimal es 0x3CB1, el 0x es para enfatizar que el numero esta en hexadecimal. 5