El mundo de los caracteres Clase 6 Introducción a la Computación Patricia Borensztejn Entrada de Datos por teclado • ¿Qué ocurre cuando apretamos una tecla? • El teclado es un periférico que se comunica con el procesador Entrada por teclado El teclado de la computadora consta de una matriz de contactos, que al presionar una tecla, cierran el circuito de la tecla. Un microcontrolador situado en el teclado detecta la presión de la tecla, y genera un código. Entrada por teclado Al soltarse la tecla, se genera otro código. De esta manera el chip localizado en la placa del teclado puede saber cuándo fue presionada y cuándo fue soltada, y actuar en consecuencia. Los códigos generados son llamados Códigos de barrido (Scan code, en inglés). Entrada por teclado Una vez detectada la presión de la tecla, los códigos de barrido son generados, y enviados de forma serial a través del cable y con el conector del teclado, llegan a la placa madre de la PC, a uno de sus chips que es el controlador del teclado. Entrada por teclado Este chip compara el código de barrido con el correspondiente a la Tabla de caracteres. Genera una interrupción por hardware, y envía los datos en forma paralela a través del bus al procesador. Entrada por teclado La CPU, al ser interrumpida, ejecuta una rutina (función) que se llama «driver» o manejador del teclado. Esta rutina forma parte del SO. La rutina lee el dato que llega por el bus de datos y lo pone en una cola en memoria, a disposición del programa o aplicación que está esperando el dato. Códigos ASCII • La función del controlador del teclado es traducir el «scan code» que le envía el teclado a un código ASCII. • ASCII: American Standard Code for Information Interchange. – Es una correspondencia entre un carácter y su representación en 7 bits. – También hay correspondencia para los caracteres no imprimibles, como new line, tab, etc. – Los caracteres imprimibles tienen códigos que van desde el : • 33 al 126: letras, dígitos, signos de puntuación y otros signos. Tipo Char • Es una variante de los enteros: almacena enteros con signo en Ca2 en un byte. • Es frecuente usar variables de tipo char para almacenar caracteres (de ahí su nombre) codificados en ASCII . Si una variable a es de tipo char, la asignación a=’0’ es absolutamente equivalente a la asignación a=48, pues el valor ASCII del dígito 0 es 48. Entrada de datos por teclado • Siempre que entramos datos por teclado, lo hacemos carácter a carácter. • Por ejemplo: Ingresa el n·mero a factorizar 600851475143 • Deja el número a disposición de la aplicación en el buffer del teclado como una sucesión de doce bytes. Es función del printf convertirlo a long long int, es decir a 8 bytes. Problema: Char 1 (Problema 5) • Vamos a hacer un programa que lea un número por teclado carácter a carácter y lo convierta en número en Ca2 de 8 bits (short int) (pueden ser positivos o negativos) • El número que leemos no debe ser mayor que el rango de representación de los enteros de 8 bits. • Los caracteres ASCII de los números : 0 al 9 son 48 a 57. Tienen que buscar el correspondiente al signo «-» • Para leer carácter utilizamos la función scanf. • La salida del programa deberá ser printf del entero resultado. Si es igual a lo que entramos, el programa funcionó bien. Para los que quieran: Getchar() • Para leer solamente un carácter se puede utilizar también getchar. c = getchar() • El que quiera, puede utilizar un array de caracteres, pero entonces debe leer un entero de 32 bits! (luego explicaremos arrays) char c[10]; Getchar en Python? >>> import msvcrt >>> ch=msvcrt.getch() >>> print ch a