Форматированный вывод паскаль
Форматированный вывод паскаль
Информация, выводимая любой программой должна быть легко читаемой, понятной для пользователя. Для этого, в частности, нужно, чтобы действительные числа были выведены в алгебраической форме, как число с точкой, а также в записях содержались пробелы, отделяющие числа от текста и др. Для этого в языках программирования используются форматы вывода.
При использовании форматов для вывода значений в текстовые файлы или на экран около имени, выводимого данного явно указывается размер поля для размещения его значения (после знака : ), в виде
1. Для целых данных ( integer и др.) — формат задается одним числом, определяющим число позиций, отводимых на это число.
Пример:
Writeln ( i :5);
Выведет на экран значение переменной i , используя для этого 5 позиций (даже если число занимает меньше 5 позиций, свободные позиции все равно будут отображаться).
Если переменная i :=34, то на экран будут выведены 3 пустых позиции (они для наглядности показаны знаком подчеркивания) и число 34, т.о. всего 5 позиций.
_ _ _ 34
Если переменная i :=2345666, то данный формат ( i :5) не может быть использован (выводимое число занимает больше позиций) и будет просто игнорироваться и все значение переменной отобразиться на экране.
2. Для вещественных данных ( real и др.) — формат задается либо одним числом, определяющим число позиций, отводимых на это число в экспоненциальной форме; либо двумя числами, первое из которых обозначает общий размер поля, отведенного под это число, второе — число знаков после запятой, т.е. точность.
Writeln ( p :12); или Writeln ( p :6:2);
Если переменная p :=1234.6789, то в первом случае на экране появится
Пусть значение переменной X равно 123.45678, тогда оператор
Write(X); выведет «_1.23456780000000000E+02»
Write(X:10:5); выведет «_123.45678»
3. Для строковых и символьных данных ( string , char ) — формат задается одним числом, определяющим число позиций, отводимых на значение этих данных (т.е. на символ или набор символов).
Для строковой переменной ss :=’СТРОКА’ и для символьной переменной c :=’ C ’, операторы
Writeln ( ss :8); Writeln ( c :4);
выведут на экран
Т.е. в первой строчке две первые позиции из восьми отводимых будут пустыми, а остальные занимаются словом СТРОКА. Во второй строке из 4 позиций отводимых под переменную, первые три будут свободными, а последняя занята символом С.
Может оказаться полезным, что оператор Write (‘ ‘: n ) выведет на экран n пробелов. При n =6 будет
Оператор вывода writeln имеет такой вид:
writeln(‘ За ’,t:6:2,’ сек. скорость троллейбуса v=’,v:5:1,’ м/с,’);
На экране появится (знак подчеркивания показан для демонстрации пустых позиций форматированного вывода):
За _ _1.00 сек. скорость троллейбуса v = _ _1.5 м/ c ,
Форматированный вывод паскаль
Информация, выводимая любой программой должна быть легко читаемой, понятной для пользователя. Для этого, в частности, нужно, чтобы действительные числа были выведены в алгебраической форме, как число с точкой, а также в записях содержались пробелы, отделяющие числа от текста и др. Для этого в языках программирования используются форматы вывода.
При использовании форматов для вывода значений в текстовые файлы или на экран около имени, выводимого данного явно указывается размер поля для размещения его значения (после знака :), в виде переменная:ширина поля.
Форматы для данных различных типов
1. Для целых данных ( integer и др.) — формат задается одним числом, определяющим число позиций, отводимых на это число. Например:
выведет на экран значение переменной i , используя для этого 5 позиций (даже если число занимает меньше 5 позиций, свободные позиции все равно будут отображаться).
Если переменная i :=34, то на экран будут выведены 3 пустых позиции (они для наглядности показаны знаком подчеркивания) и число 34, т.о. всего 5 позиций.
Если переменная i :=2345666, то данный формат ( i :5) не может быть использован (выводимое число занимает больше позиций) и будет просто игнорироваться и все значение переменной отобразиться на экране.
2. Для вещественных данных ( real и др.) — формат задается либо одним числом, определяющим число позиций, отводимых на это число в экспоненциальной форме; либо двумя числами, первое из которых обозначает общий размер поля, отведенного под это число, второе — число знаков после запятой, т.е. точность. Например:
Writeln ( p :12); или Writeln ( p :6:2);
Если переменная p :=1234.,6789, то в первом случае на экране появится
Еще один пример. Пусть значение переменной X равно 123.45678, тогда оператор
Write(X); выведет «_1.23456780000000000E+02»
Write(X:10:5); выведет «_123.45678»
Пример программы, демонстрирующей возможности форматированного вывода числовых данных (3_1_7. exe ).
3. Для строковых и символьных данных ( string , char ) — формат задается одним числом, определяющим число позиций, отводимых на значение этих данных (т.е. на символ или набор символов). Например, для строковой переменной ss :=’СТРОКА’ и для символьной переменной c :=’ C ’, операторы
Writeln ( ss :8); Writeln ( c :4);
выведут на экран
Т.е. в первой строчке две первые позиции из восьми отводимых будут пустыми, а остальные занимаются словом СТРОКА. Во второй строке из 4 позиций отводимых под переменную, первые три будут свободными, а последняя занята символом С.
Может оказаться полезным, что оператор Write (‘ ‘: n ) выведет на экран n пробелов. При n=6 будет
Если в разобранной выше задаче переписать оператор writeln , который выводит на экран значение времени и скорости троллейбуса, таким образом:
writeln(‘ За ’,t:6:2,’ сек. скорость троллейбуса v=’,v:5:1,’ м/с,’);
то на экране появится (знак подчеркивания показан для демонстрации пустых позиций форматированного вывода):
За _ _1.00 сек. скорость троллейбуса v = _ _1.5 м/ c ,
Покажем еще один пример использования форматированного вывода. Далее приведена программа и результаты ее работы.
a :=2 e 5; <вещественная переменная>
b :=3.1415926; <вещественная переменная>
s :=’ privet ’; <строковая переменная>
Ввод-вывод данных в Pascal
Компьютерные программы обрабатывают (изменяют) различные данные. Программа получает данные, что-то делает с ними и выводит их в измененной форме или выводит другие данные.
Следовательно, любой язык программирования должен иметь инструменты как для ввода данных, так и их вывода. В Паскале ввод осуществляется с помощью процедур read() и readln() , а вывод — благодаря write() и writeln() . Процедуры, которые имеют окончание ln , после своего выполнения переводят указатель на новую строку.
Откуда или с помощью чего можно ввести данные в программу? Обычно это можно сделать с помощью клавиатуры или из файлов.
Куда можно вывести данные? На экран, в файл, на принтер и др.
Стандартным устройством ввода является клавиатура, а вывода — монитор. Стандартные — значит «работающие по-умолчанию»; т.е. если не указано ничего иного, то программа будет считывать данные с клавиатуры, а выводить их на монитор. Вместе клавиатуру и монитор называют консолью. Таким образом консоль представляет собой стандартное устройство ввода-вывода.
Вывод данных на экран. Форматированный вывод
Вывод данных на экран и в файл в языке программирования Pascal осуществляется с помощью процедур write ( ) и writeln ( ) . Здесь будет рассмотрен вывод только на экран.
Допустим, нам требуется отобразить на экране пару фраз. Если мы хотим, чтобы каждая из них начиналась с новой строки, то надо использовать writeln() , если нет – то write() .
Write() чаще используется, когда надо вывести для пользователя сообщение на экран, после чего получить данные, не переводя курсора на новую строку. Например, выводим на экран «Введи число: » и не переводим курсор на новую строку, а ждем ввода.
Еще один пример. В памяти компьютера хранятся данные. Из программы мы обращаемся к ним с помощью переменных num, fl и st. Вывести их значения на экран можно по-разному.
Во втором случае мы видим, что процедуры вывода (как write() так writeln() ) позволяют конструировать выводимую информацию из различных компонент (строк-констант и переменных).
В третьем случае был осуществлен так называемый форматированный вывод. При этом для выводимого значения указывается ширина поля вывода (количество знакомест). Если мы выводим вещественное (дробное) число, то вторым числом через двоеточие указывается количество знаков после запятой. Если для вещественных чисел не осуществлять форматирование, то они отобразятся так, как определено для данного компьютера. Если указать только число знакомест без фиксирования дробной части, то вывод будет в экспоненциальной форме.
Ввод данных с клавиатуры
Ввод данных в языке программирования Паскаль обеспечивается процедурами read() и readln() . Ввод данных осуществляется либо с клавиатуры, либо из файла. Здесь рассматривается только ввод с клавиатуры.
Когда данные вводятся, то они помещаются в ячейки памяти, доступ к которым обеспечивается с помощью механизма переменных. Поэтому, когда в программе на Pascal используется процедура read() (или readln() ), то в качестве фактического параметра (аргумента) ей передается имя переменной, которая будет связана с вводимыми данными. Потом эти данные можно будет использовать в программе или просто вывести на экран.
В процедуры ввода можно передавать не один фактический параметр, а множество.
При вводе данных их разделяют пробелом, табуляцией или переходом на новую строку (Enter). Данные символьного типа не разделяются или разделяются переходом на новую строку.
Существуют особенности ввода данных с помощью операторов read() и readln() . Если используются подряд несколько операторов read() , то вводимые данные можно разделять всеми допустимыми способами. При использовании нескольких вызовов readln() каждый последующий срабатывает только после нажатия Enter. Программа ниже иллюстрирует это. Комментарии поясняют последовательность возможных действий при вводе данных.
Язык программирования TurboPascal
Turbo Pascal. Ввод и вывод данных
Для ввода данных в языке Турбо Паскаль предусмотрены стандартные операторы (процедуры) – READ и READLN , которые предназначены для чтения данных, как с клавиатуры, так и из файла. В данном разделе рассматривается ввод данных только с клавиатуры. Добавление к оператору READ символов LN обеспечивает автоматический переход курсора после ввода данных на новую строку.
Формат оператора:
Здесь a1,a2,a3. an – переменные, которым последовательно присваиваются значения. Если в тексте программы встречается оператор READ , компьютер приостанавливает работу и ожидает ввода значений переменных с клавиатуры. Когда все значения переменных, перечисленных в операторе ввода, введены, процесс выполнения программы продолжается.
Допускается использование оператора ввода без параметров
который выполняет переход на новую строку при вводе данных.
При вводе данных с помощью оператора READ нужно иметь в виду следующие основные правила:
- логические данные в Турбо Паскале вводить не разрешается;
- при вводе числовых данных, числа разделяются пробелом или символом окончания ввода (клавиша ENTER). Ввод всегда заканчивается нажатием клавиши ввода – ENTER;
- пробелы перед числом и между числами игнорируются, поэтому их можно ставить в любом количестве;
- если переменная описана как Integer , ее значение вводится как целое число, т.е. не допускается использование точки после числа;
- если переменная описана как вещественная ( Real ), а ее значение является целым числом, то можно вводить число как целое (т.е. без точки) и как вещественное число – с точкой. Преобразование целого числа к вещественному числу будет выполнено автоматически;
- ввод символьных данных имеет особенности. Поскольку пробел является символом, как и любой другой символ языка Турбо Паскаль, то символьные данные необходимо вводить сплошной строкой;
- одной символьной переменной можно присвоить значение только одного символа;
- нажатие клавиши ENTER воспринимается как символ, поэтому для правильного ввода символьных данных рекомендуется перед каждым оператором ввода символьных данных ставить оператор перехода на новую строку READLN , чтобы их ввод осуществлялся с новой строки.
ЗАДАЧА. Ввод данных.
Введем в программу следующие исходные данные:
Обозначим символом пробел при вводе. При вводе числа будем разделять пробелом. Между числами допускается любое количество пробелов. Тогда экран монитора при вводе данных может выглядеть следующим образом:
Введите a, b, c:
2
3
Введите x, y, z:44.4 47.5
76
Введите s1,s2,s3:A B C
Вывод данных
Для вывода данных из памяти компьютера на экран монитора предназначен оператор Write .
Здесь a1,a2,a3. an могут быть либо переменными, либо строкой символов, заключенной в апострофы. Все элементы перечисляются через запятую. Добавление к оператору WRITE символов LN обеспечивает автоматический переход курсора после вывода данных на новую строку.
Допускается использование оператора ввода без параметров
который выполняет переход на новую строку, поэтому последующий оператор вывода с параметрами будет выводить данные с новой строки. Оператор вывода без параметров часто используется для формирования пустых строк.
Параметрами оператора WRITE могут быть данные целого, вещественного, логического, символьного, а также типа string .
Расположение данных на экране монитора может быть задано параметрами оператора WRITE , тогда вывод называется выводом с форматами данных. Если в операторе WRITE форматы не используются, вывод называется бесформатным выводом или стандартной формой вывода.
Бесформатный вывод. Форма представления выводимых данных зависит от типа данных:
- значения логического типа выводятся в виде логических значений TRUE и FALSE ;
- значения символьных переменных выводятся в виде соответствующих символов;
- символьная константа выводится в том виде, как она записана, но без апострофов;
- значения величин целого типа выводятся как целые числа;
- значения величин вещественного типа выводятся в формате с плавающей точкой.
При бесформатном выводе отводимое количество позиций равно размеру данных. При выводе символа отводится одна позиция, при выводе целого числа – число позиций равно числу значащих цифр плюс одна позиция под знак, если число отрицательное. Это необходимо учитывать при последовательном выводе данных, например чисел, чтобы значения разных переменных не сливались друг с другом.
ПРИМЕР. Рассмотрим фрагмент программы:
Оператором write(n,m); на экран монитора выводятся целые числа: n=1234 и m=7890 . Поскольку используется вывод без форматов данных, результат будет иметь вид:
Два числа слились. Для того чтобы числа не сливались необходимо использовать разделяющие пробелы или разнесение информации по разным строкам.
Результат:
Результат:
Форматный вывод. Для вывода вещественных чисел необходимо указать в операторе WRITE формат представления числа, который имеет вид:
где: m – целое число, указывающее общее количество позиций отводимое под значение переменной, включая позицию под знак числа, точку и количество цифр дробной части; n – целое число, определяющее количество цифр дробной части.
Выводимая информация выравнивается по левому краю. При этом подавляется печать ведущих нулей, т.е. если для вывода числа было выделено четыре позиции, то на экран монитора будет выведено, например, 6 , а не 0006 .
Пример. Выведем значение переменной A , равное 401.3 оператором write(A:8:2) . На экран монитора будет выведено:
Символом обозначен пробел.
Вывод вещественных чисел выполняется по следующим правилам:
- Если число имеет меньшую длину, чем m , то оно будет дополнено слева пробелами.
- Если число имеет большую длину, чем m , то параметр m игнорируется и число будет выведено полностью.
- Если дробная часть больше, чем параметр n , то число округляется. Округление не изменяет самого значения переменной, меняется только представление числа на мониторе.
- Если параметр n не указан, то ни дробная часть числа, ни десятичная точка не выводятся. Вывод осуществляется в формате с плавающей запятой.
В качестве примера рассмотрим печать вещественного числа в различных форматах.
Результат работы программы:
Печать вещественного числа
Печать в фиксированном формате
Печать в плавающем формате
Для вывода целых чисел необходимо указать в операторе WRITE формат представления числа, который имеет вид:
k – целое число, указывающее общее количество позиций, отводимое под значение переменной.
В целых числах отсутствует дробная часть, поэтому нет необходимости указывать в формате число позиций дробной части.
Начальные сведения о программах на языке Pascal
Простейшие операторы
Перейдем теперь к изучению операторов — специальных конструкций языка Pascal .
Если говорить строго, то оператором называется (минимальная) структурно законченная единица программы .
Важно! Все операторы языка Pascal должны заканчиваться знаком «;» (точка с запятой), и ни один оператор не может разрываться этим знаком. Единственная возможность не ставить после оператора «;» появляется в том случае, когда сразу за этим оператором следует ключевое слово end .
К простейшим операторам языка Pascal относятся:
- a:= b; — присваивание переменной а значения переменной b. В правой части присваивания может находиться переменная , константа , арифметическое выражение или вызов функции.
- ; — пустой оператор , который можно вставлять куда угодно, а также вычеркивать откуда угодно, поскольку на целостность программы это никак не влияет.
- Операторные скобки , превращающие несколько операторов в один:
Везде далее, где в записи конструкций языка Pascal мы будем использовать обозначение , его следует понимать как «один оператор или несколько операторов, заключенные в операторные скобки begin — end «.
Метки и безусловный переход
Метка помечает какое-либо место в тексте программы . Метками могут быть числа от 0 до 9999 или идентификаторы , которые в этом случае уже нельзя использовать для каких-либо иных нужд. Все метки должны быть описаны в специальном разделе label:
Меткой может быть помечен любой оператор программы
Любая метка может встретиться в тексте программы только один раз. Используются метки только операторами безусловного перехода goto :
Это означает, что сразу после оператора goto будет выполнен не следующий за ним оператор (как это происходит в обычном случае), а тот оператор , который помечен соответствующей меткой .
В принципе, передавать управление можно вперед и назад по тексту программы , внутрь составных операторов и наружу и т.п. Исключением являются только процедуры и функции (см. лекцию 8): внутрь них и наружу безусловные переходы невозможны.
Вообще же использование безусловных переходов в структурном и надежном программировании считается «дурным тоном». Поэтому мы настоятельно советуем нашим читателям воздерживаться от употребления операторов goto . Язык Pascal обладает достаточным количеством структурных конструкций и возможностей, позволяющих достичь хороших результатов надежными средствами.
Ввод и вывод: консоль
Как мы уже говорили, любой алгоритм должен быть результативным. В общем случае это означает, что он должен сообщать результат своей работы потребителю: пользователю-человеку или другой программе (например, программе управления принтером ). Мы не будем описывать здесь внутренние автоматические процессы, использующие сигналы непрерывно функционирующих программ , а сосредоточим внимание на взаимодействии программы и человека, то есть на процессах ввода информации с клавиатуры и вывода ее на экран.
В программировании существует специальное понятие консоль , которое обозначает клавиатуру при вводе и монитор при выводе.
Ввод с консоли
Для того чтобы получить данные, вводимые пользователем вручную (то есть с консоли ), применяются команды
Первая из этих команд считывает все предложенные ей данные, оставляя курсор в конце последней строки ввода, а вторая — сразу после окончания ввода переводит курсор на начало следующей строки. В остальном же их действия полностью совпадают.
Список ввода — это последовательность имен переменных , разделенных запятыми. Например, при помощи команды
программа может получить с клавиатуры данные сразу для четырех переменных , относящихся к различным типам данных.
Вводимые значения необходимо разделять пробелами, а завершать ввод — нажатием клавиши Enter. Ввод данных заканчивается в тот момент, когда последняя переменная из списка ввода получила свое значение. Следовательно, вводя данные при помощи приведенной выше команды, вы можете нажать Enter четыре раза — после каждой из вводимых переменных , — либо же только один раз, предварительно введя все четыре переменные в одну строчку (обязательно нужно разделить их пробелами).
Типы вводимых значений должны совпадать с типами указанных переменных , иначе возникает ошибка. Поэтому нужно внимательно следить за правильностью вводимых данных.
Вообще, вводить с клавиатуры можно только данные базовых типов (за исключением логического). Если же программе все-таки необходимо получить с консоли значение для boolean-величины, придется действовать более хитро: вводить оговоренный символ, а уже на его основе присваивать логической переменной соответствующее значение. Например 4 Правила использования оператора выбора case и оператора цикла repeat описаны в лекции 3. :
Второе исключение: строки, хотя они и не являются базовым типом, вводить тоже разрешается. Признаком окончания ввода строки является нажатие клавиши Enter, поэтому все следующие за нею переменные необходимо вводить с новой строчки.
Вывод на консоль
Сделаем одно важное замечание: ожидая от человека ввода с клавиатуры, не нужно полагать, что он окажется ясновидящим и просто по мерцанию курсора на черном экране догадается, какого типа переменная нужна ожидающей программе . Старайтесь всегда придерживаться правила: «лысый» ввод недопустим! Перед тем как считывать что-либо с консоли , необходимо сообщить пользователю, что именно он должен ввести: смысл вводимой информации, тип данных , максимальное и минимальное допустимые значения и т.п.
Примером неплохого приглашения служит, скажем, такая строчка:
Впрочем, и ее можно улучшить, сообщив пользователю не только допустимый диапазон ввода, но и ожидаемую точность (количество знаков после запятой).
Средства, позволяющие организовать выдачу информации на экран, мы здесь и рассмотрим.
Для того чтобы вывести на экран какое-либо сообщение, воспользуйтесь процедурой write( ) или writeln( ) .
Первая из них, напечатав на экране все, о чем ее просили, оставит курсор в конце выведенной строки, а вторая переведет его в начало следующей строчки.
Список вывода может состоять из нескольких переменных , записанных через запятую; все эти переменные должны иметь тип либо базовый 5 Результатом вывода величины логического типа будет строка TRUE или FALSE , либо строчный. Например, writeln(a,b,c);
Форматный вывод
Если для вывода информации воспользоваться командой, приведенной в конце предыдущего пункта, то выводимые символы окажутся «слепленными». Чтобы этого не случилось, нужно либо позаботиться о пробелах между выводимыми переменными :
либо задать для всех (или хотя бы для некоторых) переменных формат вывода :
Первое число после знака «:» обозначает количество позиций, выделяемых под всю переменную , а второе — под дробную часть числа. Десятичная точка тоже считается отдельным символом.
Если число длиннее, чем отведенное под него пространство, количество позиций будет автоматически увеличено. Если же выводимое число короче заданного формата, то спереди к нему припишутся несколько пробелов. Таким образом можно производить вывод красивыми ровными столбиками, а также следить за тем, чтобы переменные не сливались.
Например, если a = 25, b = ‘x’, а c = 10.5, то после выполнения команды writeln(a:5,’ ‘,b,c:10:5) на экране или в файле будет записано следующее (подчерки в данном случае служат лишь для визуализации пробелов):
Особенно важен формат при выводе вещественных переменных . К примеру, если не указать формат, то число 10.5 будет выведено как 1.0500000000Е+0001. Такой формат называется записью с плавающей точкой.
Если же задать только общую длину вещественного числа, не указывая длину дробной части, то оно будет занимать на экране заданное количество символов (в случае надобности, спереди будет добавлено соответствующее количество пробелов), но при этом останется в формате плавающей точки. Минимальной длиной для вывода вещественных чисел является 10 (при формате _x.xE+yyyy). Первая позиция зарезервирована под знак «-«.
Необходимо помнить, что в случае недостаточной длины вывода число будет автоматически округлено, например (подчерк служит для визуализации пробела):