l

Процедуры write, writeln и readln

19.03.2019 2336 Программируем на Паскале Ваш комментарий

Это четвёртый урок по изучению языка программирования Паскаль для начинающих. В нём мы подробно ознакомимся с встроенными процедурами языка: write, writeln и readln. Первые две выводят информацию на экран, третья позволяет считывать информацию с клавиатуры и используется как пауза в программах. Очевидно, трудно переоценить то, чем они занимаются. Крайне мало найдётся программ, которые совсем ничего не писали бы на экране.

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

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

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

Write переводится с английского как «писать», в нашем случае — печатать на экране. Название writeln составлено из двух слов «write line» — «писать линию», выводит информацию на экран и даже если в строке ещё остаётся место, строка на этом завершается и курсор переводится на новую строку.

Перейдём к примерам.

Листинг 1.

program WriteWritelnReadln;

BEGIN
  writeln('Очередная программа курса изучения языка программирования Паскаль.');
END.

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

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

Листинг 2.

program WriteWritelnReadln;

BEGIN
  writeln(
    'Очередная программа курса изучения ',
	'языка программирования Паскаль.'
  );
  readln;
END.

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

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

Кроме того, чтобы можно было откомпилировать нашу программу и безболезненно её запускать, последним оператором я добавил процедуру readln без параметров. Впрочем, так мы её уже использовали в прошлых уроках.

Откомпилируйте программу, перейдите в папку с нею и запустите исполняемый файл. Открывается консольное окно программы, в нём напечатан наш текст, а курсор мигает в следующей строке. Вы можете набрать что-то с клавиатуры и завершить ввод, нажав клавишу «Enter». Пока любые введённые вами данные пропадут, но скоро мы научимся их принимать и обрабатывать. Пока же вернитесь к листингу программы, процедуру writeln замените на write. Снова откомпилируйте программу и запустите exe-файл. Несложно заметить, что теперь курсор мигает в самом конце нашего текста и ввод с клавиатуры начинается здесь же. Из этого можно сделать ещё один вывод: если вы используете процедуру write, после которой планируется ввод с клавиатуры, позаботьтесь о пробеле в конце выводимого текста, чтобы ввод с клавиатуры к нему не прилипал.

Уже на протяжении нескольких уроков (сегодняшний — не исключение), мы используем процедуру readln без параметров, для задержки. Давайте научим её принимать данные, введённые пользователем с клавиатуры, чтобы после использовать их в наших программах.

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

Листинг 3.

program WriteWritelnReadln;

var
  userName: String;
  userAge: Integer;

BEGIN
  writeln(
    'Очередная программа курса изучения ',
	'языка программирования Паскаль.'
  );
  readln;
END.
Из названий переменных уже понятно, какие данные я собираюсь в них хранить. Кроме того, эти имена начинаются со строчных, но каждое новое слово я пишу с прописной. Так их намного удобнее читать.

Переменные введены, теперь давайте научим нашу программу их читать. Прежде всего, при помощи процедуры writeln укажем пользователю, чего мы от него хотим, а потом используем write и readln для вывода текста и ввода данных в тех же строках. Пока наша программа выглядит так:

Листинг 4.

program WriteWritelnReadln;

var
  userName: String;
  userAge: Integer;

BEGIN
  writeln(
    'Очередная программа курса изучения ',
	'языка программирования Паскаль. ',
	'Далее предполагается ввод данных с клавиатуры. Если вы ошиблись, ',
	'используйте клавишу BackSpace, ввод заканчивается по нажатию на Enter.'
  );
  readln;
END.

Обратите внимание, все строчки кроме последней оканчиваются пробелами. Вообще же, весь переданный процедуре writeln текст, будет выводиться как одна длинная строка. В общем случае, такая строка будет ограничена только габаритами консольного окна программы и всё, что не поместилось в одной строке, будет напечатано во второй и последующих строках, впрочем, переносами строк процедура не занимается.

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

Листинг 5.

program WriteWritelnReadln;

var
  userName: String;
  userAge: Integer;

BEGIN
  writeln(
    'Очередная программа курса изучения ',
	'языка программирования Паскаль. ',
	'Далее предполагается ввод данных с клавиатуры. Если вы ошиблись, ',
	'используйте клавишу BackSpace, ввод заканчивается по нажатию на Enter.'
  );
  write('Укажите пожалуйста ваше имя: ');
  readln(userName);
  write('Укажите ваш возраст (количество полных лет) целым числом: ');
  readln(userAge);
  
  writeln(
    'Вы указали, что вас зовут ', userName,
	' и вам ', userAge, ' лет.'
  );
  readln;
END.

Процедуры write, writeln и readln. Программируем на Паскале

Здесь следует обратить внимание на то, что выводя строки вместе со значениями переменных, пробелы мы уже добавляли как до, так и после них. Кроме того, слово «лет» указано именно в этой форме и она не будет меняться автоматически и подстраиваться под указанный возраст. Нужно учитывать, что фраза может принимать вид: «Вы указали, что вас зовут Владимир и вам 41 лет». Очевидно, за формами слов, падежами, склонениями и спряжениями глаголов нужно будет следить отдельно, но это уже выходит за рамки нашего сегодняшнего урока. Мы убедились, что программа работает — нам удалось воспользоваться теми данными, которые пользователь ввёл с клавиатуры. Последний вызов процедуры readln без параметров служит для задержки как и раньше.

Репозиторий листингов программ.

Оставьте ваш отзыв: