Что такое readln в паскале
Что такое readln в паскале
Приветствую. Сегодня я хотел бы затронуть тему операторов ввода данных.
Ничего не напоминает? Те, кто внимательно читали предыдущую статью, скажут что эти операторы похожи на операторы вывода. И будут правы! Оператор readln отличается от оператора read только лишь тем, что после ввода данных переводит курсор на следующую строку
Возьмем для примера задачу №1 из первого урока. В ней, если вы помните, длину и ширину прямоугольника мы непосредственно вбивали в код программы. Сейчас мы немного поколдуем над кодом и сделаем так, чтобы эти данные можно было вводить с клавиатуры каждый раз при запуске программы.
Для этого вместо куска кода пишем
Попробуйте теперь запустить программу с измененным кодом. На всякий случай напишу весь код:
Заметили, как теперь при запуске программа ждет ввода данных? И пока ввод не будет осуществлен, она не продолжит выполнение. Но согласитесь, это мы с вами знаем, что при запуске программы нужно ввести значения длины и ширины, а кто-то другой, запустив ее, не догадается до этого. Поэтому нам нужно вывести на экран просьбу, что-то вроде «Введите длину». Для этого используем оператор вывода write. О нем я уже писал в предыдущем уроке.
Ход ваших рассуждений при составлении программы должен быть примерно следующим:
1) Мне нужно попросить пользователя ввести значения ширины прямоугольника. Для этого использую оператор вывода: writeln(‘Введите ширину прямоугольника’);
2) Теперь нужно чтобы программа прочитала это значение. Для этого использую оператор ввода: readln(A);
Здесь немного остановимся. Возможно у вас возник вопрос: «А что значит буква А в скобках?» Так вот, в скобках вы указываете ту переменную, которой будет присвоено значение, введенное с клавиатуры. В нашем случае ширину мы записываем в переменную А, следовательно и в скобках пишем ее.
3) Далее мне нужно попросить пользователя ввести длину. По аналогии с первым пунктом:
writeln(‘Введите длину прямоугольника’);
4) Считываем введенное значение по аналогии со 2-ым пунктом: readln(B);
Вот и все, соберем весь код в кучу:
1) Дописать перед строчкой write(P); строку: write(‘Периметр =’);
Запустите программу, протестируйте ее при разных значениях длины и ширины. Если возникли какие-то вопросы, не стесняйтесь задавать их, контакты для связи со мной находятся здесь. Ну, а если вопросов нет, можете приступать к следующему уроку
Ввод-вывод данных в Pascal
Компьютерные программы обрабатывают (изменяют) различные данные. Программа получает данные, что-то делает с ними и выводит их в измененной форме или выводит другие данные.
Откуда или с помощью чего можно ввести данные в программу? Обычно это можно сделать с помощью клавиатуры или из файлов.
Куда можно вывести данные? На экран, в файл, на принтер и др.
Стандартным устройством ввода является клавиатура, а вывода — монитор. Стандартные — значит «работающие по-умолчанию»; т.е. если не указано ничего иного, то программа будет считывать данные с клавиатуры, а выводить их на монитор. Вместе клавиатуру и монитор называют консолью. Таким образом консоль представляет собой стандартное устройство ввода-вывода.
Вывод данных на экран. Форматированный вывод
Write() чаще используется, когда надо вывести для пользователя сообщение на экран, после чего получить данные, не переводя курсора на новую строку. Например, выводим на экран «Введи число: » и не переводим курсор на новую строку, а ждем ввода.
Еще один пример. В памяти компьютера хранятся данные. Из программы мы обращаемся к ним с помощью переменных num, fl и st. Вывести их значения на экран можно по-разному.
Во втором случае мы видим, что процедуры вывода (как write() так writeln() ) позволяют конструировать выводимую информацию из различных компонент (строк-констант и переменных).
В третьем случае был осуществлен так называемый форматированный вывод. При этом для выводимого значения указывается ширина поля вывода (количество знакомест). Если мы выводим вещественное (дробное) число, то вторым числом через двоеточие указывается количество знаков после запятой. Если для вещественных чисел не осуществлять форматирование, то они отобразятся так, как определено для данного компьютера. Если указать только число знакомест без фиксирования дробной части, то вывод будет в экспоненциальной форме.
Ввод данных с клавиатуры
Когда данные вводятся, то они помещаются в ячейки памяти, доступ к которым обеспечивается с помощью механизма переменных. Поэтому, когда в программе на Pascal используется процедура read() (или readln() ), то в качестве фактического параметра (аргумента) ей передается имя переменной, которая будет связана с вводимыми данными. Потом эти данные можно будет использовать в программе или просто вывести на экран.
В процедуры ввода можно передавать не один фактический параметр, а множество.
При вводе данных их разделяют пробелом, табуляцией или переходом на новую строку (Enter). Данные символьного типа не разделяются или разделяются переходом на новую строку.
Язык программирования TurboPascal
Turbo Pascal. Ввод и вывод данных
Формат оператора:
Допускается использование оператора ввода без параметров
который выполняет переход на новую строку при вводе данных.
При вводе данных с помощью оператора READ нужно иметь в виду следующие основные правила:
ЗАДАЧА. Ввод данных.
Введем в программу следующие исходные данные:
Обозначим символом пробел при вводе. При вводе числа будем разделять пробелом. Между числами допускается любое количество пробелов. Тогда экран монитора при вводе данных может выглядеть следующим образом:
Введите a, b, c:2
3
Введите x, y, z:44.447.5
76
Введите s1,s2,s3:A B C
Вывод данных
Здесь a1,a2,a3. an могут быть либо переменными, либо строкой символов, заключенной в апострофы. Все элементы перечисляются через запятую. Добавление к оператору WRITE символов LN обеспечивает автоматический переход курсора после вывода данных на новую строку.
Допускается использование оператора ввода без параметров
который выполняет переход на новую строку, поэтому последующий оператор вывода с параметрами будет выводить данные с новой строки. Оператор вывода без параметров часто используется для формирования пустых строк.
Бесформатный вывод. Форма представления выводимых данных зависит от типа данных:
При бесформатном выводе отводимое количество позиций равно размеру данных. При выводе символа отводится одна позиция, при выводе целого числа – число позиций равно числу значащих цифр плюс одна позиция под знак, если число отрицательное. Это необходимо учитывать при последовательном выводе данных, например чисел, чтобы значения разных переменных не сливались друг с другом.
ПРИМЕР. Рассмотрим фрагмент программы:
Два числа слились. Для того чтобы числа не сливались необходимо использовать разделяющие пробелы или разнесение информации по разным строкам.
Результат:
Результат:
Форматный вывод. Для вывода вещественных чисел необходимо указать в операторе WRITE формат представления числа, который имеет вид:
где: m – целое число, указывающее общее количество позиций отводимое под значение переменной, включая позицию под знак числа, точку и количество цифр дробной части; n – целое число, определяющее количество цифр дробной части.
8 позиций |
Символом обозначен пробел.
Вывод вещественных чисел выполняется по следующим правилам:
В качестве примера рассмотрим печать вещественного числа в различных форматах.
Результат работы программы:
Печать вещественного числа
Печать в фиксированном формате
Печать в плавающем формате
Для вывода целых чисел необходимо указать в операторе WRITE формат представления числа, который имеет вид:
k – целое число, указывающее общее количество позиций, отводимое под значение переменной.
В целых числах отсутствует дробная часть, поэтому нет необходимости указывать в формате число позиций дробной части.
Процедуры write, writeln и readln
Это четвёртый урок по изучению языка программирования Паскаль для начинающих. В нём мы подробно ознакомимся с встроенными процедурами языка: write, writeln и readln. Первые две выводят информацию на экран, третья позволяет считывать информацию с клавиатуры и используется как пауза в программах. Очевидно, трудно переоценить то, чем они занимаются. Крайне мало найдётся программ, которые совсем ничего не писали бы на экране.
Наши простые программы все до единой что-то выводят на экран — пишут, чему они посвящены и какую информацию пользователь должен ввести с клавиатуры. А это значит, что все три процедуры используются буквально в каждой из них.
Процедуры write и writeln очень похожи друг на друга, они выводят на экран строки, переменные (точнее значения переменных) и результаты действия других процедур и функций. Основное их отличие состоит только в том, что первая выводит информацию на экран и курсор остаётся в той же строке сразу за последним символом, в то время как вторая курсор принудительно переводит на следующую строку — линию.
Перейдём к примерам.
Посмотрите листинг 1. Вообще-то для вас в нём не должно быть ничего нового. Когда мы собираемся передать нашей процедуре строку, мы обособляем её одиночными кавычками — апострофами. Так PascalABC поймёт, где начало строки, где её конец и выведет информацию на экран. Если мы запустим нашу программу в среде разработки без компиляции, то в окне вывода увидим переданную строку.
Не скажу, что выводимый текст был таким уж большим, но частенько случается так, что на экран нужно вывести длинные строки или значения нескольких переменных. В таких случаях, данные (аргументы) в процедуру передаются через запятую, а длинную строку, разбивают на более короткие и апострофами обособляют уже каждую короткую строку. Давайте немного перепишем нашу программу, теперь она примет следующий вид:
Обратите внимание, короткие строки — аргументы процедуры я написал с новой строки, сдвинув их на пару пробелов вправо. Когда аргументов будет ещё больше, такая форма записи будет более наглядной. Каждая короткая строка обособлена апострофами, между собою строки отделены запятой, а первая строка заканчивается пробелом. Если этого не сделать, последнее слово первой строчки неминуемо «прилипнет» к первому слову во второй.
Кроме того, чтобы можно было откомпилировать нашу программу и безболезненно её запускать, последним оператором я добавил процедуру readln без параметров. Впрочем, так мы её уже использовали в прошлых уроках.
Откомпилируйте программу, перейдите в папку с нею и запустите исполняемый файл. Открывается консольное окно программы, в нём напечатан наш текст, а курсор мигает в следующей строке. Вы можете набрать что-то с клавиатуры и завершить ввод, нажав клавишу «Enter». Пока любые введённые вами данные пропадут, но скоро мы научимся их принимать и обрабатывать. Пока же вернитесь к листингу программы, процедуру writeln замените на write. Снова откомпилируйте программу и запустите exe-файл. Несложно заметить, что теперь курсор мигает в самом конце нашего текста и ввод с клавиатуры начинается здесь же. Из этого можно сделать ещё один вывод: если вы используете процедуру write, после которой планируется ввод с клавиатуры, позаботьтесь о пробеле в конце выводимого текста, чтобы ввод с клавиатуры к нему не прилипал.
Уже на протяжении нескольких уроков (сегодняшний — не исключение), мы используем процедуру readln без параметров, для задержки. Давайте научим её принимать данные, введённые пользователем с клавиатуры, чтобы после использовать их в наших программах.
Для этого объявим в нашей программе переменные. Одна из них будет строкового типа String. Мы его ещё не проходили, но буквально через урок будем с ним знакомиться подробно. Сейчас же следует понимать, что в переменные этого типа можно сохранять строки, длина которых не превышает 255 символов. Давайте позволим пользователю ввести с клавиатуры его имя и возраст. Возраст сохраним в целочисленную переменную, а имя — в строковую. Программа принимает вид:
Переменные введены, теперь давайте научим нашу программу их читать. Прежде всего, при помощи процедуры writeln укажем пользователю, чего мы от него хотим, а потом используем write и readln для вывода текста и ввода данных в тех же строках. Пока наша программа выглядит так:
Обратите внимание, все строчки кроме последней оканчиваются пробелами. Вообще же, весь переданный процедуре writeln текст, будет выводиться как одна длинная строка. В общем случае, такая строка будет ограничена только габаритами консольного окна программы и всё, что не поместилось в одной строке, будет напечатано во второй и последующих строках, впрочем, переносами строк процедура не занимается.
Настало время, когда мы, наконец, введём данные с клавиатуры и используем их в нашей программе. Используем, правда, скромно — просто выведем их на экран, покажем, что мы их получили. Гораздо чаще, введённые данные используют для расчётов или разграничения доступа к функциям программы. Например, введённый пользователем возраст позволяет программе решить, может ли он ей пользоваться в принципе. Впрочем, мы не станем сегодня как-то проверять введённые данные. Да и сложно себе представить, как именно мы могли бы это сделать. В общем, доверимся пользователю, поверим в его честность. Наша программа приняла законченный вид:
Здесь следует обратить внимание на то, что выводя строки вместе со значениями переменных, пробелы мы уже добавляли как до, так и после них. Кроме того, слово «лет» указано именно в этой форме и она не будет меняться автоматически и подстраиваться под указанный возраст. Нужно учитывать, что фраза может принимать вид: «Вы указали, что вас зовут Владимир и вам 41 лет». Очевидно, за формами слов, падежами, склонениями и спряжениями глаголов нужно будет следить отдельно, но это уже выходит за рамки нашего сегодняшнего урока. Мы убедились, что программа работает — нам удалось воспользоваться теми данными, которые пользователь ввёл с клавиатуры. Последний вызов процедуры readln без параметров служит для задержки как и раньше.
3 занятие
Решим задачу, прокомментировав каждое свое действие в фигурных скобках. Напомним, что комментарий не воспринимается компьютером, а нам он нужен для того, чтобы лучше понять как работает программа.
Задача. Напишите программу, которая бы очищала экран и вычисляла произведение двух чисел, вводимых пользователем.
Program Proizv2; Uses Crt;<Подключаем модуль Crt> Var number1, <переменная, в которой будет содержаться первое число> number2, <переменная, в которой будет содержаться второе число> rezult <переменная, в которой будет содержаться результат> : integer; Begin ClrScr;<Используем процедуру очистки экрана из модуля Crt> Write (‘Введите первое число ‘); <Выводим на экран символы, записанные между апострофами> Readln (number1); <Введенное пользователем число считываем в переменную number1> Write (‘Введите второе число ‘); <Выводим на экран символы, записанные между апострофами> Readln (number2); <Введенное пользователем число считываем в переменную number2> rezult := number1 * number2; <Находим произведение введенных чисел и присваиваем переменной rezult> Write (‘Произведение чисел ‘, number1, ‘ и ‘, number2, ‘ равно ‘, rezult); <Выводим на экран строчку, содержащую ответ задачи> Readln;<Процедура задержки экрана> End. |
Чтобы лучше понять действие программы, наберите ее на компьютере и проверьте ее действие. Ответьте на вопросы:
Задание. Измените программу так, чтобы она запрашивала у пользователя еще одну переменную и выводила результат произведения трех чисел.
Операторы Write и WriteLn
Мы уже использовали операторы Write и WriteLn, но нам необходимо подробнее остановиться на правилах применения этих операторов.
Общий вид:
Write (список выражений)
WriteLn (список выражений)
Например, при выполнении процедуры WriteLn(‘Найденное число ‘,а), будет напечатана строчка, заключенная в апострофы, а затем выведено значение переменной а.
Оператор WriteLn можно применить и без параметров. В этом случае напечатается строка, состоящая из пробелов, и курсор будет переведен на другую строку. Это иногда нам нужно для лучшего восприятия ввода данных.
Операторы Read и ReadLn
Общий вид:
Read(переменная, переменная. )
ReadLn(переменная, переменная. )
При выполнении процедуры Read ожидается ввод перечисленных в скобках значений. Вводимые данные нужно отделить друг от друга пробелами. Присваивание значений идет по очереди.
Особых различий при чтении и записи в использовании операторов Read и ReadLn нет. Часто процедуру ReadLn без параметров применяют в конце программы для задержки: до нажатия на клавишу результат выполнения программы остается на экране. Это очень полезно делать для анализа результатов.
Примечание. Когда Вы ставите задержку экрана, обратите внимание на предыдущий ввод. Если данные запрашивались процедурой Read задержки не будет.
Решим задачу, в которой рассмотрим все возможные употребления этих процедур.
Задача. Найти среднее значение трех чисел.
Примечание. Чтобы найти среднее значение нескольких чисел, нужно сложить эти числа и сумму разделить на количество этих чисел.
Program Srednee; Uses Crt; Var First, Second, Third : integer; Sum : real; Begin ClrScr; Write (‘Введите первое число ‘); ReadLn(First); Write (‘Введите второе и третье числа через пробел ‘); ReadLn(Second, Third); Sum := First + Second + Third; Sum := Sum/3; Write (‘Среднее значение ‘, First, ‘, ‘,Second, ‘ и ‘, Third, ‘ равно ‘, Sum:5:2); ReadLn; End. |
Теперь компьютер должен считать введенные символы и занести их в переменную First, это произойдет при выполнении следующего оператора ReadLn(First). Затем с помощью оператора Write запрашиваем значения еще двух чисел и считываем их в переменные Second и Third. Затем вычисляем их сумму и присваиваем полученное число переменной Sum. Чтобы найти среднее, нужно теперь полученное число разделить на 3 и сохранить результат в какой-либо переменной.
Совсем не обязательно описывать еще одну переменную для сохранения результата. Можно, как в нашей программе, значение переменной Sum разделить на 3 и результат опять присвоить той же переменной Sum. Теперь можно вывести результат вычислений на экран с помощью процедуры Write. И, наконец, последняя процедура ReadLn задержит наш вывод на экране до нажатия на клавишу.
Среднее значение 5, 7 и 12 равно 8.00
Просмотрите внимательно эту строчку и сравните со строчкой вывода результата в нашей программе. Протестируйте программу еще несколько раз для других значений переменных.
Выберите с учителем задачи для решения из следующего перечня:
- Что такое readln в информатике
- Что такое ready to wear