3. OPERACIONES DE ENTRADA Y SALIDA

En PASCAL  la entrada y salida no son consideradas en términos de los dispositivos reales tales como lectoras o impresoras. En cambio se considera que el programa es un procedimiento son el cual se obtiene información de un flujo de entrada y se entrega información a un flujo de salida. Los cuales son retenidos en dispositivos externos cuya naturaleza es inmaterial. Toda implementación de PASCAL  asume la existencia de estos dos flujos, organizados como secuencia de líneas de caracteres. En consecuencia un programa de PASCAL mismo no contiene indicación de los dispositivos reales que están siendo usados.
ENTRADA EN PASCAL
Una sentencia de entrada en PASCAL toma una de las siguientes dos formas:
          Read (lista-de-variables)
          Read (imput, lista-de-variables)
Donde una lista de variables es una serie de uno o mas identificadores-de-variables, separados por comas,
    Lista-de-variables   =    variable    {“,” variable}
Cada variable en la lista de variables debe ser de tipo integer, real o char, o de un tipo que sea una sub serie de integer o char. La entrada directa de valores de un tipo enumerado, o del tipo boolean, no es permitida.
La acción en la ejecución de cualquiera de las dos formas de la sentencia es obtener del flujo de datos de entrada estándar el numero requerido de valores de datos (es decir, tantos valores como variables hay en la lista de variables) y asignar estos valores, en orden, a las variables en la lista. Por ejemplo,
  Read (a)
Obtendrá el próximo valor del flujo de entrada estándar y asignara este valor a la variable a. la sentencia,
    Read  (alfa, beta, gamma)
Obtendrá tres valores del flujo de entrada estándar y los asignara a los valores alfa, beta y gamma. Estas dos sentencias pueden ser escritas
    Read  (imput a)
    Read  (imput, alfa, beta, gamma)
Y tendrían exactamente el mismo efecto. De esta manera
    Read  (v1, v2, v3,… vn)
Es equivalente a
    Read (v1); read (v2); read (v3); …; read (vn)
La sentencia read (v) o read (imput, v) puede ser considerada como una sentencia que obtiene el valor para ser asignado a a v del flujo de entrada y no una expresión. Por tanto, el valor obtenido deberá ser compatible de asignación con el tipo de la variable de la cual le será asignado. Como es representado el valor en el flujo de entrada depende del tipo de v.
Cada valor entero o real del 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 por un signo más o menos.
Los datos de entrada para un programa son tratados como un flujo continuo. Cada sentencia de entrada ejecutada comienza por obtener valores de un punto en el flujo inmediatamente siguiente al último valor obtenido por la sentencia de entrada ejecutada anteriormente. La lectura de algún valor entero cusa algunos blancos en el flujo de entrada que son omitidos. El próximo ítem de datos, que debe ser un nuero entero valido, es entonces leído.
SALIDA EN PASCAL
La sentencia básica de salida en PASCAL toma una de las dos formas
    Write  (lista-de-salida)
    Write  (output, lista-de-salida)
Donde la lista de salida es una lista de valores a ser producidos. Su acción en la ejecución es entregar estos valores, en orden, al flujo de salida estándar. Por ejemplo
    Write  (2*x+7)
Producirá un valor, y
    Write  (a,b,c+1)
Producirá tres valores.
Como con los datos de entrada la salida generada por un programa PASCAL es tratada como un flujo continuo. No obstante el programa puede estructurar esta salida en líneas para desplegarlas en el dispositivo de salida real las nuevas líneas ene le flujo de salidas pueden ser generadas por medio de las sentencias
    Writeln  (nombrearchivo, nomvar1, nomvar2, ...);
     Readln  (nombrearchivo, nomvar1, nomvar2, ...);
Donde nombrearchivo es el identificador del fichero de salida o entrada y nomvar1, etc. Son nombres de variables o argumentos.
Esta dos sentencias writeln, readin finalizan la salida de sus argumentos con la inserción de la marca fin de línea (CR/LF) por lo que la próxima salida de datos procedente de subsiguientes sentencias writeln y readln tendría lugar en una nueva línea de pantalla. Se podría decir que estas sentencias son equivalentes a las sentencias write y read mas un salto de línea.