Вывод на экран
Lazarus IDE: Основы программирования в Windows
Несмотря на то, что всё потихоньку уходит в сеть, программирование для настольных компьютеров остаётся востребованным. И будет таковым ещё долго. Ну а самая распространённая операционная система для настольных компьютеров – это по-прежнему Windows. Поэтому любой программист, даже если он собирается стать веб-разработчиком, должен знать хотя бы основы создания программ для Windows. Подробнее... |
Вывод на экран - это тоже очень важный момент в программировании. Потому что большинство данных передаётся пользователю именно через экран.
Вывод на экран (да и вообще вывод в стандартное устройство и в файл) в Паскале выполняется с помощью функций Write и WriteLn.
procedure Write(var Файл; Параметры);
Если выполняется запись в стандартное устройство вывода (например, на экран), то файл не указывается:
procedure Write(Параметры);
Файл - это файловая переменная.
Параметры - это одна или несколько переменных. Если переменных несколько, то они перечисляются через запятую и выводятся поочерёдно.
Процедура WriteLn выполняет аналогичные действия, только в конце своей работы ещё и переводит курсор на новую строку.
Впрочем, всё это вы уже знаете. Однако есть ещё кое-какие фишки, которые можно применять с процедурой Write в консольных приложениях.
Я говорю о форматированном выводе. Например, вы хотите вывести несколько значений в виде таблицы. Но таблица смотрится и воспринимается лучше, если её столбцы имеют одинаковую ширину. Но как этого добиться? Вот в этом то вам и поможет форматированный вывод. Информацию о форматированном выводе вы можете найти в справочных материалах.
Поскольку консольные приложения сегодня используются довольно редко, то я расскажу только о двух форматах.
Вывод с одинаковой шириной
Этот формат удобно использовать для вывода таблиц. Для символов отводится одинаковое количество знакомест на экране, поэтому столбцы таблицы получаются одинаковой ширины. Формат такой:
Write(S:W);
Где S - это число, которое выводится на экран, а W - ширина поля, в которое это значение выводится. Выравнивание происходит по правой стороне, то есть пробелы добавляются слева перед числом.
Вывод вещественных чисел
Мы с вами до сих пор неохотно работали с вещественными числами, потому что на экране они выглядели устрашающе - слишком много знаков после запятой.
Однако эта проблема легко решается с помощью форматирования:
Write(S:W:N);
Где S - это число, которое выводится на экран, а W - ширина поля, в которое это значение выводится, N - количество знаков после запятой. Выравнивание происходит по правой стороне, то есть пробелы добавляются слева перед числом.
Пример использования форматированного вывода на экран приведён в листинге 24.2.
program inout; var i : integer; z : single; begin for i := 1 to 100 do begin case i of 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 : WriteLn(i:5); else Write(i:5) end; end; Write(#10#13); for i := 1 to 50 do begin z := 3 / i; case i of 5, 10, 15, 20, 25, 30, 35, 40, 45, 50 : WriteLn(z:10:4); else Write(z:10:4) end; end; ReadLn; end.
Есть ещё очень полезная подпрограмма, которая пригодится вам при выводе информации на экран. Это процедура GoToXY, которая объявлена в модуле CRT:
procedure GoToXY(X, Y : TCRTCoord);
И пусть вас не пугает неизвестный тип TCRTCoord. На самом деле это обычный целочисленный тип данных с диапазоном 1..255. Отличие от типа Byte заключается только в том, что здесь нет значения 0, так как в Паскале координаты экрана начинаются с единицы. Хотя это не означает, что в качестве переменных для установки координат вы не можете использовать тип Byte или другой целочисленный.
Процедура GoToXY устанавливает курсор в координаты, заданные в соответствующих переменных.
Экран консольного приложения ещё со времён ДОС поделен на некоторое количество знакомест. В одно знакоместо можно вывести один знак (символ). Стандартный размер экрана - 80х25 символов. То есть 80 символов в ширину (координата Х) и 25 символов в высоту (координата Y).
Левый верхний угол имеет координаты (1, 1). Нижний правый угол имеет координаты (80, 25).
Пример использования:
var x, y : TCRTCoord; begin x := 6; y := 2; GoToXY(x, y); Write('Hello!!!'); GoToXY(x, y+4); Write('Press any key...'); repeat until KeyPressed; end.