Procedimientos Entrada/Salida
Desde el punto de vista del hardware, las instrucciones de entrada y salida le ayudan
al programa a comunicarse con un perif�rico de la computadora tal como una terminal,
una impresora o un disco.
Las instrucciones de entrada est�ndar, sirven para leer car�cteres desde el teclado,
y las instrucciones de salida est�ndar despliegan car�cteres en la pantalla.
En Pascal todas las operaciones de entrada/salida se realizan ejecutando unidades de
programa especiales denominados procedimientos de entrada/salida que forman parte del
compilador y sus nombres son identificadores est�ndar:
Procedimientos de entrada Read ReadLn
Procedimientos de salida Write WriteLn
Procedimientos Read y Readln
Los procedimientos predefinidos Read y ReadLn (contracci�n de Read Line), constituyen
la base para las instrucciones de entrada est�ndar.
Las instrucciones de entrada proporcionan datos durante la ejecuci�n de un programa.
Las instrucciones para llamar a los procedimientos Read y ReadLn son de la siguiente
forma :
Read(lista_de_variables);
ReadLn(lista_de_variables);
donde :
lista_de_variables : es una lista de identificadores de variables separados por
comas,los datos que se pueden leer son : enteros, caracteres, o cadenas. No se
puede leer un boolean o un elemento de tipo enumerado.
Los datos estructurados , arrays, registros o conjuntos, no se pueden leer globalmente
y se suele recurrir a dise�ar procedimientos espec�ficos.
La acci�n de la instrucci�n es obtener, del teclado, tantos valores de datos como
elementos hay en lista_de_variables. Los datos deber�n ser compatibles con los tipos
de las variables correspondientes en la lista.
Cada valor entero o real en el flujo de entrada puede ser representado como una
secuencia de caracteres en alguna de las formas permitidas para tales n�meros, y
puede estar inmediatamente precedido por un signo m�s o un signo menos. Cada valor
entero o real puede ser precedido por cualquier cantidad de caracteres blancos o
fines de l�nea, pero no deber� haber blancos o fines de l�nea entre el signo y el
n�mero.
La diferencia entre las instrucciones Read y ReadLn consiste en que Read permite
que la siguiente instrucci�n contin�e leyendo valores en la misma l�nea; mientras
que, con ReadLn la siguiente lectura se har� despu�s de que se haya tecleado el
car�cter de fin de l�nea.
Cuando se tienen datos de tipo char en una instrucci�n Read, los caracteres
blancos y los de fin de l�nea son considerados en el conteo de los elementos de
las cadenas de caracteres mientras no se complete el total especificado para cada
una de ellas. Cada fin de l�nea es tratado como un car�cter, pero el valor asignado
a la variable ser� un car�cter blanco.
Es aconsejable que cada cadena de caracteres se lea en una instrucci�n Read o
ReadLn por separado, para evitar el tener que ir contando hasta completar la
cantidad exacta de caracteres que forman la cadena ( o de lo contrario se tendr�n
resultados sorpresivos y frustrantes al verificar los datos le�dos ).
Ejemplo:
Var
nombre :string[30] ;
edad :integer;
estatura :real;
.
.
.
ReadLn(nombre);
ReadLn(edad);
ReadLn(estatura);
Procedimientos Write Y Writeln
La salida est�ndar se realiza en base a estos procedimientos predefinidos, y las
instrucciones para invocarlos toman las siguientes formas :
Write(lista_de_salida);
WriteLn(lista_de_salida);
donde :
lista_de_salida es una lista de variables, expresiones y/o constantes, cuyos valores
van a ser desplegados en la pantalla.
El procedimiento Write permite que la siguiente instrucci�n se realice en la misma
l�nea , mientras que WriteLn alimenta una nueva l�nea, antes de finalizar.
Por ejemplo, las instrucciones :
Write ('! HOLA ');
WriteLn('AMIGOS !');
producir�n la salida :
! HOLA AMIGOS !
cursor en la siguiente l�nea.
Mientras que :
Write('TECLEE F PARA FINALIZAR ==> ');
desplegar� :
TECLEE F PARA FINALIZAR ==> CURSOR
Para producir un rengl�n en blanco, se debe escribir :
WriteLn ;
Un valor booleano desplegar� cualquiera de las cadenas : TRUE o FALSE,
as� :
Write('20 + 30 = ', 20 + 30 ,' ES ', 20 + 30 = 50);
producir� :
20 + 30 = 50 ES TRUE
dejando el cursor en la misma l�nea, al final de TRUE.
Cuando un valor de salida se escribe sin una especificaci�n de longitud de campo, se
utilizar� la especificaci�n de campo por omisi�n.
La especificaci�n de longitud de campo por omisi�n depender� del tipo de valor de
salida y de la implementaci�n de Pascal.
As� tenemos que, para todas las implementaciones :
La especificaci�n de longitud de campo por omisi�n para los valores de tipo char es 1
Si el valor a ser desplegado requiere menos del n�mero de caracteres especificado, se
imprimir�n tantos caracteres blancos como sean necesarios para completar dicho n�mero.
Si el valor a ser desplegado requiere un n�mero de caracteres mayor que el
especificado,se usa la m�nima especificaci�n de longitud de campo que se requiera
para representar un valor de tipo real o entero, pero las cadenas ser�n truncadas
ajust�ndolas al campo especificado y desechar� los caracteres en exceso que se
encuentren m�s a la derecha.
En el caso de valores de tipo real, se puede utilizar una especificaci�n de longitud de
fracci�n.
Por omisi�n en Turbo Pascal, los valores de tipo real se desplegar�n en formato de
punto flotante (tambi�n llamado exponencial), as� :
Para el caso de valores positivos ( R >= 0.0 ), el formato es:
bbn.nnnnnnnnnnEsnn
Para valores negativos ( R < 0.0 ), el formato es :
b-n.nnnnnnnnnnEsnn
donde :
b = blanco
n = n�mero ( 1-9 )
s = signo ( + � - )
E = letra "E" para exponente
La especificaci�n de campo m�nima aceptada es :
para R >= 0.0 , SIETE caracteres.
para R < 0.0 , OCHO caracteres.
Ejemplos:
Sentencias Resultados
WriteLn ('Hola Mundo'); Hola Mundo
WriteLn('22' + '20'); 2220
WriteLn(pi); 3.1415926536E+00
WriteLn(3.0); 3.0000000000E+00
Debido a que Pascal alinea (justifica) las impresiones hacia la derecha del campo
correspondiente, cuando es necesario acomodar tabularmente los caracteres de cadenas
que no ocupan la totalidad de columnas especificadas.
Por ejemplo, suponiendo que nombre es un identificador de tipo string[20] (cadena con
formato de 20 caracteres), para que la impresi�n de todos los valores de nombre empiece
en la misma columna, podemos utilizar la instrucci�n :
WriteLn(numero,'.- ',nombre,
' ':20-length(nombre),calif:3);
y, al ejecutar el programa se tendr� algo parecido a :
1.- JUAN FLORES 90 (N�tese la justificaci�n de los nombres
2.- EGRID L. CASTRO 100 hacia la izquierda y los n�meros hacia
3.- RAMON RAMIREZ 99 la derecha)
Formatos de salida
Formato 1 : WriteLn (�tem:anchura...);
Anchura: Expresi�n entera (literal, constante, variable o llamada a funci�n) que
especif�ca la anchura total del campo en que se escribe �tem.
Formato 2 : WriteLn (�tem:anchura:d�gitos ...);
D�gitos: d�gitos decimales de un n�mero real
Anchura: Total de d�gitos del n�mero real contando parte entera, punto decimal y
d�gitos decimales.
Ejemplos:
Valor:= 25.0776;
Sentencias Resultados Comentario
WriteLn (Valor); 2.5077600000E+01
WriteLn(Valor:2); 2.5E+01
WriteLn(Valor:2:1); 25.1 Notese el redondeo
WriteLn(Valor:2:4); 25.0776
WriteLn(Valor:2:8); 25.07760000
WriteLn('Tec':1); Tec
WriteLn('Tec':3); Tec
WriteLn('Tec':5); _ _ Tec Espacios vacios _
|