Вывод данных в окно программы
В консольных приложениях для вывода данных на экран есть два оператора вызова процедур с именами Write и WriteLn (далее их будем называть просто операторами вывода или операторами Write и WriteLn). Оператор WriteLn отличается от оператора Write тем, что после завершения вывода курсор в окне программы переводится в начало следующей строки, и если текущая строка была последней, то внизу окна программы появляется новая, пустая, а все другие смещаются вверх.
Подлежащие выводу данные перечисляются в списке вывода, который записывается в круглых скобках непосредственно за словами Write или WriteLn. Список выводаможет содержать выражения, в частности константы, переменные, обращения к функциям, разделенные запятыми. Оператор WriteLn можно записывать и без списка вывода и скобок, если требуется просто перевести курсор в начало новой строки.
Элементы списка вывода могут иметь из простых типов любой числовой, булевский и символьный. Пока ограничимся рассмотрением только числовых типов и строковых констант.
Пример. Составить программу вычисления с повышенной точностью (Extended) тангенса угла, значение которого (целое число) в градусах вводится с клавиатуры в ответ на приглашение к вводу. Вывести на экран с пояснениями введенное значение угла в градусах, соответствующее ему значение в радианах и вычисленное значение тангенса этого угла.
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils, Math;
var
R:Extended;
Fi:Integer;
begin
//Вывод приглашения к вводу угла в градусах
Write('Введите значение угла в градусах: ');
ReadLn(Fi);//Ввод значения угла в переменную Fi
R:=Fi*Pi/180;//Перевод угла в радианы и присвоение переменной R
//Вывод значения R
WriteLn('Значение угла в радианах = ',R);
WriteLn; //Пропуск строки
//Вывод R и tg(R) с поясняющими текстами
WriteLn('tg(', R, ') = ', Tan(R));
ReadLn;
end.
где заключенные в апострофы тексты, например, 'Fi = ', 'tg( ' и ' ) = ' – строковые константы, R и выражение Tan(R) представляют данные типа Extended.
Протокол ввода–вывода при выполнении этой программы при вводе для Fi значения 30 будет иметь вид:
а курсор перейдет в начало следующей, новой строки.
Первый оператор Write выводит приглашение к вводу, в ответ на которое пользователь вводит величину угла, в данном случае 30. Ввод данных заканчивается нажатием клавиши Enter, что приведет к переводу курсора в начало новой строки. Следующий далее оператор WriteLn('Значение угла в радианах = ',R) выводит значение угла в радианах и переводит курсор на начало следующей, пустой строки, оператор WriteLn без параметров оставит эту строку пустой и переведет курсор в начало еще одной новой пустой строки, в которую оператор WriteLn('tg(', R, ') = ', Tan(R)) выведет последовательность символов:
tg( 5.23598775598299E-0001) = 5.77350269189626E-0001.
В этом примере для всех типов данных использовались принятые по умолчанию (что не всегда удобно) форматы вывода: вещественные выводятся в экспоненциальной форме в 23 позициях с четырьмя цифрами порядка; целые и строковые занимают минимально необходимое число позиций, причем целые положительные изображаются без знака +.
Программисту, чтобы определить свою форму вывода, следует использовать один из форматов вывода, записываемый непосредственно за элементом списка вывода либо в виде :n – для любого типа данных, либо в виде :n:m – при выводе вещественного числа в естественной форме (<целая часть><точка><дробная часть>), где n – выражение целого типа, значение которого задает длину поля (число знакомест) в строке на экране, отводимых для изображения значения, а m – выражение целого типа, значение которого задает количество цифр в дробной части числа.
Значение выражения n может быть больше или меньше требуемого для представления значения количества знакомест. В первом случае выводимое значение будет расположено в правой части поля вывода. Во втором случае под вывод значения отводится минимально необходимое число позиций (для вещественных в экспоненциальной форме оно равно 10).
Например, при выполнении следующей программы:
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils, Math;
var
R:Extended;
Fi:Integer;
begin
//Вывод приглашения к вводу угла в градусах
Write('Введите значение угла в градусах: ');
ReadLn(Fi);//Ввод значения угла в переменную Fi
R:=Fi*Pi/180;//Перевод угла в радианы и присвоение переменной R
//Вывод значения R
WriteLn('Значение угла в радианах = ',R:0);
WriteLn; //Пропуск строки
//Вывод R и Tan(R) с поясняющими текстами
WriteLn('tg(', R:0:2, ') = ', Tan(R):14);
ReadLn;
end.
протокол ввода–вывода при вводе для Fi значения 30 будет иметь вид:
Значение R первый раз выведено в экспоненциальной форме в минимально необходимое число позиций (формат вывода :0), а второй раз – в естественной форме также в минимально необходимое число позиций (формат вывода :0:2), так как в обоих случаях длина поля вывода указана равной нулю, то есть меньше минимально необходимой. Значение выражения Tan(R) выведено в экспоненциальной форме в поле из 14 позиций с 6 значащими цифрами мантиссы (формат вывода :14).