Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

1800

.pdf
Скачиваний:
5
Добавлен:
15.11.2022
Размер:
925.77 Кб
Скачать

13.Напишите программу, которая сортирует записи в файле в алфавитном порядке фамилий.

14.Напишите программу, которая согласно запросу пользователя выводит информацию об абонентах, проживающих на заданной улице.

15.Напишите программу, которая согласно запросу пользователя выводит информацию об абонентах, проживающих в заданном доме.

16.Напишите программу, которая согласно запросу пользователя выводит информацию об абонентах, с заданными фамилией и именем.

17.Напишите программу, которая согласно запросу пользователя выводит информацию об абонентах, фамилия которых заканчивается на заданную букву.

18.Напишите программу, которая выводит диапазоны занятых номеров телефонов для каждой АТС без указания информации об абонентах.

Варианты 19 – 27.

В текстовом файле находятся записи о книгах в библиотеке. В каждой строке записана информация об одной книге: ФИО автора, название, год издания, количество страниц. Задачи необходимо решить с использованием процедур и функций.

19.Напишите программу, которая осуществляет добавление записи в файл с проверкой корректности данных (не существует ли уже добавляемая запись).

20.Напишите программу, которая удаляет из файла указанную запись.

21.Напишите программу, которая согласно запросу пользователя выводит информацию о книгах указанного автора.

22.Напишите программу, которая согласно запросу пользователя ищет книгу по указанной части названия.

23.Напишите программу, которая сортирует записи в файле в алфавитном порядке фамилий авторов.

70

24.Напишите программу, которая согласно запросу пользователя выводит информацию о книгах, выпущенных после указанного года.

25.Напишите программу, которая согласно запросу пользователя выводит информацию о книгах толще заданного числа страниц.

26.Напишите программу, которая согласно запросу пользователя выводит информацию о книгах, фамилия одного из авторов которых заканчивается на заданную букву.

27.Напишите программу, которая вычисляет, в какой год было выпущено максимальное количество книг.

71

ЛАБОРАТОРНАЯ РАБОТА № 4

РАБОТА С УСТРОЙСТВАМИ

Цели работы:

овладение практическими навыками работы с устройствами ЭВМ;

освоение методов программирования интерфейса.

Теоретические сведения

Устройства в языке Pascal

Трудно представить программу, которая не использовала бы устройства ЭВМ. Так, например, общение с пользователем, как правило, предполагает использование клавиатуры, мыши, монитора и других устройств. Поэтому для организации удобного пользовательского интерфейса необходимы средства для работы с устройствами. Такие средства предоставляются с одной стороны современными операционными системами, с другой — библиотеками для работы с устройствами из состава систем программирования. Работа с устройством заключается, как правило, в передаче данных между программой и устройством. В этом плане устройство немногим отличается от обычного файла. Поэтому связь с устройством зачастую возможна посредством файловой переменной. В языке Pascal устройства реализованы с помощью зарезервированных имен, с которыми связывают файловую переменную. В следующем примере необходимо вывести строку текста на принтер, подключенные к LPT порту.

Program LPTport; var

f : Text; // файловая переменная begin

Assign(f, 'LPT1');

72

Rewrite(f);

Writeln(f, 'Перчатаем на принтере!!!');

Close(f);

end.

Здесь файловая переменная ассоциируется с устройством LPT1. Далее с устройством работаю также как с обычным файлом. Следует заметить, что реакция принтера на выводимый текст в системе Windows может быть неадекватная.

Устройство CON

Для консоли (совокупность клавиатуры и монитора) заразервировано имя CON. С помощью этого устройства выводимая информация пересылается на экран, а вводимая информация вводится с клавиатуры. По умолчанию в программе незримо присутствуют две файловые переменные Input и Output, которые ссылаются на устройство CON. Поэтому следующие три способа вывода на экран являются эквивалентными:

WriteLn(’Выводим на экран!!!’);

Assign(f,’CON’);

Rewrite(f);

WriteLn(f, ’Выводим на экран!!!’);

Close(f);

Rewrite(Output);

WriteLn(Output, ’Выводим на экран!!!’);

Close(Output);

Эквивалентными являются следующие три способа ввода с клавиатуры:

ReadLn(x);

Assign(f,’CON’);

Reset(f);

ReadLn(f,x);

Close(f);

73

Reset(Input);

ReadLn(Input, ’Выводим на экран!!!’);

Close(Input);

Устройство CON работает только со строчной информацией.

Устройства LРT1, LРT2, LРT3

Имена LPT1, LPT2 и LPT3 зарезервированы для последовательных портов. Поскольку к LPT-порт часто используется как порт принтера, для устройства LPT1 предусмотрен синоним PRN. Чтобы использовать в программе принтер нужно подключить модуль Printer, в котором описана текстовая файловая переменная Lst и установлена ее связь с устройством

PRN.

Устройства COM1 и COM2

Устройствами коммуникационного порта являются два последовательных коммуникационных порта. Вместо COM1 можно использовать синоним AUX.

Модуль CRT

Поскольку консольный ввод-вывод играет большую роль при программировании пользовательского интерфейса, функции для работы с консолью собраны в отдельные библиотеки. В среде DOS и Windows роль такой библиотеки играет модуль

Crt.

Модуль Crt содержит подпрограммы для работы с окнами внутри текстового окна работающей программы (не путайте с окнами Windows). Процедура Window позволяет задать окно в любом месте экрана. Тогда экран за пределами окна становится недоступен. Внутри окна курсор переносится при достижении его правого края, и текст сдвигается вверх при достижении курсором нижней строки окна. Все экранные ко-

74

ординаты задаются относительно левого верхнего угла текущего окна. Окном по умолчанию является весь экран.

В табл. 4.1 приведен список специальных символов, которые имеют специальное назначение при выводе на экран.

Таблица 4.1

Специальные символы

Символ

Название

Описание

#7

Сигнал

Звуковой сигнал через внут-

ренний динамик (speaker).

 

 

 

 

Курсор перемещается на один

 

 

символ влево. Если курсор

#8

Назад

находится на левой границе

 

 

текущего окна, его положение

 

 

не меняется.

 

 

Курсор перемещается на одну

 

Новая

строку вниз. Если курсор

#10

находится на нижней строке

строка

 

текущего окна, текст сдвигает-

 

 

 

 

ся на одну строку вверх.

#13

Возврат

Курсор перемещается в край-

каретки

нее левое положение текущей

 

строки.

 

 

Вывод на экран (консоль)

Рассмотрим основные средства модуля crt для управления параметрами вывода на экран.

Процедура Window определяет текстовое окно на экране: procedure Window(X1,Y1,X2,Y2 : byte);

где Х1,У1,Х2,Y2 — координаты левой верхней и правой нижней позиций курсора в основном окне программа или на экране 0<=X<=80,0<=Y<=25.

При создании консольного приложения допускается использовать 16 цветов для цвета символов и 8 цветов для цвета фона. Допустимые цвета задаются в программе либо номером,

75

либо именем. Имена цветов описаны константами в модуле crt и приведены в табл. 4.2.

Таблица 4.2 Константы имен допустимых цветов в текстовом режиме

Константа

Значение

Константа

Значение

Black

0

DarkGray

8

Blue

1

LightBlue

9

Green

2

LightGreen

10

Cyan

3

LightCyan

11

Red

4

LightRed

12

Magenta

5

LightMagenta

13

Brown

6

Yellow

14

LightGray

7

White

15

Цвет символа может быть выбран мерцающим. Для удобства работы в модуле crt описана константа Blink=128.

В модуле crt определены переменные, значение которых влияет на параметры консольного вывода.

Переменная TextAttr имеет тип Byte и содержит параметры цвета выводимого текста. Распределение бит переменной TextAttr показано на рисунке.

Биты

7

6

5

4

3

2

1

0

Значение

B

f

f

f

t

t

t

t

Значения бит переменной TextAttr

Четыре младших бита tttt служат для задания цвета текста. Следующие три бита fff кодируют цвет фона. Последний старший бит В задает атрибут мерцания текста. Задать необходимую комбинацию цвета текста и фона можно с помощью присваивания

TextAttr:= ЦветТекста + ЦветФона*16 + Blink;

где цвет фона можно выбирать из первых 8 цветов. Наличие слагаемого Blink определяет наличие мерцания символов.

76

Цвет текста и фона можно также установить с помощью процедур

TextColor(Цвет);

TextBackground(Цвет);

соответственно.

Переменные WindMin и WindMax содержат экранные координаты текущего окна и имеют тип Word. Значения этих переменных изменяются при использовании процедуры Window. Переменная WindMin содержит координаты левого верхнего угла, а WindMax — правого нижнего. Координата Х находится в младшем байте и координата Y — в старшем. Получить координату Х можно с помощью функции Lo(WindMin), которая возвращает значение младшего байта своего аргумента. Аналогично получить координату Y можно с помощью функции Hi(WindMin), которая возвращает значение старшего байта своего аргумента.

Работа с клавиатурой (консолью)

Чтение с клавиатуры с использованием файловой переменной Input позволяет ввести за один раз всю строку текста. Так, например, работает процедура ReadLn. Вместе с тем существуют способы посимвольного ввода под управлением программы.

Функция

function KeyPressed : Boolean;

проверяет состояние клавиатуры и возвращает true, если была нажата любая клавиша. Например, пустой цикл

repeat until Keypressed;

выполняется до тех пор, пока не будет нажата какая-нибудь клавиша и используется для программирования приостановки программы.

Функция

function ReadKey : Char;

77

считывает с клавиатуры символ, соответствующий нажатой клавише. Однако, использование функции ReadKey имеет некоторые особенности.

Все клавиши клавиатуры делятся на алфавитноцифровые и управляющие. К управляющим относятся, например, стрелки, функциональные клавиши, Home, End, Esc и т.д. При нажатии управляющих клавиш в программу поступает последовательность из двух символов. Первый из них имеет код 0, а второй — код управляющей клавиши. Поэтому при программировании реакции программы на управляющий клавиши необходимо считывать код клавиши функцией ReadKey дважды. В качестве примера рассмотрим программу, реагирующую на клавиши управления курсором (стрелки).

Program Primer; uses crt;

var c : char; begin

repeat c:=ReadKey;

if ord(c)=0 then begin c:=ReadKey; case ord(c) of

72 : WriteLn('Вынажали стрелку вверх');

75 : WriteLn('Вынажали стрелку влево');

77 : WriteLn('Вынажали стрелку вправо');

80 : WriteLn('Вынажали стрелку вниз'); end;

end; until c=#13; end.

Тело программы представляет собой цикл repeat

c:=ReadKey;

until c=#13;

78

в котором происходит считывание символа с клавиатуры. Условие окончания цикла c=#13 соответствует нажатию клавиши Enter (код 13). Если код считанного символа равен 0, что свидетельствует о нажатии управляющей клавиши, то символ считывается повторно

if ord(c)=0 then begin c:=ReadKey;

end;

Анализ нажатой клавиши заключается в сравнении ее кода с заранее известными кодами клавиш управления курсором: 72 (стрелка вверх), 75 (стрелка влево), 77 (стрелка вправо) и 80 (стрелка вниз).

case ord(c) of

72 : WriteLn('Вы нажали стрелку вверх');

75 : WriteLn('Вы нажали стрелку влево');

77 : WriteLn('Вы нажали стрелку вправо');

80 : WriteLn('Вы нажали стрелку вниз'); end;

Общие средства модуля Crt

Функции

function WhereX : Byte; function WhereY : Byte;

возвращают горизонтальную или вертикальную координату позиции курсора относительно текущего окна (например,

A:=WhereY;).

Процедура

procedure ClrEol;

удаляет все символы от текущей позиции курсора до конца строки. Курсор не перемещается.

Процедура

procedure DelLine;

79

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]