110 likes | 294 Views
Resolución de Problemas y Algoritmos Buffer - Read & Readln. Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Bahía Blanca - Argentina. ¿qué es ENTER ?. En las máquinas de escribir mecánicas al finalizar un renglón hay que hacer dos movimientos:
E N D
Resolución de Problemas y AlgoritmosBuffer - Read & Readln Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Bahía Blanca - Argentina
¿qué es ENTER ? • En las máquinas de escribir mecánicas al finalizar un renglón hay que hacer dos movimientos: • 1) retorno de carro • 2) nueva línea • En las computadoras, la tecla ENTER tiene asociados 2 caracteres cuyos códigos ASCII son 13 y 10 • 1) ASCII 13: retorno de carro (CR: carriage return) • 3) ASCII 10: nueva línea (LF: line feed) • Los caracteres 13 y 10 son caracteres de control y al imprimirlos en pantalla producen un efecto en lugar de mostrar algo visible. Resolución de Problemas y Algoritmos
... El buffer de lectura: concepto • Todos los datos ingresados por teclado se almacenan en una zona llamada buffer de lectura (o simplemente buffer). • Todos los caracteres ingresados queda retenidos en el buffer hasta que son leídos apropiadamente por los programas (en el caso de Pascal por read y readln). • La capacidad del bufferdepende de cada computadora. • El buffertiene un puntero (), el cual apunta al elemento que está siendo leido por un programa. Resolución de Problemas y Algoritmos
Read: comportamiento del buffer • Al ejecutar un READ, el programa se suspende y todo lo ingresado por teclado se almacena en el buffer de lectura. • Al presionar la tecla ENTERla ejecución continúa y el procedimiento READleedel buffer los valores que necesita para asociar a las variables. program eje_read; var a,b,c,d: integer; begin write('Ingrese valores numericos:'); read(a); read(b); read(c); readln; d := a + b + c; writeln('El valor de D es ',d); readln; end. Resolución de Problemas y Algoritmos
1 0 2 3 ... [13][10] Read: comportamiento del buffer • En el programa eje_read, al ejecutar la primera primitiva read, el programa se suspenderá y esperará a que ingresemos datos por teclado y ENTER. Supongamos que ingresamos 10 2 3, y luego ENTER. • En el buffer se habrán guardado todos los caracteres que hemos ingresado, incluídos los espacios en blanco y el [13][10] (ENTER). • El puntero () indica el primer carácter a leer. Resolución de Problemas y Algoritmos
1 0 2 3 ... [13][10] Read: comportamiento del buffer • Una vez que se presiona ENTER, la primitiva READ entra en acción: • READ comienza a leer del buffer en la posición que indica el puntero (), y según sea el tipo de la variable para la cual está leyendo un valor, sigue leyendo hasta encontrar un dato de ese tipo. • Por ejemplo: cada vez que encuentre uno o más espacios en blanco, el read supone que termina un entero y comienza otro. • Mientras READ va leyendo del buffer, el puntero (), se va desplazando indicando el próximo carácter a leer. Resolución de Problemas y Algoritmos
[13][10] 1 0 2 3 ... Read: comportamiento del buffer • Como la variable A es de tipo integer, cuando el read lee un espacio en blanco almacena el número que ha leído en la variable A. Lo mismo para B y C. La variable A recibe el valor 10 Resolución de Problemas y Algoritmos
Read: comportamiento del buffer [13][10] 1 0 2 3 ... • Como la variable A es de tipo integer, cuando el read lee un espacio en blanco almacena el número que ha leído en la variable A. Lo mismo para B y C. La variable A recibe el valor 10 La variable B recibe el valor 2 Resolución de Problemas y Algoritmos 8
Read: comportamiento del buffer [13][10] 1 0 2 3 ... • Como la variable A es de tipo integer, cuando el read lee un espacio en blanco almacena el número que ha leído en la variable A. Lo mismo para B y C. La variable A recibe el valor 10 La variable B recibe el valor 2 La variable C recibe el valor 3 Resolución de Problemas y Algoritmos 9
[13][10] 1 0 2 3 ... ... Read: comportamiento del buffer • En este punto ya se ejecutaron 3 primitivas read: read(A); read(B); y read(C); pero en el buffer aún hay caracteres. • Está el enter representado por los caracteres 13 y 10. • La primitiva READLN saca un enter del buffer y vuelve el puntero al principio, dejando el buffer vacío y preparado para una nueva entrada de datos. Resolución de Problemas y Algoritmos