Для чего предназначен оператор readln read в pascal кратко

Обновлено: 05.07.2024

readln - забирает значение из буфера ввода в параметр очищает полностью буфер ввода с клавиатуры
а read - забирает значение из буфера ввода в параметр и не очищает в буфер, а оставляет значение!! !
перевод строки при вводе автоматический - везде
т. е. readln - безопасный ввод
read- небезопасный ввод
пример:
var
a,b: integer;
begin
read(a);

read(b);
-------
readln(a);

readln(a);

readln(b);
end.

Наоборот, там нет автоматического определения типа вводимого значения, все определяется условными обозначениями в спецификаторе формата.

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

Но ведь при использовании read строка всё-равно переводится! Вы имеете в виду, что при использовании read можно вводить несколько переменных через запятую, а в readln нельзя?

Сали-Мали Просветленный (29239) Что значит "строка всё-равно переводится". В окне RUN после запуска проги посмотри результат работы read(b1,b2. bn); и readln(b1,b2. bn); небольшое различие очевидно! При использовании read можно вводить несколько переменных и через пробелы в одной строке, а в readln тоже можно вводить значение нескольких переменных, но после ввода каждой нажимаешь на ENTER, вот и получается ввод данных в стобик.

Тут что-то Дмитрий разошелся, да не верно. И про полностью очищенный и не очищенный буфер и про безопасность. Сали тоже не верно ответил. Никаких там столбцов и строчек, совсем другие правила.

Во первых эти процедуры работают не только с вводом с консоли, поэтому нужны две функции.

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 в консоли нажимаете.

Про безопасность за уши притянуто. Это функции с разным назначениями. Любое неправильное их использование не безопасно, любое правильно соответственно безопасно.

Процедуры 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 - для порядковых типов, пустая строка - для строковых).

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

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

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

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

Приветствую. Сегодня я хотел бы затронуть тему операторов ввода данных.

Ничего не напоминает? Те, кто внимательно читали предыдущую статью, скажут что эти операторы похожи на операторы вывода. И будут правы! Оператор readln отличается от оператора read только лишь тем, что после ввода данных переводит курсор на следующую строку

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

Для этого вместо куска кода пишем

Попробуйте теперь запустить программу с измененным кодом. На всякий случай напишу весь код:

Заметили, как теперь при запуске программа ждет ввода данных? И пока ввод не будет осуществлен, она не продолжит выполнение. Но согласитесь, это мы с вами знаем, что при запуске программы нужно ввести значения длины и ширины, а кто-то другой, запустив ее, не догадается до этого. Поэтому нам нужно вывести на экран просьбу, что-то вроде "Введите длину". Для этого используем оператор вывода write. О нем я уже писал в предыдущем уроке.

Ход ваших рассуждений при составлении программы должен быть примерно следующим:
1) Мне нужно попросить пользователя ввести значения ширины прямоугольника. Для этого использую оператор вывода: writeln('Введите ширину прямоугольника');
2) Теперь нужно чтобы программа прочитала это значение. Для этого использую оператор ввода: readln(A);

Здесь немного остановимся. Возможно у вас возник вопрос: "А что значит буква А в скобках?" Так вот, в скобках вы указываете ту переменную, которой будет присвоено значение, введенное с клавиатуры. В нашем случае ширину мы записываем в переменную А, следовательно и в скобках пишем ее.
3) Далее мне нужно попросить пользователя ввести длину. По аналогии с первым пунктом:
writeln('Введите длину прямоугольника');
4) Считываем введенное значение по аналогии со 2-ым пунктом: readln(B);

Вот и все, соберем весь код в кучу:

Запустите программу, посмотрите как она выполняется. На мой взгляд чего-то не хватает. Как думаете? Следует выводить на экран что-то типа "Ответ" или "Периметр language-pascal">write(P); строку: write('Периметр =');

2) Модернизировать предпоследнюю строчку кода write(P) . Делается это следующим образом: пишем оператор write, открываем круглую скобку, в одинарных кавычках пишем 'Периметр = ', ставим запятую и после нее пишем переменную P. Вот как это будет выглядеть: write('Периметр = ',P);

Запустите программу, протестируйте ее при разных значениях длины и ширины. Если возникли какие-то вопросы, не стесняйтесь задавать их, контакты для связи со мной находятся здесь. Ну, а если вопросов нет, можете приступать к следующему уроку

Оператор writeln (от англ. write line — написать строку) или write (от англ. write — написать) — оператор вывода в Паскале, т.е. служит для вывода на экран каких-либо данных (просто текста, результатов выполнения программы, значений переменных и т.п.).

оператор write и writeln

Если необходимо после вывода перейти на другую строку, то используется оператор writeln () .

Результат:

Рассмотрим примеры задач с использованием вывода Writeln в Pascal:

Write('Сумма 5 + 6 = ',5+6);

Результат: Сумма 5 + 6 = 11

Результат: Привет

Результат: AB

Результат:
A
B

begin var n:integer; read(n); n: = n * n; print('n = ',n);

2 способ (форматный вывод):

begin var a:=1.2; var b:=4; var c:=a+b; WritelnFormat ('f (, ) = ', a, b, c); end.

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

var x := ReadInteger('Enter x:'); var y := ReadInteger('Enter y:'); var res := x + y; Print($'Sum of and is ');

[Название файла: L1task1.pas ]

Оператор присваивания и оператор Readln в Pascal

Оператор присваивания

Обычно программе для решения какой-либо задачи требуются данные. Данные хранятся в переменных, которые имеют свои идентификаторы (имена), например, идентификаторы X или Y , или более длинные идентификаторы переменных — number1 , counter и т.п.

Важно: Идентификаторы состоят из буквы, за которой могут следовать буквы, цифры или символ подчеркивания

Чтобы задать переменной какое-либо значение используется оператор присваивания. Оператор присваивания в Паскале обозначается как := , выполняет правую часть выражения и присваивает результат переменной, расположенной в левой части выражения:

оператор присваивания


Пример:

a:=2; writeln('квадрат ',a,'=',a*a);

begin var n:integer; // объявление переменной n:=1; // присваивание

2 method (канонический):

begin var n:=1; // объявление переменной и присваивание значения => инициализация

Ввод данных

Пример использования readln в Pascal:

Writeln('Введите число'); readln(a); writeln('квадрат ',a,'=',a*a);

то же самое, что и read:
Пример использования read в Pascal:

Writeln('Введите число'); read(a); writeln('квадрат ',a,'=',a*a);

Если запрашиваются две переменные, то можно перечислять их через запятую:

Writeln('Введите два числа'); read(a,b); writeln('сумма чисел = ',a+b);

begin var n:integer; // n - целочисленная переменная read(n); // ввод значения и сохранение его в переменной n

begin var n:real; // n - переменная вещественного типа read(n);// ввод значения и сохранение его в переменной n

// n - целочисленная переменная и мы вводим значение и сохранением его в переменной n var n:=ReadInteger(); // х - переменная вещественного типа и мы вводим значение и сохранением его в переменной х var x:=ReadReal();

3 способ (кортежное присваивание):

var n1, n2: integer; // объявление двух переменных (n1, n2) := (1, 2); // 1 присваивается переменной n1, 2 присваивается переменной n2

// n1 и n2 - целочисленные переменные и мы вводим для них два значения var(n1, n2) := readInteger2;

var x := ReadInteger('Введите x:'); var y := ReadInteger('Введите y:'); var res := x + y;

Задача 2. Даны две переменные. Выполнить основные арифметические действия с переменными ( + - * / ) и вывести результат на экран.
[Название файла: L1task2.pas ]

Читайте также: