Что значит read в паскале. Введение в Pascal. Операторы Write и WriteLn

Read и ReadLn выполняют чтение информации из устройства стандартного ввода. В консольных приложениях этим устройством может быть, например, клавиатура (точнее - введённые с клавиатуры данные), в графических приложениях - файл на диске.

То есть эти процедуры являются “антиподами” - выполняют противоположные им действия.

Процедуры Read и ReadLn выполняют схожие действия. Основное отличие между ними следующее: процедура ReadLn после завершения ввода выполняет перевод строки (а в случае с файлами читает файл строка за строкой). А процедура Read читает данные подряд - без перевода строки.

ПРИМЕЧАНИЕ:

В Турбо Паскале я не помню такого (может просто забыл), но в ввод с клавиатуры можно выполнять только процедурой ReadLn, а процедура Read почему-то не работает.

Синтаксис для вывода на консоль:

procedure Read(Args: Arguments);

Синтаксис для вывода в файл:

procedure Read(var F: Text; Args: Arguments);

Аргументами (Arguments ) могут быть разных . Если используется несколько переменных, то они перечисляются через запятую. Например:

Var x, y: integer; z: real; str: string; begin WriteLn("Введите три целых числа через пробел:"); ReadLn(x, y, z); WriteLn("Вы ввели: ", x, ", ", y, ", ", z:0:2); ReadLn(str); WriteLn(str + str); ReadLn; end.

Как уже было сказано, при вводе с консоли эти переменные могут быть разных типов. Но, в отличие от процедур Write/WriteLn использовать не допускается (и это логично))).

ВАЖНО!
При вводе данных следует учитывать, что в случае, если введённое пользователем значение имеет тип, отличный от типа переменной, в которую вводится это значение, то возникнет ошибка времени выполнения. Если, например, в указанном выше примере пользователь в качестве первого числа введёт вещественное значение (такое как 3.14), то программа завершится аварийно, так как переменная х имеет целый тип.

При чтении из файла можно работать как с типизированными , так и с текстовыми файлами.

Если F (см. синтаксис) - это типизированный файл, то переменные, передаваемые как параметры (Args) должны иметь такой же тип, какой указан для файла F . Нетипизированные файлы использовать не допускается. Если параметр F не указан, то предполагается, что чтение выполняется из стандартного устройства ввода.

Если файл F имеет тип Text , то переменные должны иметь тип , или .

Если при чтении файла нет данных, доступных для чтения, то в переменную F возвращается пустое значение (0 - для , пустая строка - для строковых).

В случае использования процедуры ReadLn, то есть при построковом чтении данных, конец строки обозначается определённой последовательностью символов (какими именно - зависит от операционной системы, для DOS/Windows это два символа - #10 и #13).

Маркер конца строки не является частью прочитанной строки и игнорируется.

Если во время выполнения процедуры Read/ReadLn происходит ошибка, то генерируется ошибка времени выполнения. Такое поведение не всегда приемлемо (например, во время чтения файла). Поэтому в каких-то случаях генерацию ошибок отключают. Сделать это можно с помощью .

ПРИМЕЧАНИЕ:

В разных отладочных и учебных программах процедуру ReadLn часто используют для того, чтобы консольное приложение не закрылось автоматически после выполнения. Для этого в конце программы просто записывают (как в примере выше):

То есть просто имя процедуры без параметров. В этом случае программа будет ожидать нажатия клавиши ENTER. Следовательно, программа не завершится, пока не будет нажата клавиша ENTER, и это позволит увидеть результат работы программы. Разумеется, в операционной системе

Read (процедура)

Для типизированных файлов, считывает компонент файла в переменную.
- Для текстовых файлов, считывает одно или большее количество значений
в одну или большее количество переменных

Объявление

Типизированные файлы

Procedure Read(F , V1 [, V2,...,Vn ]);

Текстовые файлы

Procedure Read([ Var F: Text; ] V1 [, V2,...,Vn ]);

Режим

Windows, Real, Protected

Замечания

Для строковых переменных:

Read считывает все символы до (но не включая) следующего маркера конца строки или пока Eof (F) станет равным True. Read не переходит к следующей строке после чтения. Если полученная в результате строка длиннее, чем максимальная длина строковой переменной, то она усекается. После первого Read, каждые последующие вызовы Read будут видеть маркер конца строки и возвращать строку нулевой длины.

Используйте несколько обращений к ReadLn, чтобы считать несколько строковых значений.

Когда включена опция Extended Syntax , процедура Read может считывать строки с нулевым окончанием в нуль-основанные массивы символов.

Для переменных типа Integer или Real :

Read будет пропускать любые пробелы, метки табуляции или маркеры конца строки, предшествующие числовой строке. Если числовая строка не соответствует ожидаемому формату, происходит ошибка ввода/вывода, иначе переменной присваивается полученное значение. Следующий Read начнется с пробела, знака табуляции или маркера конца строки, которые завершали числовую строку.

См. также

Пример

uses Crt, Dos;

var
F : Text;
Ch : Char ;

begin
{ Получаем имя файла из командной строки }
Assign(F, ParamStr (1 ));
Reset (F);
while not EOF (F) do
begin
Read (F, Ch);
Write (Ch); { Выводим содержимое файла на экран }
end ;
end .

Так же, как и для операторов вывода информации, операторы read и reeadln являются операторами обращения к встроенным процедурам ввода информации.

Операторы 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;

Значения другого типа этим переменным в одной программе присвоить нельзя.

Арифметические операции с целыми числами и переменными целого типа в языке Паскаль

Знак "_" означает пробел. Пробелы между именами переменных и названием операции (div) - обязательны. (Происходит от английского division - деление).

Остаток от деления a на b. a_mod_b

В разделе на вопрос Зачем в Паскале есть read и readln, если read тоже переводит строку, хотя по идее не должен? заданный автором Александр лучший ответ это readln - забирает значение из буфера ввода в параметр очищает полностью буфер ввода с клавиатуры
а read - забирает значение из буфера ввода в параметр и не очищает в буфер, а оставляет значение!! !
перевод строки при вводе автоматический - везде
т. е. readln - безопасный ввод
read- небезопасный ввод
пример:
var
a,b: integer;
begin
read(a); {пользователь ввёл: 4, 5 a = 4}
{в буффере ввода число 5 !!}
read(b); {здесь он ввёл число: 6, но b = 5)
{в буффере ввода так и осталось число 6!!}
---
readln(a);{пользователь ввёл: 4, 5; a = 4}
{буффер ввода чист!!}
readln(a);{пользователь ввёл число 6 и b = 6}
{буффер ввода чист!!}
readln(b);
end.
Наоборот, там нет автоматического определения типа вводимого значения, все определяется условными обозначениями в спецификаторе формата.

Ответ от Ёали-Мали [гуру]
Можно объяснить проще, без особых заморочек:
При выполнении процедуры read значение следующего данного читается из этой же строки, а при выполнении процедуры readln значение следующего данного читается с новой строки.
Поэтому оператор Readln (b1,b2,...bn); обеспечивает ввод данных в СТОЛБИК.
После ввода каждой переменной b1, b2, ..bn курсор переходит к началу новой строки.
Оператор Read(b1,b2,...bn); обеспечивает ввод данных в СТРОКУ


Ответ от ВТ-107 ФИТ [гуру]
Тут что-то Дмитрий разошелся, да не верно. И про полностью очищенный и не очищенный буфер и про безопасность. Сали тоже не верно ответил. Никаких там столбцов и строчек, совсем другие правила.
Во первых эти процедуры работают не только с вводом с консоли, поэтому нужны две функции.
procedure Read(F, V1 [, V2,...Vn ]);
читает все V1..Vn из потока (ровно n параметров) , все прочитанные данные будут удалены. Все что будет после эти данных, останется без изменений.
При чтении строки будет прочитано все до символа новой строки или конца файла. Последующие вызовы read буду возвращать пустую строку. И из потока символ новой строки не будет удален.
Если читать char, то в зависимости от установок может быть прочитан символ новой строки как char(26)
При чтении чисел пропускаются все пробелы, табы, переходы строк. И следующее чтение начнется с символа идущего после прочитанного числа. Опять же ненужные символы могут быть пропущены.
procedure ReadLn([ var F: Text; ] V1 [, V2, ..Vn ]);
читает из потока V1, Vn(т. е работает как read) а потом пропускает все символы до новой строки включительно. Все символы после перехода строки останутся без изменений.
Переход на новую строку осуществляется, потому что вы Enter в консоли нажимаете.
Про безопасность за уши притянуто. Это функции с разным назначениями. Любое неправильное их использование не безопасно, любое правильно соответственно безопасно.

Вы находитесь в разделе материалов по пограммированию на Паскале. Перед тем как начать программировать, надо прояснить некоторые понятия, которые нам понадобятся в начале. Ведь просто так программировать нельзя. Мы не можем записать программу словами – компьютер кроме нулей и единиц больше ничего не понимает. Для этого в Паскале создана специальная символика – язык Паскаля, набор зарезервированных слов, которые нельзя использовать в своих программах больше нигде, кроме как по назначению. Перечислим основные понятия, которые нам понадобятся в начале:

✎ 1) program – по-английски «программа», пишется в самом начале кода, после чего идет название программы латиницей и точка с запятой. Например: program Summa; − программа под названием Summa. Но эту часть кода, называемую заголовком программы, можно и не писать − она присутствует только для наглядности и показывает, какую задачу решает данная программа. Здесь мы употребили слово «код» − так называется текстовая запись программы.

✎ 2) integer – по-английски означает «целое число» (или просто «целое») и в Паскале используется для обозначения 32-битных (8 байт) целых чисел со знаком с диапазона [-2147483648, 2147483647] . Что означают эти большие числа, мы потом разберем.

✎ 3) real – с английского «реальный», «настоящий», «вещественный», «действительный». В языке Паскаль этим термином обозначаются вещественные числа с диапазона [-1.8∙10 308 , 1.8∙10 308 ] . Это очень большие числа, но значащих цифр выводится 15 – 16. Кстати, типы данных integer и real в среде программирования PascalABC.Net всегда автоматически выделяются синим цветом.

✎ 4) const – аналог англ. «constant», означающее «постоянная», «константа». В Паскале это величина, которая не может изменяться. Записывается так:


Эту запись надо воспринимать так, как она пишется: число N равно 12, S равно 5, «пи» равно 3,14 (как и в математике, только вместо запятой в Паскале используется точка). В последней строке мы использовали двойной слэш (две косые черты), после которых идет текст, – так в Паскале пишутся комментарии, и их программа не воспринимает. Всё, что начинается двойным слэшом и до конца строки – это комментарий, который пишется для пояснения к программе и всегда выделяется другим цветом (в PascalABC.Net - это зеленый, в Turbo Pascal не используется такой вид комментария). Существует и другой тип комментария – это {текст, заключенный в фигурные скобки, так же, как и здесь, тоже выделяющийся зеленым цветом} . Этот вид комментария может действовать несколько строк подряд – от начала скобки и до её закрытия, и всё, что находится в середине такой конструкции, компилятор не воспринимает как код и просто пропускает.

В действительности формат записи const немножко сложнее. По правилам мы должны были записать:

1 2 3 4 const N: type integer;

Описание:

")" onmouseout="toolTip()">integer
= 12 ; //число N – целого типа S: type integer;

Описание:
Представляет 32-битовое целое число со знаком.

Диапазон значений: -2 147 483 648 .. 2 147 483 647 ")" onmouseout="toolTip()">integer
= 5 ; //число S – целого типа pi : type real;

Описание:
Представляет число двойной точности с плавающей запятой.

Размер: 8 байт
Количество значащих цифр: 15 - 16
Диапазон значений: -1.8∙10 308 .. 1.8∙10 308
")" onmouseout="toolTip()">real
= 3.14 ; //число «пи» - вещественного

После объявления каждой величины указывается её тип, а потом присваивается значение. Но предыдущая запись тоже верна, поскольку компилятор Паскаля настроен так, что он автоматически определяет тип постоянной. Но этого нельзя сказать о следующем типе чисел – переменных.

✎ 5) var – происходит от англ. «variable» («переменная», или «изменчивый»), что в Паскале означает величину, которая в процессе программы может изменять свое значение. Записывается так:


Как видно из записи, знака «=» здесь нет – пересчитываются переменные одного типа (через запятую) и после двоеточия указывается только тип. Переменные N, m (целые) и Q, r, t (вещественные) в программе могут изменять значения в пределах integer и real соответственно. Ещё одно замечание: описание переменных всегда стоит после описания констант (постоянных) – сначала идет конструкция const , а потом var .

✎ 6) begin – в переводе с английского означает «начинать» и Паскале означает начало основной программы, в которой записываются команды (операторы). После слова begin точка с запятой не ставится.

✎ 7) end – по-англ. «конец», и в языке Pascal означает то же (конец программы). После последнего слова end всегда стоит точка. Мы выделили слово «последнего», поскольку использование конструкции begin – end возможно ещё в одном случае: это так называемые операторные скобки, которые применяются для объединения нескольких операций под одним оператором. Но об этом потом. Таким образом, основная программа будет выглядеть так:

1 2 3 4 5 6 begin < оператор 1 > ; < оператор 2 > ; . . . . . . . < оператор N > ; end .

Здесь операторы в теле программы – это разные команды компилятору.

✎ 8) write – по-английски означает «писать». Этот оператор выводит на экран текст, помещенный в него, поэтому так и называется – оператор вывода. Текст, помещенный в него, выделяется синим и записывается так:

Write("этот текст выведен на экране" );

Сообщение, находящееся в скобках и кавычках, будет показано в окне консоли (просто в скобках без кавычек нельзя). После выполнения этого оператора мы увидим на экране:

этот текст выведен на экране

В таком виде оператор write используется в том случае, когда надо показать подсказку, пояснение, комментарий и т. п. А от если необходимо вывести ещё и числовое значение, скажем, S = 50 кв. м, то используется формат:

Write(, S);

В результате получим на экране результат:

Величина площади равна: S = 50

А при необходимости вывести единицы измерения, надо после S снова вставить текст в кавычках:

Write("Величина площади равна: S = " , S, " кв.м" );

После выполнения последнего оператора вывода получим вывод на экран:

Величина площади равна: S = 50 кв.м

✎ 9) writeln – то же, что и write, но после выполнения курсор будет переведен на следующую строку.

✎ 10) read – в переводе с английского означает «читать», поэтому read называется оператором считывания, или ввода данных. Записывается как read(N), что означает необходимость ввода величины N, где N – любое число, или текст, или другой тип переменной. Например, если надо ввести возраст человека, которому 32 года, мы можем записать так:


В первой строчке этого кода программа выводит вопрос «Каков Ваш возраст? » и переводит курсор в следующую строку (окончание ln); во второй строке мы выводим « Year = » (в начале пробел); далее мы видим оператор readln(Year) означающий необходимость введения возраста Year (число 32); наконец, выводим сообщения «Мой возраст », «32 » и « года. » поочередно. Необходимо внимательно следить за пробелами. В результате выполнения данного кода мы получим сообщение:

Каков Ваш возраст?
Year = 32
Мой возраст 32 года

✎ 11) readln – то же, что и read, только с переводом на новую строку. Действительно, в приведенном выше примере после введения числа Year мы только в следующей строке пишем: «Мой возраст 32 года ».

Это пока что все. На следующей странице мы напишем первую программу, и в программировании на Паскале это будут наши



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: