Процедуры write, writeln и readln
19.03.2019 2336 Программируем на Паскале Ваш комментарийЭто четвёртый урок по изучению языка программирования Паскаль для начинающих. В нём мы подробно ознакомимся с встроенными процедурами языка: write, writeln и readln. Первые две выводят информацию на экран, третья позволяет считывать информацию с клавиатуры и используется как пауза в программах. Очевидно, трудно переоценить то, чем они занимаются. Крайне мало найдётся программ, которые совсем ничего не писали бы на экране.
Наши простые программы все до единой что-то выводят на экран — пишут, чему они посвящены и какую информацию пользователь должен ввести с клавиатуры. А это значит, что все три процедуры используются буквально в каждой из них.
Процедуры write и writeln очень похожи друг на друга, они выводят на экран строки, переменные (точнее значения переменных) и результаты действия других процедур и функций. Основное их отличие состоит только в том, что первая выводит информацию на экран и курсор остаётся в той же строке сразу за последним символом, в то время как вторая курсор принудительно переводит на следующую строку — линию.
Перейдём к примерам.
program WriteWritelnReadln; BEGIN writeln('Очередная программа курса изучения языка программирования Паскаль.'); END.
Посмотрите листинг 1. Вообще-то для вас в нём не должно быть ничего нового. Когда мы собираемся передать нашей процедуре строку, мы обособляем её одиночными кавычками — апострофами. Так PascalABC поймёт, где начало строки, где её конец и выведет информацию на экран. Если мы запустим нашу программу в среде разработки без компиляции, то в окне вывода увидим переданную строку.
Не скажу, что выводимый текст был таким уж большим, но частенько случается так, что на экран нужно вывести длинные строки или значения нескольких переменных. В таких случаях, данные (аргументы) в процедуру передаются через запятую, а длинную строку, разбивают на более короткие и апострофами обособляют уже каждую короткую строку. Давайте немного перепишем нашу программу, теперь она примет следующий вид:
program WriteWritelnReadln; BEGIN writeln( 'Очередная программа курса изучения ', 'языка программирования Паскаль.' ); readln; END.
Обратите внимание, короткие строки — аргументы процедуры я написал с новой строки, сдвинув их на пару пробелов вправо. Когда аргументов будет ещё больше, такая форма записи будет более наглядной. Каждая короткая строка обособлена апострофами, между собою строки отделены запятой, а первая строка заканчивается пробелом. Если этого не сделать, последнее слово первой строчки неминуемо «прилипнет» к первому слову во второй.
Кроме того, чтобы можно было откомпилировать нашу программу и безболезненно её запускать, последним оператором я добавил процедуру readln без параметров. Впрочем, так мы её уже использовали в прошлых уроках.
Откомпилируйте программу, перейдите в папку с нею и запустите исполняемый файл. Открывается консольное окно программы, в нём напечатан наш текст, а курсор мигает в следующей строке. Вы можете набрать что-то с клавиатуры и завершить ввод, нажав клавишу «Enter». Пока любые введённые вами данные пропадут, но скоро мы научимся их принимать и обрабатывать. Пока же вернитесь к листингу программы, процедуру writeln замените на write. Снова откомпилируйте программу и запустите exe-файл. Несложно заметить, что теперь курсор мигает в самом конце нашего текста и ввод с клавиатуры начинается здесь же. Из этого можно сделать ещё один вывод: если вы используете процедуру write, после которой планируется ввод с клавиатуры, позаботьтесь о пробеле в конце выводимого текста, чтобы ввод с клавиатуры к нему не прилипал.
Уже на протяжении нескольких уроков (сегодняшний — не исключение), мы используем процедуру readln без параметров, для задержки. Давайте научим её принимать данные, введённые пользователем с клавиатуры, чтобы после использовать их в наших программах.
Для этого объявим в нашей программе переменные. Одна из них будет строкового типа String. Мы его ещё не проходили, но буквально через урок будем с ним знакомиться подробно. Сейчас же следует понимать, что в переменные этого типа можно сохранять строки, длина которых не превышает 255 символов. Давайте позволим пользователю ввести с клавиатуры его имя и возраст. Возраст сохраним в целочисленную переменную, а имя — в строковую. Программа принимает вид:
program WriteWritelnReadln; var userName: String; userAge: Integer; BEGIN writeln( 'Очередная программа курса изучения ', 'языка программирования Паскаль.' ); readln; END.
Переменные введены, теперь давайте научим нашу программу их читать. Прежде всего, при помощи процедуры writeln укажем пользователю, чего мы от него хотим, а потом используем write и readln для вывода текста и ввода данных в тех же строках. Пока наша программа выглядит так:
program WriteWritelnReadln; var userName: String; userAge: Integer; BEGIN writeln( 'Очередная программа курса изучения ', 'языка программирования Паскаль. ', 'Далее предполагается ввод данных с клавиатуры. Если вы ошиблись, ', 'используйте клавишу BackSpace, ввод заканчивается по нажатию на Enter.' ); readln; END.
Обратите внимание, все строчки кроме последней оканчиваются пробелами. Вообще же, весь переданный процедуре writeln текст, будет выводиться как одна длинная строка. В общем случае, такая строка будет ограничена только габаритами консольного окна программы и всё, что не поместилось в одной строке, будет напечатано во второй и последующих строках, впрочем, переносами строк процедура не занимается.
Настало время, когда мы, наконец, введём данные с клавиатуры и используем их в нашей программе. Используем, правда, скромно — просто выведем их на экран, покажем, что мы их получили. Гораздо чаще, введённые данные используют для расчётов или разграничения доступа к функциям программы. Например, введённый пользователем возраст позволяет программе решить, может ли он ей пользоваться в принципе. Впрочем, мы не станем сегодня как-то проверять введённые данные. Да и сложно себе представить, как именно мы могли бы это сделать. В общем, доверимся пользователю, поверим в его честность. Наша программа приняла законченный вид:
program WriteWritelnReadln; var userName: String; userAge: Integer; BEGIN writeln( 'Очередная программа курса изучения ', 'языка программирования Паскаль. ', 'Далее предполагается ввод данных с клавиатуры. Если вы ошиблись, ', 'используйте клавишу BackSpace, ввод заканчивается по нажатию на Enter.' ); write('Укажите пожалуйста ваше имя: '); readln(userName); write('Укажите ваш возраст (количество полных лет) целым числом: '); readln(userAge); writeln( 'Вы указали, что вас зовут ', userName, ' и вам ', userAge, ' лет.' ); readln; END.
Здесь следует обратить внимание на то, что выводя строки вместе со значениями переменных, пробелы мы уже добавляли как до, так и после них. Кроме того, слово «лет» указано именно в этой форме и она не будет меняться автоматически и подстраиваться под указанный возраст. Нужно учитывать, что фраза может принимать вид: «Вы указали, что вас зовут Владимир и вам 41 лет». Очевидно, за формами слов, падежами, склонениями и спряжениями глаголов нужно будет следить отдельно, но это уже выходит за рамки нашего сегодняшнего урока. Мы убедились, что программа работает — нам удалось воспользоваться теми данными, которые пользователь ввёл с клавиатуры. Последний вызов процедуры readln без параметров служит для задержки как и раньше.
Репозиторий листингов программ.