Что значит readln в паскале
The procedures read and readLn retrieve data from a text file (such as input , the command line interface, or any file on disk). They are defined as part of the Pascal programming language. Everyone can expect them to work no matter which compiler has been used.
In property definitions the reserved word read is used to direct read access. This article deals with the procedures read and readLn . See object and related articles for the occurrence of read in the context of properties.
Contents
Behavior
Signature
Read as well as readLn share almost the same identical formal signature. However a formal signature is omitted here, since you can not write their signatures in Pascal. Therefore a description follows:
As an optional first parameter a text variable can be specified where data are read from. Read is additionally capable of reading from a typed file variable ( file of recordType ).
If no source is specified, input is assumed. Thereafter any number of variables can be specified, but at least one has to be present. They have to be either char , integer , real , or string . If you have specified a typed file as the source, all variables have to be of the file’s underlying base type.
Earlier versions of FPC also allowed reading variables of the type PChar . This has been removed, since no buffer checking is possible with those. In the case of typed files as source, only variables of the file’s record type can be specified.
Execution
Calling read / readLn will place the read (and possibly accordingly interpreted) values to the given variables.
The order of variables matters. For instance, when the following program:
is supplied with:
everything is fine.
i will become 42 and c will become 'x' . But the reverse input order
will yield a run-time error (in this case RTE 106).
Once data are read and stored, they are “consumed”, thus cannot be retrieved otherwise, but via the variables only. However, data are read up to the variable’s size limits. E. g. a fixed length string [ 24 ] will stop reading beyond the 24th character.
Leading blanks in front of numeric types are skipped.
If the source file is not open, the RTE 103 “file not open”, RTE 6 “invalid file handle” (for input in a non-ISO compiler mode) will stop the program. These RTE may be converted to an eInOutError exception if the sysUtils unit is included (e. g. via a uses -clause).
If the source file is open, but no data is available, possibly because the end of file has already been reached, default values for the remaining variables are loaded.
Interpretation
Read and readLn are so powerful, because they interpret given data. For instance, a readLn storing an integer does not expect the binary value to be entered, but their decimal representation with ASCII numerals suffices (e. g. 42 instead of * [asterisk has the numeric value 42]).
While char and string can be stored (sort of) directly, the numeric types integer and real are converted following certain rules. The rules are those, you normally write literals of such types within your (Standard) Pascal source code. However, some compilers’ read implementation (here FPC) allow additional formats:
An integer’s hexadecimal base can be indicated by prepending 0x , or just x (case insensitive) instead of the usual $ (dollar sign).
Difference between read and readLn
ReadLn will in contrast to read consume a trailing line feed. It is discarded and does not have any influence on how to save supplied data. The read line ending is platform-independent. A line ending typical for Windows-platforms will be read and does not pose a problem, even if the program is run on Linux or any other platform.
Note, the notion of “line” applies only for text files. Functions like eoLn and readLn only work on such files. In consequence readLn can not be used on typed files ( file of recordType variables).
Production usage
Read and readLn have a major drawback in that they expect the user to supply data in a given order. If users do not comply a run-time error will terminate the program.
This is quite unsatisfactory, since a run-time error number won’t enlighten the end user. You usually want to design your error messages in a way the user is capable in correcting her behavior. When reading ordinal types one can make use of the val procedure.
Beware, it is necessary to check, whether the end of file has been reached before attempting to read data. The text file input may not be open. Unlike readLn no default value is loaded. Hence it is imperative to check val ’s code value in order to determine whether the destination variable v now has a legit value.
Of course, it would be even better to catch wrong key strokes right when they are made, but this is not possible when utilizing read or readLn .
Note: Therefore the main application of read or readLn is non-interactive programs reading (generated) data files.
Nevertheless, if the convenient interpretation functionality is desired, without having a file open, the procedure system . readStr can be used to do so.
Процедуры Read и ReadLn
Процедуры Read и ReadLn выполняют чтение информации из устройства стандартного ввода. В консольных приложениях этим устройством может быть, например, клавиатура (точнее — введённые с клавиатуры данные), в графических приложениях — файл на диске.
То есть эти процедуры являются “антиподами” процедур Write и WriteLn — выполняют противоположные им действия.
Процедуры Read и ReadLn выполняют схожие действия. Основное отличие между ними следующее: процедура ReadLn после завершения ввода выполняет перевод строки (а в случае с файлами читает файл строка за строкой). А процедура Read читает данные подряд — без перевода строки.
В Турбо Паскале я не помню такого (может просто забыл), но в FreePascal ввод с клавиатуры можно выполнять только процедурой ReadLn, а процедура Read почему-то не работает.
Синтаксис для вывода на консоль:
procedure Read(Args: Arguments);
Синтаксис для вывода в файл:
procedure Read(var F: Text; Args: Arguments);
Аргументами (Arguments) могут быть переменные разных типов. Если используется несколько переменных, то они перечисляются через запятую. Например:
Как уже было сказано, при вводе с консоли эти переменные могут быть разных типов. Но, в отличие от процедур Write/WriteLn использовать константы не допускается (и это логично))).
ВАЖНО!
При вводе данных следует учитывать, что в случае, если введённое пользователем значение имеет тип, отличный от типа переменной, в которую вводится это значение, то возникнет ошибка времени выполнения. Если, например, в указанном выше примере пользователь в качестве первого числа введёт вещественное значение (такое как 3.14), то программа завершится аварийно, так как переменная х имеет целый тип.
При чтении из файла можно работать как с типизированными файлами, так и с текстовыми файлами.
Если F (см. синтаксис) — это типизированный файл, то переменные, передаваемые как параметры (Args) должны иметь такой же тип, какой указан для файла F. Нетипизированные файлы использовать не допускается. Если параметр F не указан, то предполагается, что чтение выполняется из стандартного устройства ввода.
Если файл F имеет тип Text, то переменные должны иметь тип Char, Integer, Real или String.
Если при чтении файла нет данных, доступных для чтения, то в переменную F возвращается пустое значение (0 — для порядковых типов, пустая строка — для строковых).
В случае использования процедуры ReadLn, то есть при построковом чтении данных, конец строки обозначается определённой последовательностью символов (какими именно — зависит от операционной системы, для DOS/Windows это два символа — #10 и #13).
Маркер конца строки не является частью прочитанной строки и игнорируется.
Если во время выполнения процедуры Read/ReadLn происходит ошибка, то генерируется ошибка времени выполнения. Такое поведение не всегда приемлемо (например, во время чтения файла). Поэтому в каких-то случаях генерацию ошибок отключают. Сделать это можно с помощью директивы компилятора .
В разных отладочных и учебных программах процедуру ReadLn часто используют для того, чтобы консольное приложение не закрылось автоматически после выполнения. Для этого в конце программы просто записывают (как в примере выше):
То есть просто имя процедуры без параметров. В этом случае программа будет ожидать нажатия клавиши ENTER. Следовательно, программа не завершится, пока не будет нажата клавиша ENTER, и это позволит увидеть результат работы программы. Разумеется, в операционной системе DOS (и подобных) такой проблемы нет. Это актуально только для Windows.
Что значит readln в паскале
Вывод данных
В предыдущем параграфе мы познакомились со структурой программы на языке Паскаль, научились описывать данные, рассмотрели оператор присваивания. Этого достаточно для того, чтобы записать программу преобразования данных. Но результат этих преобразований нам виден не будет.
Для вывода данных из оперативной памяти на экран монитора используется оператор вывода write:
Здесь в круглых скобках помещается список вывода — список выражений, значения которых выводятся на экран. Это могут быть числовые, символьные и логические выражения, в том числе переменные и константы.
Произвольный набор символов, заключённый в апострофы, считается строковой константой. Строковая константа может содержать любые символы, набираемые на клавиатуре.
Пример. Оператор write (‘ s=’, s) выполняется так:
1) на экран выводятся символы, заключённые в апострофы: s=
2) на экран выводится значение переменной, хранящееся в ячейке оперативной памяти с именем s.
Если значение переменной s равно 15 и она имеет целочисленный тип, то на экране появится: s=15
Если значение переменной s равно 15, но она имеет вещественный тип, то на экране появится: s=1.5Е+01
При выполнении оператора вывода все элементы списка вывода печатаются непосредственно друг за другом. Так, в результате работы оператора write (1, 20, 300) на экран будет выведена последовательность цифр 120300, которая будет восприниматься нами как число 120300, а не как три отдельные числовые константы. Сделать выводимые данные более доступными для восприятия можно разными способами:
Формат вывода — это указываемое после двоеточия целое число, определяющее, сколько позиций на экране должна занимать выводимая величина. Если цифр в числе меньше, чем зарезервированных под него позиций на экране, то свободные позиции дополняются пробелами слева от числа. Если указанное в формате вывода после двоеточия число меньше, чем необходимо, то оно автоматически будет увеличено до минимально необходимого.
Для вывода вещественного числа в списке вывода для каждого выражения указываются два параметра: 1) общее количество позиций, отводимых под число; 2) количество позиций в дробной части числа:
При выполнении нового оператора write вывод продолжается в той же строке. Чтобы осуществить переход к новой строке, используется оператор writeln. Других различий между операторами write и writeln нет.
Первая программа на языке Паскаль
Пользуясь рассмотренными операторами, составим программу, вычисляющую длину окружности и площадь круга радиуса 5,4 см.
Исходным данным в этой задаче является радиус: r = 5,4 см. Результатом работы программы должны быть величины с — длина окружности и s — площадь круга, с, s и r — величины вещественного типа.
Исходные данные и результаты связаны соотношениями, известными из курса математики: с = 2πr, s = πr 2 . Программа, реализующая вычисления по этим формулам, будет иметь вид:
Эта программа верна и решает поставленную задачу. Запустив её на выполнение, вы получите следующий результат:
И всё-таки составленная нами программа имеет существенный недостаток: она находит длину окружности и площадь круга для единственного значения радиуса (5,4 см).
Для того чтобы вычислить длину окружности и площадь круга для другого значения радиуса, потребуется вносить изменения непосредственно в текст программы, а именно изменять оператор присваивания. Внесение изменений в существующую программу, по меньшей мере, не всегда удобно (например, когда программа большая и операторов присваивания много). Ниже вы познакомитесь с оператором, позволяющим вводить исходные данные в процессе работы программы, не прибегая к изменению текста программы.
Ввод данных с клавиатуры
Для ввода в оперативную память значений переменных используется оператор ввода read:
При выполнении оператора read компьютер переходит в режим ожидания данных: пользователь должен ввести данные с клавиатуры и нажать клавишу Enter.
Несколько значений переменных числовых типов могут вводиться через пробел или через запятую. При вводе символьных переменных пробел и запятая воспринимаются как символы, поэтому ставить их нельзя.
Первое введённое пользователем значение переменной помещается в ячейку памяти, имя которой расположено первым в списке ввода, и т. д. Поэтому типы вводимых значений (входного потока) должны соответствовать типам переменных, указанных в разделе описания переменных.
Пример . ПУСТЬ
Var i, j: integer; x: real; a: char;
Присвоим переменным i, j, x, а значения 1, 0, 2,5 и ‘A’. Для этого воспользуемся оператором
r ead (i, j, х, а)
и организуем входной поток одним из следующих способов:
Здесь мы не только использовали различные разделители (пробел, запятая), но и представляли входной поток в виде одной, двух и четырёх строк.
Для ввода данных с клавиатуры можно также использовать оператор readln. Отличие состоит в том, что после выполнения readln осуществляется автоматический переход на новую строку входного потока, даже если в текущей строке остались невведённые символы. Таким образом, readln позволяет считать лишь начальную часть введённой пользователем строки и, проигнорировав её окончание, перейти к следующей строке.
Усовершенствуем программу n_1, организовав в ней ввод данных с помощью оператора read. А чтобы пользователь знал, для чего предназначена программа, и понимал, какое именно действие ожидает от него компьютер, выведем соответствующие текстовые сообщения с помощью оператора writeln:
Результат работы усовершенствованной программы:
Теперь наша программа может ВЫЧИСЛИТЬ длину окружности и площадь круга для любого значения г. Иначе говоря, она решает не единичную задачу, а целый класс задач. Кроме того, в программе понятно и удобно организован ввод исходных данных и вывод получаемых результатов. Это обеспечивает дружественность пользовательского интерфейса.
САМОЕ ГЛАВНОЕ
Для ввода в оперативную память значений переменных используются операторы ввода read и readln.
Для вывода данных из оперативной памяти на экран монитора используются операторы вывода write и writeln.
Ввод исходных данных и вывод результатов должны быть организованы понятно и удобно; это обеспечивает дружественность пользовательского интерфейса.
Операторы read и readln. Процедуры ввода информации
Операторы read (считывать) и readln, который происходит от двух английских слов read (считывать) и line (строка) используются в программах для ввода информации в память компьютера и «считывания» значений в переменную.
Рассмотрим работу этих операторов и процедур ввода информации.
В нашей программе есть процедура readln(a). При выполнении программы, встретив оператор readln, компьютер приостановит работу в ожидании ввода информации. После того, как мы введем с клавиатуры значение переменной a — 16, компьютер присвоит это значение переменной a, т.е. отправит его в ячейку памяти с именем a и продолжит выполнение программы. Этот процесс мы называем «считыванием» значения в переменную.
Итак, процедуры read и readln «считывают» значения переменных и присваивают их тем переменным, которые записаны в них.
Таких переменных может быть несколько, тогда они записываются в этих операторах через запятую, например:
read(a, b, c, n, g, j, i), readln(e,f, k, p, d) и т.п.
Чем же отличается работа процедур read и readln?
Процедура read потребует после себя ввод или вывод информации в одну строку, а процедура readln дает возможность после себя вводить и выводить информацию с начала новой строки.
В программе: write(‘Введите значения a и b ‘); read(a, b);
write(‘Ввод информации в одну строку’);
При выполнении этой части программы, на экран будет выведено все то, что записано в первом операторе write, затем в той же строке будет находиться курсор, и компьютер будет ждать ввода значений a и b. Введем их значения — 2 и 3, разделяя их пробелом или, иначе говоря, через пробел. После этого, в той же строке будет выдана информация записанная в следующем операторе write.
Введите значения a и b 2 3 Ввод информации в одну строку
writeln(‘Введите значения a, b и c); readln(a, b, c);
writeln(‘Ввод и вывод информации с начала строки’);
Введите значения a, b и c
Ввод и вывод информации с начала строки
Арифметические операции с целыми числами. Переменные целого типа. Вещественный тип
В языке Паскаль используются целые числа, к которым относятся все натуральные числа, образовавшиеся в процессе подсчета предметов: 1, 2, 3, 4, 5, 6, . ; отрицательные числа: . -6, -5, -4, -3, -2, -1 и число ноль: 0. Целые числа образуют следующий ряд:
. -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, .
В Паскале допускается диапазон целых чисел от -32768 до 32767.
Переменные, принимающие целые значения, записываются в разделе описаний с указанием типа integer (целый).
Например: var a, b, c, a1, b34, nomb: integer;
Значения другого типа этим переменным в одной программе присвоить нельзя.