Tema: Entrada - salida. Operadores Leer (Readln), Escribir (Writeln). Los programas lineales más simples. Procedimientos Leer y LeerLn

En la sección sobre la pregunta ¿Por qué Pascal tiene read y readln, si read también traduce una línea, aunque en teoría no debería? dado por el autor Alejandro la mejor respuesta es readln: toma un valor del búfer de entrada en un parámetro y borra todo el búfer de entrada del teclado
y leer: toma el valor del búfer de entrada al parámetro y no lo borra en el búfer, ¡pero deja el valor! !
Avance de línea automático al escribir, en todas partes
es decir, readln es una entrada segura
leer - entrada insegura
ejemplo:
var
a,b: número entero;
comenzar
leer(a); (usuario ingresó: 4, 5 a = 4)
(¡en el búfer de entrada el número es 5!!}
leer(b); (aquí ingresó el número: 6, pero b = 5)
(¡el número 6 permanece en el búfer de entrada!!}
---
readln(a);(usuario ingresado: 4, 5; a = 4)
(¡el búfer de entrada está claro!!}
readln(a);(el usuario ingresó el número 6 y b = 6)
(¡el búfer de entrada está claro!!}
leer(b);
fin.
Por el contrario, no existe una determinación automática del tipo de valor de entrada; todo está determinado por las convenciones del especificador de formato.

Responder de Yoali-Malí[gurú]
Se puede explicar de forma más sencilla, sin demasiada confusión:
Cuando se ejecuta el procedimiento de lectura, el valor de los siguientes datos se lee desde la misma línea, y cuando se ejecuta el procedimiento readln, el valor de los siguientes datos se lee desde una nueva línea.
Por tanto, el operador Readln (b1,b2,...bn); proporciona entrada de datos en la COLUMNA.
Después de ingresar cada variable b1, b2, ..bn, el cursor salta al comienzo de una nueva línea.
Operador Leer(b1,b2,...bn); proporciona entrada de datos en una LINEA


Responder de Ajuste VT-107[gurú]
Aquí Dmitry se confundió en algo, pero no está bien. Y sobre un tampón completamente purificado y no purificado y sobre seguridad. Sali también respondió incorrectamente. No hay columnas ni filas, reglas completamente diferentes.
En primer lugar, estos procedimientos funcionan no sólo con la entrada de la consola, por lo que se necesitan dos funciones.
procedimiento Leer(F, V1 [, V2,...Vn]);
lee todos los V1..Vn de la secuencia (exactamente n parámetros), todos los datos leídos se eliminarán. Todo lo que venga después de estos datos permanecerá sin cambios.
Al leer una línea, se leerá todo hasta la nueva línea o el final del archivo. Las llamadas posteriores a lectura devolverán una cadena vacía. Y el carácter de nueva línea no se eliminará de la transmisión.
Si lee char, dependiendo de la configuración, el carácter de nueva línea puede leerse como char(26)
Al leer números, se omiten todos los espacios, tabulaciones y saltos de línea. Y la siguiente lectura comenzará con el símbolo que aparece después del número leído. Nuevamente, se pueden omitir caracteres innecesarios.
procedimiento ReadLn([ var F: Texto; ] V1 [, V2, ..Vn ]);
lee de la secuencia V1, Vn (es decir, funciona como lectura) y luego omite todos los caracteres hasta la nueva línea incluida. Todos los caracteres después de un salto de línea permanecerán sin cambios.
La transición a una nueva línea se produce porque presiona Enter en la consola.
Es una cuestión descabellada en materia de seguridad. Se trata de funciones con diferentes finalidades. Cualquier uso incorrecto no es seguro, cualquier uso correcto es igualmente seguro.

La instrucción de lectura está destinada a ingresar valores variables (datos iniciales) desde el teclado. En general, las instrucciones se ven así:

leer(Variable!, Variable2, ... VariableW donde variables es el nombre de la variable cuyo valor se debe ingresar desde el teclado durante la ejecución del programa.

A continuación se muestran ejemplos de cómo escribir una instrucción de lectura:

Leer(a); leer(Cena,Kol);

Cuando se ejecuta la declaración de lectura, sucede lo siguiente:

1. El programa pausa su trabajo y espera hasta que se escriben los datos requeridos en el teclado y se presiona una tecla. .

2. Después de presionar la tecla el valor ingresado se asigna a la variable cuyo nombre se especifica en la declaración.

Por ejemplo, como resultado de ejecutar la instrucción

Leer(Tempérât);

e ingresando la línea 21 desde el teclado, el valor de la variable Tempérât será el número 21.

Una sola declaración de lectura puede recuperar los valores de múltiples variables. En este caso, los números ingresados ​​deben escribirse en una línea y separados por espacios. Por ejemplo, si el tipo de variables a, b y c es real, entonces como resultado de ejecutar la instrucción leer (a, b, c); e ingresa la línea desde el teclado:

4.5 23 0.17

las variables tendrán los siguientes valores: a = 4,5; b = 23, o; c = 0,17.

Si hay más números en una línea que variables especificadas en la declaración de lectura, el resto de la línea será procesado por la siguiente declaración de lectura. Por ejemplo, como resultado de ejecutar las instrucciones:

Leer (a, B); leer(C);

y cadena de entrada del teclado

10 25 18

las variables recibirán los siguientes valores: a = 10, b = 25. Leer instrucción (C); asignará el valor 18 a la variable c.

La instrucción readln se diferencia de la instrucción read en que después de seleccionar el siguiente número de la cadena ingresada desde el teclado y asignarlo a la última variable de la lista de la instrucción readln, el resto de la línea se pierde y la siguiente lectura o La instrucción readln requerirá nueva entrada.

Por ejemplo, como resultado de ejecutar la instrucción:

Leer (a, B); leer(C);

e ingresando la línea desde el teclado

10 25 18

las variables recibirán los siguientes valores: a = ω, b = 25. Luego de lo cual el programa esperará a que se ingrese un nuevo número para asignarlo a la variable c.

Cada instrucción de lectura o readln debe estar precedida por una instrucción de escritura para indicarle al usuario qué datos espera el programa de él. Por ejemplo, un fragmento de un programa para calcular el coste de una compra puede verse así:

Writeln("Ingrese los datos iniciales."); escribir("Precio del producto:"); readln(Sepa); escribir("Cantidad en lote:"); leerln(Kol); escribir("Descuento:"); readln(Skidka);

Si el tipo de datos ingresados ​​desde el teclado no coincide o no se puede convertir al tipo de las variables cuyos nombres se especifican en la instrucción de lectura (readln), entonces el programa falla (las instrucciones posteriores a la lectura no se ejecutan) y aparece un mensaje sobre error.

Al igual que los operadores de salida de información, los operadores de lectura y lectura son operadores para acceder a las funciones integradas. Procedimientos de entrada de información.

Los operadores read (read) y readln, que provienen de dos palabras inglesas read (read) y line (línea), se utilizan en programas para ingresar información en la memoria de la computadora y " lectura"valores en una variable.

Consideremos el trabajo de estos operadores y los procedimientos de entrada de información.

Nuestro programa tiene un procedimiento readln(a). Al ejecutar un programa y encontrar una declaración readln, la computadora se detendrá mientras espera que se ingrese información. Después de ingresar el valor de la variable a - 16 desde el teclado, la computadora asignará este valor a la variable a, es decir lo enviará a una ubicación de memoria llamada a y continuará ejecutando el programa. A este proceso lo llamamos " lectura"valores en una variable.

Entonces, los procedimientos read y readln “leen” los valores de las variables y los asignan a las variables que se escriben en ellas.

Puede haber varias variables de este tipo, luego se escriben con estos operadores separados por comas, por ejemplo:

leer (a, b, c, n, g, j, i), leer (e, f, k, p, d), etc.

¿Cuál es la diferencia entre el trabajo de los procedimientos de lectura y lectura?

El procedimiento de lectura requerirá entrada o salida de información en una línea después de sí mismo, y el procedimiento readln le permite ingresar y generar información después de sí mismo desde el comienzo de una nueva línea.

Por ejemplo:

En el programa: escribir("Ingrese los valores de a y b "); leer(a,b);

escribir("Ingrese información en una línea");

Cuando se ejecuta esta parte del programa, todo lo escrito en la primera declaración de escritura se mostrará en la pantalla, luego el cursor se ubicará en la misma línea y la computadora esperará a que se ingresen los valores a y b. . Ingresemos sus valores: 2 y 3, separándolos con un espacio o, en otras palabras, separados por un espacio. Después de esto, la misma línea mostrará la información escrita en la siguiente declaración de escritura.

En pantalla:

Ingrese los valores de a y b 2 3 Ingrese la información en una línea

En el programa:

writeln("Ingrese los valores de a, b y c); readln(a, b, c);

writeln("Información de entrada y salida desde el principio de la línea");

En pantalla:

Introduce los valores de a, b y c.

Ingresar y enviar información desde el principio de la línea.

Operaciones aritméticas con números enteros. Variables de tipo entero. tipo real

El lenguaje Pascal utiliza números enteros, que incluyen todos los números naturales formados en el proceso de contar objetos: 1, 2, 3, 4, 5, 6, ...; números negativos: ..., -6, -5, -4, -3, -2, -1 y el número cero: 0. Los números enteros forman la siguiente serie:

6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, ...

Pascal permite un rango de números enteros desde -32768 hasta 32767.

variables, tomando valores enteros, se escriben en el apartado descripción indicando el tipo entero (entero).

Por ejemplo: var a, b, c, a1, b34, nomb: entero;

Valores de diferente tipo para estas variables en el mismo programa no se puede asignar.

Operaciones aritméticas con números enteros y variables de tipo entero en Pascal

El signo "_" significa un espacio. Se requieren espacios entre los nombres de las variables y el nombre de la operación (div). (Derivado de la división inglesa - división).

El resto cuando a se divide por b. a_mod_b

Leer Y LeerLn leer información del dispositivo de entrada estándar. En aplicaciones de consola, este dispositivo puede ser, por ejemplo, un teclado (más precisamente, datos ingresados ​​desde el teclado, puede ser un archivo en el disco);

Es decir, estos procedimientos son "antípodas": realizan acciones opuestas a ellos.

Los procedimientos Read y ReadLn realizan acciones similares. La principal diferencia entre ellos es la siguiente: el procedimiento ReadLn, después de completar la entrada, realiza un avance de línea (y en el caso de archivos, lee el archivo línea por línea). Y el procedimiento de lectura lee datos seguidos, sin salto de línea.

NOTA:

No recuerdo esto en Turbo Pascal (tal vez simplemente lo olvidé), pero la entrada del teclado solo se puede realizar usando el procedimiento ReadLn y, por alguna razón, el procedimiento de lectura no funciona.

Sintaxis para la salida de la consola:

procedimiento Leer(Argumentos: Argumentos);

Sintaxis para salida a archivo:

procedimiento Leer( var F: Texto; Args: Argumentos);

Argumentos ( Argumentos) puede ser diferente. Si se utilizan varias variables, se enumeran separadas por comas. Por ejemplo:

Var x, y: número entero; z:real; cadena:cadena; comenzar WriteLn("Ingrese tres números enteros separados por espacios:"); LeerLn(x, y, z); WriteLn("Usted ingresó: ", x, ", ", y, ", ", z:0:2);

LeerLn(cadena);

WriteLn(cadena + cadena);
LeerLn; fin.

Como ya se mencionó, cuando se ingresan desde la consola, estas variables pueden ser de diferentes tipos. Pero, a diferencia de los procedimientos Write/WriteLn, no está permitido su uso (y esto es lógico))).

¡IMPORTANTE! Al ingresar datos, tenga en cuenta que si el valor ingresado por el usuario es de un tipo diferente al tipo de variable en la que se ingresa este valor, se producirá un error de tiempo de ejecución. Si, por ejemplo, en el ejemplo anterior, el usuario ingresa un valor real (como 3,14) como primer número, el programa fallará porque la variable x es de tipo entero. Al leer un archivo, puede trabajar tanto con archivos escritos como con archivos de texto. Al ingresar datos, tenga en cuenta que si el valor ingresado por el usuario es de un tipo diferente al tipo de variable en la que se ingresa este valor, se producirá un error de tiempo de ejecución. Si, por ejemplo, en el ejemplo anterior, el usuario ingresa un valor real (como 3,14) como primer número, el programa fallará porque la variable x es de tipo entero. Si Al ingresar datos, tenga en cuenta que si el valor ingresado por el usuario es de un tipo diferente al tipo de variable en la que se ingresa este valor, se producirá un error de tiempo de ejecución. Si, por ejemplo, en el ejemplo anterior, el usuario ingresa un valor real (como 3,14) como primer número, el programa fallará porque la variable x es de tipo entero. F

(ver sintaxis) es un archivo escrito, entonces las variables pasadas como parámetros (Args) deben tener el mismo tipo especificado para el archivo Al ingresar datos, tenga en cuenta que si el valor ingresado por el usuario es de un tipo diferente al tipo de variable en la que se ingresa este valor, se producirá un error de tiempo de ejecución. Si, por ejemplo, en el ejemplo anterior, el usuario ingresa un valor real (como 3,14) como primer número, el programa fallará porque la variable x es de tipo entero.. No se permiten archivos sin tipo. Si el parámetro no se especifica, se supone que la lectura se realiza desde el dispositivo de entrada estándar. Si el archivo

tiene tipo

Texto

, entonces las variables deben ser de tipo , o .

Si, al leer un archivo, no hay datos disponibles para leer, entonces se devuelve un valor vacío a la variable F (0 para, una cadena vacía para cadenas).

NOTA:

Cuando se utiliza el procedimiento ReadLn, es decir, cuando se leen datos línea por línea, el final de la línea se indica mediante una determinada secuencia de caracteres (cuáles dependen exactamente del sistema operativo, para DOS/Windows son dos caracteres - #10 y n.º 13).

Es decir, sólo el nombre del procedimiento sin parámetros. En este caso, el programa esperará a que se presione la tecla ENTER. Por lo tanto, el programa no finalizará hasta que se presione la tecla ENTER, permitiéndole ver el resultado del programa. Por supuesto, en el sistema operativo.

Leer (procedimiento)

Para archivos escritos, lee el componente del archivo en una variable.
- Para archivos de texto, lee uno o más valores
en una o más variables

Anuncio

Archivos mecanografiados

Procedimiento Leer(F , V1 [, V2,...,Vn ]);

Archivos de texto

Procedimiento Leer([ Var F: Texto; ] V1 [, V2,...,Vn ]);

Modo

Windows, Real, Protegido

Notas

Para variables de cadena:

Leer lee todos los caracteres hasta (pero sin incluir) el siguiente marcador de final de línea o hasta Eof(F) se volverá Verdadero. Leer no pasa a la siguiente línea después de leer. Si la cadena resultante es más larga que la longitud máxima de la variable de cadena, se trunca. Después de la primera lectura, cada llamada de lectura posterior verá un marcador de fin de línea y devolverá una cadena de longitud cero.

Utilice varias llamadas ReadLn para leer varios valores de cadena.

Cuando la opción está habilitada Sintaxis extendida, el procedimiento de lectura puede leer cadenas terminadas en nulo en matrices de caracteres basadas en nulos.

Para variables de tipo Entero o Real:

Leer omitirá cualquier espacio, tabulación o marcador de final de línea que preceda a una línea numérica. Si la cadena numérica no sigue el formato esperado, se produce un error de E/S; de lo contrario, a la variable se le asigna el valor resultante. La siguiente lectura comenzará con el espacio, tabulación o marcador de final de línea que terminó la recta numérica.

Ver también

Ejemplo

utiliza Crt, Dos;

var
F: Texto;
Ch:Carbón;

comenzar
(Obteniendo el nombre del archivo de la línea de comando)
Asignar(F, ParamStr(1));
Reiniciar(F);
mientras que no EOF (F) lo hace
comenzar
Leer(F, Ch);
Escribir(Ch); (Muestra el contenido del archivo en la pantalla)
fin ;
fin.




Arriba